Apache 服务器未监听 80 端口

Apache 服务器未监听 80 端口

我的工作站和服务器都在同一个 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 配置为阻止(DROP 或 REJECT)到该端口的连接,您也应该看到 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 stopiptables -F

相关内容