apache服务器没有监听80端口

red*_*888 4 linux redhat centos apache-2.4

我的工作站和服务器都在同一个 LAN 网段上,并且可以互相 ping 通(并且我可以从我的工作站 ssh 到服务器,没有问题)。

\n\n

centos 7 上默认安装了 apache。

\n\n

启动了服务,但我无法从我的工作站浏览到我的网络服务器。

\n\n

nmap报告80端口被过滤。

\n\n

我在服务器上禁用了 SELinux,但端口仍然被过滤。

\n\n

这是 netstat -l 给我的内容:

\n\n
Proto Recv-Q Send-Q Local Address           Foreign Address         State\ntcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN\ntcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN\ntcp6       0      0 [::]:http               [::]:*                  LISTEN\ntcp6       0      0 [::]:ssh                [::]:*                  LISTEN\ntcp6       0      0 localhost:smtp          [::]:*                  LISTEN\nraw6       0      0 [::]:ipv6-icmp          [::]:*                  7\n
Run Code Online (Sandbox Code Playgroud)\n\n

奇怪的是 netstat -na 显示端口 80 正在侦听,但对于 ipv6(虽然我在某处读到这并不一定意味着它也不侦听 ipv4)

\n\n
Proto Recv-Q Send-Q Local Address           Foreign Address         State\ntcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN\ntcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN\ntcp        0     64 10.1.1.1:22             10.2.2.2:44939        ESTABLISHED\ntcp6       0      0 :::80                   :::*                    LISTEN\ntcp6       0      0 :::22                   :::*                    LISTEN\ntcp6       0      0 ::1:25                  :::*                    LISTEN\nraw6       0      0 :::58                   :::*                    7\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的 /etc/httpd/conf/httpd.conf 的相关部分(我没有修改)

\n\n
<Directory />\n    AllowOverride none\n    Require all denied\n</Directory>\n\n<Directory "/var/www">\n    AllowOverride None\n    # Allow open access:\n    Require all granted\n</Directory>\n\n<Directory "/var/www/html">\n\n    Options Indexes FollowSymLinks\n    AllowOverride None\n    Require all granted\n</Directory>\n\n<Files ".ht*">\n    Require all denied\n</Files>\n
Run Code Online (Sandbox Code Playgroud)\n\n

该服务似乎运行正常:

\n\n
httpd.service - The Apache HTTP Server\n   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)\n   Active: active (running) since Fri 2015-10-02 08:36:40 EDT; 1h 27min ago\n  Process: 23294 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)\n Main PID: 23302 (httpd)\n   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"\n   CGroup: /system.slice/httpd.service\n           \xe2\x94\x9c\xe2\x94\x8023302 /usr/sbin/httpd -DFOREGROUND\n           \xe2\x94\x9c\xe2\x94\x8023303 /usr/sbin/httpd -DFOREGROUND\n           \xe2\x94\x9c\xe2\x94\x8023304 /usr/sbin/httpd -DFOREGROUND\n           \xe2\x94\x9c\xe2\x94\x8023305 /usr/sbin/httpd -DFOREGROUND\n           \xe2\x94\x9c\xe2\x94\x8023306 /usr/sbin/httpd -DFOREGROUND\n           \xe2\x94\x94\xe2\x94\x8023307 /usr/sbin/httpd -DFOREGROUND\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么它不监听 80 端口?

\n

小智 7

端口 80 是否被过滤这一事实与 netstat 输出无关。即使 iptables 配置为阻止(删除或拒绝)与该端口的连接,您也应该看到 Apache 正在侦听 80 端口。

要点是 httpd 配置为侦听 IPv4 和 IPv6 任何地址(0.0.0.0 和 ::),在这种情况下,netstat 仅显示 IPv6 地址。解释在这里:

https://bugs.launchpad.net/ubuntu/+source/net-tools/+bug/657270

简而言之:在这种情况下,IPv6 连接能够为两种协议提供服务,因此仅打开一个套接字。由于仅打开了一个套接字,因此 netstat 输出中仅显示一个套接字。