为什么“httpd2 -S”无法捕获 SSL 证书问题,而“systemctl restart apache2.service”可以?

为什么“httpd2 -S”无法捕获 SSL 证书问题,而“systemctl restart apache2.service”可以?

我想知道为什么rcapache2(重定向到systemctl restart apache2.service)出现此错误并失败,但httpd2 -S根本没有抱怨:

Jun 28 14:37:50 revue start_apache2[4037]: SSLCertificateFile: file '/etc/apache2/ssl.crt/pluimers.com.crt' does not exist or is empty

我知道证书应该在那里(一会儿就会有),但我总是假定httpd2 -S会执行相同的检查systemctl restart apache2.service

显然不是。

SSL 已启用:

# grep APACHE_SERVER_FLAGS /etc/sysconfig/apache2
#   5. To finally enable ssl support, you need to add 'SSL' to APACHE_SERVER_FLAGS 
APACHE_SERVER_FLAGS="SSL"

我的配置基于apache2-vhost-ssl.模板。模板有以下情况。我认为原因是该条件满意apache2.service,但是不是经过httpd2

<IfDefine SSL>
<IfDefine !NOSSL>

这确实是原因吗?如果是,为什么?如果不是,原因是什么?
我该如何使用 来解决这个问题httpd2 -S

答案1

运行service将调用 apache2 的完整初始化脚本,该脚本将存储在 中/etc/init.d/apache2。该脚本有很多检查,包括检查它是否已在运行,这些检查不太可能包含在 apachehttpd本身中。您应该养成使用命令来停止和启动事物的习惯service。这适用于大多数现代 Linux。

如果您只想检查配置而不启动或停止任何操作,那么您可以apache2ctl configtest这样做,如果一切顺利,将会报告:

Syntax OK

答案2

解决方法(因为apache2ctl configtest在我的系统上不起作用):

httpd2 -D SSL -S

它将定义 中的 SSLAPACHE_SERVER_FLAGS开关/etc/sysconfig/apache2

有一天,我会编写一个脚本,将APACHE_SERVER_FLAGS值分解为多个-D参数。

请注意:现在 prefork 使用这些参数启动-f /etc/apache2/httpd.conf -D SSL -D SYSTEMD -D FOREGROUND

相关内容