Apache2无法在IPv4 TCP端口上运行


23

我需要在我的Debian 7服务器上运行Apache2。但是它仅在tcpv6端口上运行,而不在tcpv4端口上运行。我用apt-get install安装了它。如果我转到localhost或127.0.0.1或我的服务器IPv4地址,它将不显示任何网站。

我的/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       

3
尝试将更Listen 80改为Listen 0.0.0.0:80。您可以参考文档httpd.apache.org/docs/2.2/bind.html了解更多信息。
pradeepchhetri 2013年

@pradeepchhetri谢谢。有用。我可以从任何计算机访问服务器地址,并且显示内容(IP地址/some.php),但是我无法从该服务器访问some.php。我试过了localhost,127.0.0.1和可在其他PC上使用的外部IP:端口号...但是它不起作用。
马托2013年

1
你能后的输出sudo iptables -nvLsudo sestatus?我认为您有一些本地防火墙正在阻止您。
pradeepchhetri

@Mato您需要澄清,当它显示内容但不起作用时,是否表示它在显示原始PHP而不是运行它?如果是这样,则需要启用PHP模块。我认为a2enmod php5应该为您做。
robbat2

3
Linux机器通常在侦听IPv6地址后隐藏双栈IPv4 + IPv6套接字::
PavelŠimerda2014年

Answers:


32

netstat在这里仅显示tcp6的事实并不是问题。如果您未指定要监听的地址,则apache将使用单个套接字监听所有受支持的地址系列(出于设计原因,sshd为每个地址和地址族使用唯一的套接字,因此在netstat输出中显示两次)。

这是我的系统之一,显示apache只有tcp6套接字,但仍然可以通过IPv4和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]
...

如果您wget http://127.0.0.1/ -O -在服务器上运行,会发生什么?是否成功连接?它是否按预期返回您网站的原始HTML?


谢谢,现在可以了,但是我只有一个小问题。我已经在上面写过。
马托2013年

您知道疯狂的是,这一直是我的经验。自然。作为网络程序员,我对INADDR_ANY和非常了解IN6ADDR_ANY_INIT。但是今天我看到了一些非常奇怪的行为。没有防火墙更改,没有Apache更改,但是以某种方式远程主机只能通过IPv6连接-这对于仍然没有IPv6的用户来说是个问题。这肯定是我会解决的问题,但是您是绝对正确的(尽管不幸的是,您给出的调用不适用于我的情况)。
普莱弗坦


1
  1. 127.0.0.1仅对于计算机是本地的,您必须在服务器本身中的浏览器中才能使用本地回送ip /地址;

  2. 您可能有防火墙阻止了端口。

  3. 确保apache运行正常,检查错误日志;

  4. 仔细检查您所有的Apache配置;

  5. 您是从根www还是用户public_html目录托管?

  6. 仔细检查所有者和权限。


快到2019年了(欢迎来到未来):

  • 默认情况下,世界上大多数国家使用ipv6,如果失败,则使用ipv4;

  • 现在,我们在ipv6上有了ipv4隧道,反之亦然;

  • 大多数OS,程序,客户端和服务器现在都这样做。

  • 欢迎来到没有NAT的世界,现在必须依靠适合您设备的防火墙/过滤器;

  • 我建议您尝试使您的系统全部双重堆叠,同时支持ipv4和ipv6,因此,当发生魔术切换时,您仍可以正常运行。我的操作系统,网络,甚至我的ISP都是端对端双重堆叠的。如果需要,我可以完全关闭ipv4,但是如果没有隧道可以从ipv4返回到ipv6,那么那里的内容可能不再起作用。


由于您使用的是“文件夹”一词,因此我是否愿意给您+1。但是,不禁用IPv6的想法非常重要-确保已为IPv6正确配置了防火墙。我知道许多人认为NAT是安全性,但这最多只是一种幻想(对于许多服务来说也是一个问题)。该点和您的其他点均有效,因此有+1。
Pryftan

抱歉,我的意思是目录:-P
cdmlb

好吧,如果可以的话,我会再给您+1。我很惊讶,也很谦虚,你会改变它。我是一个纯粹主义者,我想我只能说。令我感到困惑的是,让我感到恼火的是,某家公司曾经对其进行过纠正,然后将其更改为“文件夹”。好吧,也许是为了使其对人们更加“友好”,但是对于其他应该更了解的人来说,它似乎已被视为正确的词汇。我不知道。无论如何,我真的希望更多的人能理解您的整个清单!
las

-1

*

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

*表示不处理IPv4或IPv6而与本地服务器的连接,如果将localhost(或127.0.0.1)更改为该服务器的真实IPv4 IP地址,则由于拒绝连接而无法获取任何内容。

尝试在配置文件中描述您的IP:NameVirtualHost:80听:80

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.