在netstat中看不到Apache正在运行


10

我只是在使用apache玩而已,它可以正常工作,也就是说,我可以通过浏览到服务器来连接服务器,http://127.0.0.1http://192.168.1.5我没有运行IPv6

但这是netstat的结果

$ sudo service apache2 status
 * apache2 is running
$ netstat -an | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN

$ wget 127.0.0.1
--2014-06-26 01:32:15--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11510 (11K) [text/html]
Saving to: ‘index.html’

100%[=====================================================================================================>] 11,510      --.-K/s   in 0s      

2014-06-26 01:32:15 (161 MB/s) - ‘index.html’ saved [11510/11510]

我期望看到它在侦听常规TCP上的通讯,显然它是这样做的!!

编辑:

$ netstat -a | grep LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 localhost:mysql         *:*                     LISTEN     
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN     
tcp6       0      0 [::]:https              [::]:*                  LISTEN     
tcp6       0      0 [::]:http               [::]:*                  LISTEN     

Edit2: 为什么要投反对票?我想念的是谁?


尝试netstat -a | grep LISTEN和发布输出
Lety

发表结果
meccooll

试过了netstat -p吗?
大师

最后两行是指正在端口80和443上监听的apache。请尝试使用muru建议查看进程/ pid。
Lety 2014年

@Letizia是正确的,但是它在第一列中说tcp6,对于IPv6的ip来说是::,但是我正在IPv4上连接到它?
meccooll 2014年

Answers:


17

TL; DR

Apache 确实出现在您的netstat输出中,并且正在运行。这就是您的wget通话正常的原因。但是,它绑定到您的IPv6地址,而不是您的IPv4地址。地址映射在必要时处理翻译。

去看文档

显然这里有一些IPv6-IPv4后备机制。实际上,我尚未在本地网络上使用IPv6:

$ netstat -tunla | grep LISTEN | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN

重要的是要注意,无论您如何寻址计算机,最终服务和端口还是一样。其余的主要取决于您的浏览器和DNS解析服务。但是,有关Apache如何处理此问题的更多信息,您可能需要看一下他们的文档

对于Apache管理员来说,一个复杂的因素是IPv6套接字是否可以同时处理IPv4连接和IPv6连接。使用IPv6套接字处理IPv4连接时,会使用IPv4映射的IPv6地址,大多数平台默认情况下允许使用,但FreeBSD,NetBSD和OpenBSD默认情况下不允许使用这些地址,以匹配这些平台上的系统级策略。在默认情况下不允许使用的系统上,特殊的configure参数可以更改Apache的此行为。

基本上,这与处理IPv4和IPv6套接字有关,这将避免大多数与跨平台兼容性和套接字处理有关的问题。如您所见,在Linux平台(如Ubuntu)上,使用IPv4映射的IPv6地址解决了此问题。该文档还指出:

如果您希望Apache仅处理IPv4连接,无论您的平台和APR支持什么形式,请在所有Listen指令上指定一个IPv4地址。

这将在ports.conf文件中给出类似这样的内容:

Listen 0.0.0.0:80 # Or...
Listen 127.0.0.1:80 # Or...
Listen 192.0.2.1:80

结果为以下netstat输出之一...

$ netstat -tunla | grep LISTEN | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN 
$ netstat -tunla | grep LISTEN | grep 80
tcp        0      127.0.0.1:80              127.0.0.1:80            LISTEN
$ netstat -tunla | grep LISTEN | grep 80
tcp        0      192.0.2.1:80              192.0.2.1:80            LISTEN 

一个美丽但尚未就绪的IPv6侦听器。上面的设置通常是在中设置的/etc/apache2/ports.confapache2.conf对于较旧的版本则直接设置在)。默认值为Listen 80,它执行自动绑定,即符合文档中给出的IPv6规范。


1
呵呵不知道地址映射,所以我必须注意IPv6和IPv4上的开放端口。
meccooll 2014年

加入“ askubuntu”以支持这个问题和答案!
炳廷
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.