在 Ubuntu 上使用相当典型/标准的 Apache 安装,并启用 mod_ssl,每隔“一段时间”(随机时间段),服务器上的网站就会停止响应。
当我查看原因时,我注意到/etc/apache2/mods-enabled/ssl.conf
和ssl.load
缺失了。使用这两个命令,我可以立即恢复网站:
a2enmod ssl
service apache2 restart
真是气死人了!肯定是哪里有冲突,但我就是搞不清楚到底在哪里。
Ubuntu 14.04 LTS Apache 2.4.7
虚拟主机配置文件(/etc/apache2/sites-enabled/my-domain.org.conf)
<IfModule mod_ssl.c>
<VirtualHost xxx.xxx.xxx.xxx:443>
ServerName my-domain.org
ServerAlias www.my-domain.org
ServerAdmin [email protected]
DocumentRoot /var/www/my-domain.org
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/my-domain.org/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/my-domain.org/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/my-domain.org/chain.pem
CustomLog /var/log/apache2/my-domain.org/ssl_access_log vhost_combined
ErrorLog /var/log/apache2/my-domain.org/ssl_error_log
<Directory /var/www/my-domain.org>
Options -ExecCGI -Indexes -Includes +FollowSymLinks
AllowOverride FileInfo AuthConfig
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R=301,L]
php_admin_flag engine on
php_admin_flag display_startup_errors on
php_admin_flag display_errors on
php_admin_flag html_errors on
php_admin_flag log_errors on
php_admin_flag ignore_repeated_errors off
php_admin_flag ignore_repeated_source off
php_admin_flag report_memleaks on
php_admin_flag track_errors on
php_value memory_limit 32M
</Directory>
</VirtualHost>
</IfModule>
日志输出自/var/log/apache2/my-domain.org/ssl_error_log
:
[13:35:29.822335] [mpm_prefork:notice] [pid 2043] AH00169: caught SIGTERM, shutting down
[13:35:30.867258] [auth_digest:notice] [pid 2725] AH01757: generating secret for digest authentication ...
[13:35:30.896369] [mpm_prefork:notice] [pid 2725] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.21 OpenSSL/1.0.1f configured -- resuming normal operations
[13:35:30.896406] [core:notice] [pid 2725] AH00094: Command line: '/usr/sbin/apache2'
那里看上去没什么问题。
答案1
Let's Encrypt 会自行安装证书过期自动检查功能,并尝试自行续订。如果能成功,这将是最理想的选择。但是,只有当脚本没有遇到它认为是 Apache 的问题/冲突时,它才会正常工作。
最初,我尝试使用 Let's Encrypt 的自动安装流程:certbot --apache
它从来没有正常工作过,所以我决定使用certbot certonly
。无论过程如何,它仍然试图自动更新证书并失败。现在,我不确定整个过程究竟是如何工作的,但这里有解决办法:
找到域的配置文件,/etc/letsencrypt/renewal/my-domain.org.conf
并将所有内容注释掉。我认为,如果自动化流程能够顺利运行,--apache
它就会发挥作用。目前,我并不一定需要它进行自我更新,因为它可以手动完成。
我希望这对某些人有帮助。它确实对我有帮助。
答案2
请提供您重新启动之前的日志行。
您的 SSL 访问日志可能位于不同的文件夹中。此外,如果您的 SSL.conf 文件位于子文件夹下,请在发生故障时检查其权限。
这些是您可以检查的一些基本事项。有时 mod_ssl lib 无法正常运行,请查看版本是否有任何缺陷等问题。
这也可能是交通拥堵造成的。我现在只能想到这些。