38

I need run Apache2 on my Debian 7 server. But it run only on tcpv6 port, not on tcpv4 port. I installed it with apt-get install. If I go to localhost or 127.0.0.1 or my server IPv4 address it does not display any website.

My /etc/apache2/ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       
6
  • 4
    Try changing the Listen 80 to Listen 0.0.0.0:80. You can refer to the documentation httpd.apache.org/docs/2.2/bind.html for more information. Dec 24, 2013 at 14:58
  • @pradeepchhetri Thank you. It works. I can access to my server address from any computer and it show content (IP address/some.php), but I don´t access to some.php from this server. I have tried localhost, 127.0.0.1 and external IP:port number that works from other PC... But it does not work.
    – Mato
    Dec 25, 2013 at 14:12
  • 1
    Can you post the output of sudo iptables -nvL and sudo sestatus ? I think you have some local firewall which is preventing. Dec 25, 2013 at 17:25
  • @Mato you need to clarify, when it shows content but not working, do you mean that it's showing your the raw PHP instead of running it? If so, you need to enable the PHP module. I think a2enmod php5 should do it for you.
    – robbat2
    Dec 26, 2013 at 17:05
  • 5
    Linux machines typically hide a dualstack IPv4+IPv6 socket behind listening on IPv6 address ::. Jul 12, 2014 at 20:55

4 Answers 4

49

The fact that netstat shows only tcp6 here is not the problem. If you don't specify an address to listen on, apache will listen on all supported address families using a single socket (for design reasons, sshd uses a unique socket per address & address family, hence showing up twice in your netstat output).

Here's one of my systems, showing apache having only tcp6 sockets, and yet still working fine via both IPv4 and IPv6.

woodpecker ~ # netstat -anp |grep apache
tcp6       0      0 :::80    :::*       LISTEN      1637/apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

If you run wget http://127.0.0.1/ -O - on the server what happens? Does it successfully connect? Does it return the raw HTML for your website as expected?

2
  • thanks, now it works, but I have only one small problem yet. I have wrote about it above.
    – Mato
    Dec 25, 2013 at 14:14
  • You know the crazy thing is this has always been my experience. Naturally. As a network programmer I know well about INADDR_ANY and IN6ADDR_ANY_INIT. But today I've seen some really strange behaviour. No firewall changes, no Apache changes but somehow remote hosts can only connect via IPv6 - which is a problem for those who still don't have IPv6. It's certainly something I will work out but you're absolutely correct (though the invocation you give isn't applicable in my case unfortunately).
    – Pryftan
    Nov 15, 2019 at 18:20
6

This will handle IPV4 connections only:

Listen 0.0.0.0:80
Listen 192.0.2.1:80 

https://httpd.apache.org/docs/2.2/bind.html#ipv6

3
  1. 127.0.0.1 is local to a machine only, you have to be on the server itself in a browser to use the local loopback ip/address;

  2. You might have a firewall blocking ports;

  3. Make sure apache is running and working properly, check error logs;

  4. Double check all your apache configs;

  5. Are you hosting from the root www or the user public_html directory?

  6. Double check owner and permissions.


Almost the year 2019 (Welcome to the future):

  • By default most of the world uses ipv6 and if fails, falls back on ipv4;

  • We now have ipv4 tunnels over ipv6, and vise-versa;

  • Most OS, programs, client, and server alike mostly do this now;

  • Welcome to the world of no more NATs and having to depend now on firewall/filters right to your device;

  • I would recommend trying to keep your systems all dual stacked, supporting both ipv4 and ipv6 at the same time, so when the magic switch happens, you're still up and running. My OS, network, even my ISP is dual stacked end to end. I could turn off ipv4 fully if I wanted to, but what's out there that might not work anymore if no tunnels exist back to ipv6 from ipv4.

3
  • I was on the tenterhooks of whether or not to give you a +1 - since you used the word 'folder'. But the idea of not disabling IPv6 is so important - as is making sure that your firewall is properly configured for IPv6. I know that many people think NAT is security but at most that's an illusion (it's also a problem for many services). That and your other points are all valid so have a +1.
    – Pryftan
    Nov 15, 2019 at 18:12
  • I'm sorry I meant directory :-P
    – cdmlb
    Nov 16, 2019 at 20:09
  • Well for that I would give you another +1 if I could. I'm rather surprised and also humbled that you would change it. I'm a purist is I think all I can say. It bemuses me and irks me that a certain company used to have it correct and then changed it to 'folder'. Well maybe that's to make it more 'friendly' to people but then it seems to have been accepted as the right word for others who should know better. I don't know. Anyway your entire list is something I really wish more people would understand! Alas many do not...
    – Pryftan
    Nov 17, 2019 at 21:29
-1

*

wget http://127.0.0.1/ -O /dev/null

* represents connection to local server without handling IPv4 or IPv6, if you change localhost (or 127.0.0.1) to real IPv4 IP address of this server, you cant wget anything because denied connection.

Try to describe you IP in config files: NameVirtualHost :80 Listen :80

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .