apache 伺服器沒有監聽 80 埠
我的工作站和伺服器都在同一個區域網路段上,並且可以互相 ping 通(我可以從我的工作站 ssh 進入伺服器而不會出現問題)。
在centos 7上預設安裝了apache。
啟動了服務,但我無法從我的工作站瀏覽到我的網路伺服器。
nmap 報告埠 80 被過濾。
我在伺服器上禁用了 SELinux,但埠仍然被過濾。
這是 netstat -l 給我的:
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN raw6 0 0 [::]:ipv6-icmp [::]:* 7
奇怪的 netstat -na 將埠 80 顯示為正在監聽,但對於 ipv6(雖然我在某處讀到這並不一定意味著它也不在 ipv4 上監聽)
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 64 10.1.1.1:22 10.2.2.2:44939 ESTABLISHED tcp6 0 0 :::80 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN raw6 0 0 :::58 :::* 7
這是我的 /etc/httpd/conf/httpd.conf 的相關部分(我沒有修改)
<Directory /> AllowOverride none Require all denied </Directory> <Directory "/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <Files ".ht*"> Require all denied </Files>
該服務似乎執行正常:
httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: active (running) since Fri 2015-10-02 08:36:40 EDT; 1h 27min ago Process: 23294 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) Main PID: 23302 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─23302 /usr/sbin/httpd -DFOREGROUND ├─23303 /usr/sbin/httpd -DFOREGROUND ├─23304 /usr/sbin/httpd -DFOREGROUND ├─23305 /usr/sbin/httpd -DFOREGROUND ├─23306 /usr/sbin/httpd -DFOREGROUND └─23307 /usr/sbin/httpd -DFOREGROUND
為什麼不監聽 80 埠?
正如邁克爾漢普頓在您的文章中評論的那樣,我敢打賭您的防火牆(iptables)正在阻止您的流量。
要麼禁用它 (
systemctl disable firewalld
),要麼告訴它允許埠 80 (firewall-cmd --zone=public --add-port=80/tcp --permanent
) 上的流量。
埠 80 是否被過濾這一事實與 netstat 輸出無關。即使 iptables 配置為阻止(DROP 或 REJECT)與該埠的連接,您也應該看到 Apache 正在偵聽 80 埠。
關鍵是 httpd 被配置為同時監聽 IPv4 和 IPv6 ANY 地址(0.0.0.0 和 ::),在這種情況下,netstat 只顯示 IPv6 地址。解釋在這裡:
https://bugs.launchpad.net/ubuntu/+source/net-tools/+bug/657270
簡而言之:在這種情況下,IPv6 連接能夠為兩種協議提供服務,因此只打開一個套接字。由於只打開了一個套接字,因此 netstat 輸出中只顯示了一個套接字。