更新:我尝试回滚 yum 更新,但没有解决问题。我还尝试仅使用单个虚拟主机且没有 SSL 来运行服务器,然后尝试通过 http 访问站点。我仍然没有工作,但是 SSL 错误消失了,所以我认为我已经消除了 SSL 问题的根源。我启用了调试级别日志记录并重新检查了所有日志 - 没有任何帮助。
我停止了firewalld,网站又恢复正常了。好吧,很好,但我应该修复防火墙。 JSBillings 在他的评论中指出了有关我的 VPS 所在容器类型的一些问题以及防火墙的已知问题。我需要更彻底地研究它们。
回顾一下问题:Apache 运行(如果我执行 systemctl status httpd,则显示正在运行),但不会提供页面。远程请求未命中 httpd 请求日志。我在防火墙日志中没有看到与我尝试从远程计算机连接相关的任何内容。
有趣的是:如果我在同一虚拟主机上运行链接并指向我的任何一个域,我会收到“无法检索:SSL 错误”。如果我将链接指向环回或服务器 IP,我会得到一个虚拟主机,因此我禁用该主机并重试。结果是按字母顺序排列的下一个虚拟主机。如果我将桌面上的浏览器指向服务器 IP,则会出现超时,就像我尝试访问域名时一样。
我还尝试将链接指向 http 版本,它似乎确实重定向到 https(然后给出与上面相同的错误)。我可以在日志中看到成功的链接请求,但看不到不成功的链接请求。
这可能是我的主机或 DNS 的问题吗?或者虚拟主机模块现在坏了?我觉得我已经排除了 SSL 的原因,但仍然看到一些证据表明这是问题所在(链接错误)。或者这完全是另外一回事?
请记住,一切都已经工作了几个月,直到我昨天进行了 yum 更新并重新启动(现在为此而自责)。
背景/配置
我有一个运行 CentOS 7 和 Apache 2.4.6 以及 PHP 和 MariaDB 的 VPS。我使用虚拟主机设置来托管 4 个小站点,每个站点都有一个唯一的域名。我将使用domain1.com 代替我的真实域名。虚拟主机文件示例:
<VirtualHost *:80>
ServerName domain1.com
-other typical settings...
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain1.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我也有目录设置,我不会费心列出。
几个月前,我使用 Certbot (Letsencrypt) 设置我的 SSL。它在我的原始主机文件(上面)中添加了虚拟主机文件和重定向。从那时起,我多次更新了我的证书。
一切都工作正常,直到我今天下午运行、更新并重新启动。
以下是 yum 日志中包含 HTTPD、SSL 或 TLS 的条目:
Apr 29 13:17:41 Updated: httpd-tools-2.4.6-93.el7.centos.x86_64
Apr 29 13:18:29 Updated: httpd-2.4.6-93.el7.centos.x86_64
Apr 29 13:20:55 Updated: 1:mod_ssl-2.4.6-93.el7.centos.x86_64
Apr 29 13:18:39 Installed: gnutls-3.3.29-9.el7_6.x86_64
SSL 错误日志 (我已将我的真实域名替换为“domain.com”)(这些条目是在今天更新后开始的)
[Wed Apr 29 16:47:40.447536 2020] [ssl:warn] [pid 4945] AH01909: RSA certificate configured for domain1.com:443 does NOT include an ID which matches the server name
[Wed Apr 29 16:48:26.901356 2020] [ssl:warn] [pid 485] AH01909: RSA certificate configured for server.domain1.com:443 does NOT include an ID which matches the server name
我研究了这些警告,但无法就导致这些警告的原因得出明确的结论。但是,由于它们只是警告,因此它们不应该引起问题。尽管如此,这是我对这个问题的唯一线索。
HTTPD 错误日志 (我在更新之前在日志中看到过这些东西)
[Wed Apr 29 16:48:27.061664 2020] [ssl:warn] [pid 485] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Apr 29 16:48:32.016207 2020] [mpm_prefork:notice] [pid 485] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.2.30 configured -- resuming normal operations
[Wed Apr 29 16:48:32.016265 2020] [core:notice] [pid 485] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Wed Apr 29 17:04:52.428739 2020] [mpm_prefork:notice] [pid 485] AH00170: caught SIGWINCH, shutting down gracefully
[Wed Apr 29 17:04:53.548204 2020] [suexec:notice] [pid 1182] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Apr 29 17:04:53.554485 2020] [ssl:warn] [pid 1182] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Apr 29 17:04:53.599697 2020] [lbmethod_heartbeat:notice] [pid 1182] AH02282: No slotmem from mod_heartmonitor
[Wed Apr 29 17:04:53.605746 2020] [ssl:warn] [pid 1182] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Apr 29 17:04:53.646755 2020] [mpm_prefork:notice] [pid 1182] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.2.30 configured -- resuming normal operations
[Wed Apr 29 17:04:53.646797 2020] [core:notice] [pid 1182] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
自更新以来,HTTP 请求日志不包含新条目。
如果我在 SSH 中输入主机名,它会返回“服务器”。
SSL配置文件有以下 2 条兴趣线:
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
当我检查证书时,我看到 CN=server
Cerbot 将其证书安装在 /etc/letsencrypt 中,它们对应于我的 4 个域名。
我的主机文件:(编辑以隐藏我的真实域名)
127.0.0.1 localhost.localdomain localhost localhost4.localdomain4 localhost4
# Auto-generated hostname. Please do not remove this comment.
190.97.167.205 server.domain1.com server domain2.com domain3.com domain4.monster
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
我不认为这是一个防火墙问题,因为从同一个盒子运行链接仍然会产生问题,但是来自firewalld日志的这些条目看起来不太好:
2020-04-29 16:48:18 WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
2020-04-29 16:48:18 WARNING: ipset not usable, disabling ipset usage in firewall.
2020-04-29 16:48:20 WARNING: Failed to load nf_conntrack module: modprobe: ERROR: could not find module by name='nf_conntrack'
modprobe: ERROR: could not insert 'nf_conntrack': Function not implemented
modprobe: ERROR: Error running install command for nf_conntrack
modprobe: ERROR: could not insert 'nf_conntrack': Operation not permitted
2020-04-29 16:48:20 ERROR: Failed to read file "/proc/sys/net/netfilter/nf_conntrack_helper": [Errno 2] No such file or directory: '/proc/sys/net/netfilter/nf_conntrack_helper'
2020-04-29 16:48:20 WARNING: Failed to get and parse nf_conntrack_helper setting
2020-04-29 16:48:20 WARNING: ebtables not usable, disabling ethernet bridge firewall.
我尝试过的
- 为所有域重新运行 certbot
- 仅针对domain1重新运行certbot
- Yum 更新(再次)- 无需安装任何软件包
- 编辑主机文件以删除服务器。和服务器 - 某些系统进程将其恢复为原始状态,如上所述。
- 注释掉domain1虚拟主机配置的SSL条目,然后转至http://...。
- 注释掉 ssl.conf 中的证书行 - apache 不会启动,所以我把它们放回去。
- 转到 HTML 页面而不是 PHP - 相同的结果。
我开始考虑卸载并重新安装,但我希望也许我只是在这里遗漏了一些东西。我非常感谢帮助解决这个问题。
谢谢你!