我的工作站和伺服器都在同一個 LAN 網段上,並且可以互相 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 埠?
答案1
正如 Michael Hampton 對您的帖子發表的評論一樣,我敢打賭您的防火牆(iptables)正在阻止您的流量。
停用它 ( systemctl disable firewalld
),或告訴它允許連接埠 80 上的流量 ( firewall-cmd --zone=public --add-port=80/tcp --permanent
)。
答案2
連接埠 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 輸出中僅顯示一個套接字。
答案3
檢查 iptables 規則 ( iptables-save
) 並查看是否允許連接埠 80。
出於測試目的,您可以執行service iptables stop
或iptables -F
。