启用 SSL 后 Apache 不会重新启动

Apache wont restart after I enable SSL

一旦我 a2enmod ssl 模块并重新启动 apache,我就会收到以下错误:

Restarting web server apache2
AH00548: NameVirtualHost has no effect and will be removed in the next 
release     /etc/apache2/ports.conf:14
(98)Address already in use: AH00072: make_sock: could not bind to address
[::]:443
(98)Address already in use: AH00072: make_sock: could not bind to address
0.0.0.0:443
no listening sockets available, shutting down
AH00015: Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

要停止它,我可以取消修改或注释掉 ports.conf 文件中的以下模块行:

Listen 80
#<IfModule mod_ssl.c>
#    Listen 443
#</IfModule>
<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

如有任何帮助,我们将不胜感激

您输出的以下几行表明另一个程序已经在侦听端口 443,并且由于 Apache 不支持端口共享,它无法绑定到该端口,因此它关闭了。

(98)Address already in use: AH00072: make_sock: could not bind to address
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:443

因此我建议您关闭监听该端口的程序。您可以使用以下命令确定哪些程序正在侦听 TCP 端口 443(必须以超级用户身份执行):

netstat -tlpn | grep 443

然后关闭已经监听的程序(例如使用service <programme> stop或使用kill <processID>(进程ID也由netstat提供)。之后,您可以启动使用 service apache2 start 或执行 /etc/init.d/apache2 start 的 Apache。当您使用 Ubuntu/Debian 时,这两个命令都有效。如果您使用 CentOS/RedHat,则 Apache 被命名为 httpd

错误“AH00015:无法打开日志”表示您的某个日志定义中缺少文件或目录。如果您的 Web 服务器上有很多虚拟命名站点 运行ning,很容易删除旧目录而忘记更新 httpd-vhosts.confhttpd-ssl.conf 文件以删除配置

我 运行 FreeBSD 10.3 和 Apache 2.4,所以我的文件可能在您的另一个位置。但是一旦找到虚拟主机文件所在的位置,解决方案就相同了。这是你需要做的来解决这个问题:

  1. 切换到定义虚拟命名主机的目录:

    cd /usr/local/www/conf/extra

  2. 使用 grep 从您的命名中提取所有日志文件引用 虚拟主机定义:

    grep -i log * > x.tmp

这将创建一个文件,其中包含显示文件名、apache 日志指令(ErrorLog、CustomeLog、TransferLog)和日志文件名的条目。

  1. 使用 bash shell 设置 while 读取循环以将文件分开 并在另一个文件中捕获日志文件的名称:

    cat x.tmp | while read a b c d; do echo $c >> y.tmp; done

  2. 使用您喜欢的编辑器编辑 y.tmp 文件以删除任何内容 看起来不像日志文件的名称(垃圾)。这个垃圾是 使用 grep 在大文件中搜索文本是不可避免的。一次 你有一个文件列表(没有别的),插入 "ls -la " 在 文件名前面。使用 vi 编辑器,您可以使用 以下命令:

    :%s/^/ls -la /

  3. 运行 将文件作为脚本使用 sh 或 bash 如下:

    sh y.tmp

    单个文件存在则显示,不存在则显示 存在它会显示类似下面的错误:

    ls: /usr/local/www/virtual/nsr/logs/access.log: No such file or directory

  4. 这可能是由于拼写错误、缺少目录或某些 其他原因(指向不存在对象的符号链接)。任何一个 编辑您的虚拟命名主机定义以将其从 配置,或定义具有正确权限的目录 供网络服务器访问它。

  5. 重新启动网络服务器 (apachectl start) 并验证 httpd 守护进程 运行ning 使用 ps awx | grep http.

直接根据 this 的回答,你应该杀死 httpd(它的 lighttpd.conf 中有 server.port = 80),然后尝试启动 apache

= Show processes hung =
ps wax | grep httpd

= Kill Process ID 1234 =
kill 1234

= Start Apache24 =
apachectl start

= Verify it is running =
service apache24 status