【问题标题】:Apache wont restart after I enable SSL启用 SSL 后 Apache 不会重新启动
【发布时间】:2015-02-18 15:25:36
【问题描述】:

一旦我 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 文件中 disenmod 或注释掉以下模块行:

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

任何帮助将不胜感激

【问题讨论】:

    标签: ssl apache2


    【解决方案1】:

    您输出的以下几行表明其他程序已经在侦听端口 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 &lt;programme&gt; stop或使用kill &lt;processID&gt;(进程ID也由netstat提供)。之后,您可以使用service apache2 start或通过执行/etc/init.d/apache2 start。当您使用Ubuntu/Debian 时,这两个命令都有效。如果您使用CentOS/RedHat,Apache 被命名为httpd。

    【讨论】:

    • 我明白了:tcp 0 0 MYIP:443 0.0.0.0:* LISTEN 1553/openvpn-openss 但是当我尝试卸载 openvpn 时,它说没有安装 openvpn 包。
    • 好的,问题解决了。我发出命令“kill 1553”,然后我可以重新启动apache。谢谢
    • 不客气。我已经更新了我的答案,以便包含您的答案。
    • 如果它对某人有帮助,我的问题是我在 2 个地方有“Listen 443”。删除重复解决了它。
    【解决方案2】:

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

    我使用 Apache 2.4 运行 FreeBSD 10.3,因此我的文件可能位于您的其他位置。但是一旦你找到你的虚拟主机文件所在的位置,解决方案是一样的。这就是你需要做的来解决这个问题:

    1. 进入定义虚拟命名主机的目录:

      cd /usr/local/www/conf/extra

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

      grep -i log * &gt; x.tmp

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

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

      cat x.tmp | while read a b c d; do echo $c &gt;&gt; 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. 重启 web 服务器 (apachectl start) 并验证 httpd 守护进程使用ps awx | grep http 运行。

    【讨论】:

      【解决方案3】:

      直接基于this的答案,你应该杀死httpd(它的server.port = 80在它的lighttpd.conf中)然后尝试启动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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-14
        • 1970-01-01
        • 2015-11-20
        • 2021-12-24
        • 2013-11-11
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        相关资源
        最近更新 更多