ssl_module 在哪里加载以及为什么我无法绑定到端口 443?

ssl_module 在哪里加载以及为什么我无法绑定到端口 443?

当我尝试启动 httpd 时,出现以下错误:

# service httpd start || journalctl -xn
..
[so:warn] [pid 425] AH01574: module ssl_module is already loaded, skipping
httpd[425]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:443
httpd[425]: no listening sockets available, shutting

语法没问题:

# httpd -t
[so:warn] [pid 917] AH01574: module ssl_module is already loaded, skipping
Syntax OK

好的。所以ssl_module.so被加载了两次。但它不是:

# grep -ir ssl_module /etc/httpd/*
/etc/httpd/conf.d/ssl.conf:LoadModule ssl_module modules/mod_ssl.so

它还说有东西正在监听端口 443。但实际上并没有:

# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      336/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      336/sshd

我只在我的 httpd 配置中监听一次:

# grep -ir 443 /etc/httpd/*
/etc/httpd/conf.d/ssl.conf:Listen 443
/etc/httpd/conf.d/ssl.conf:<VirtualHost *:443>

apache 没有运行任何服务:

# top -u apache
..
(nothing)

这看起来好像 apache 正在加载其他某个conf,该conf正在加载 ssl_module.so 并侦听端口 443,因为出现警告和错误,表明套接字已在使用中。

但问题是..它在哪里?

这是来自运行 CentOS Linux 版本 7.2.1511 的 VPS 配置。

答案1

问题最终是 httpd.conf 中的重复行导致 ssl.conf 加载两次。

有一行:

Include conf.d/*.conf

然后再往下:

IncludeOptional conf.d/*.conf

第一个已被删除,问题已解决。

答案2

apache2 -X最简单的调试方法是在调试模式下或httpd -X根据您的构建从终端会话运行服务器。您可以使用该标志来增加详细程度-e。命令-S标志将转储配置。页面中记录了其他标志man

-M标志将列出已加载的模块。 SSL 通常作为模块提供,需要在启用 HTTPS 之前加载。

相关内容