Apache 重启后停止接受外部请求

Apache 重启后停止接受外部请求

我在 CentOS 7 服务器上托管客户的 wordpress 网站,使用 apache 2.4.6,托管在 cloudflare 代理后面。我大约 8 个月前设置好了一切,从那时起它一直运行良好。

今天早上 5:30 左右,网站瘫痪,显示超时。我检查了日志,在/var/log/httpd/error_log网站停止工作时发现了以下条目:

[Thu Sep 19 04:35:57.343495 2019] [mpm_prefork:notice] [pid 13447] AH00170: caught SIGWINCH, shutting down gracefully
[Thu Sep 19 04:35:58.598479 2019] [core:notice] [pid 22161] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Thu Sep 19 04:35:58.602722 2019] [suexec:notice] [pid 22161] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[Thu Sep 19 04:35:58.638160 2019] [lbmethod_heartbeat:notice] [pid 22161] AH02282: No slotmem from mod_heartmonitor
[Thu Sep 19 04:35:58.701474 2019] [mpm_prefork:notice] [pid 22161] AH00163: Apache/2.4.6 (CentOS) PHP/5.4.16 configured -- resuming normal operations
[Thu Sep 19 04:35:58.701545 2019] [core:notice] [pid 22161] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

自此以后,唯一的条目access_log就是来自本地的请求。

为了进行调试,我目前已禁用 cloudflare 代理(因此 DNS 现在直接指向我的服务器),并且我index.html在 Web 根目录中只有一个文件。如果我wget mydomain.com在机器上本地运行,我index.html就可以正常获取测试内容,并且会出现一个条目access_log。如果我在外部服务器上尝试同样的事情,我会收到以下错误,并且 access_log 中没有条目:

(mydomain.com)|<the server's ip>|:80... failed: Resource temporarily unavailable

我已经仔细检查了 iptables 配置,但自五月以来它就没有被修改过,所以我很确定这不是防火墙问题。

我还重新启动了 httpd、mariadb 并重新启动了服务器,但无济于事。

还有什么其他因素可能导致 Apache 出现这些问题吗?

如果有帮助的话,服务器托管在 rackspace 云中,并且配置尽可能接近默认值;我没有设置 VirtualHosts 或类似的东西。

以下是输出netstat -l -n -t -p

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1459/master
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1383/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1500/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1459/master
tcp6       0      0 :::443                  :::*                    LISTEN      1110/httpd
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      1110/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      1500/sshd

nmap 输出

Not shown: 999 filtered ports

PORT   STATE SERVICE VERSION

22/tcp open  ssh     OpenSSH 7.4 (protocol 2.0)

答案1

查看输出后nmap,很明显 http(s) 端口没有暴露。通过firewall-cmd --list-all在服务器上运行进一步证实了这一点:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

为了解决这个问题,请运行:firewall-cmd --add-service=https --permanent。您可以通过firewall-cmd --list-all再次运行并查看 是否http出现在services:部分中来确认它是否有效。

此后,apache chan 再次看到所有外部请求。

相关内容