在 AWS ec2 实例上运行,有一点背景,我是一名前端人员,试图解决生产 Web 服务器的问题,但已经用尽了故障排除/Linux cli 知识,并且超出了我的舒适区。
我修改了文件httpd.conf
以添加新域名,并按照说明使用,sudo service httpd restart
以便我所做的更改生效。这导致了错误,现在 httpd 服务已停止,这意味着我们的任何网站都无法提供服务。
我尝试了以下方法来重新启动 httpd 服务:
apachectl configtest
返回Syntax OK
sudo service httpd start
返回以下错误:
Redirecting to /bin/systemctl start httpd.service
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
-> 运行systemctl status httpd.service
后会给出以下信息:
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2021-01-18 16:00:20 UTC; 1min 20s ago
Docs: man:httpd.service(8)
Process: 5943 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 5943 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: Starting The Apache HTTP Server...
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal httpd[5943]: [Mon Jan 18 16:00:20.317159 2021] [so:warn] [pid 5943] AH01574: module headers_module is already loaded, skipping
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: Failed to start The Apache HTTP Server.
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: Unit httpd.service entered failed state.
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: httpd.service failed.
[ec2-user@ip-172-31-38-82 ~]$
- 运行
sudo apachectl -k start
出现以下警告但没有错误:
[so:warn] [pid 5967] AH01574: module headers_module is already loaded, skipping
- 我看到的另一个主题说,端口 80 上可能已在运行其他程序,并使用它
sudo netstat -lpAinet
来查看还有什么正在运行,结果返回:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 3246/sshd
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 3208/master
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN 2750/rpcbind
udp 0 0 0.0.0.0:bootpc 0.0.0.0:* 2971/dhclient
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:* 2750/rpcbind
udp 0 0 localhost:323 0.0.0.0:* 2772/chronyd
udp 0 0 0.0.0.0:799 0.0.0.0:* 2750/rpcbind
这里没有提到端口 80 或者程序名称 apache。
- 我尝试使用另一个命令来启动 httpd 服务,但返回了错误,提示无法将服务绑定到端口 80(我现在找不到实际命令是什么)。帖子提到,需要使用 root 权限启动 httpd 服务才能分配低于 1024 的端口号。我尝试使用以下命令检查我的权限,结果
sudo -l
返回了以下内容:
User ec2-user may run the following commands on ip-172-31-38-82:
(ALL) ALL
(ALL) NOPASSWD: ALL
看来我有正确的权限来运行它。
这时,我已经达到了可以自行解决问题的极限。
答案1
正如 Andrew Schulman 在我的问题评论中所建议的那样,问题不在于配置,而在于其中一个域使用的 SSL 证书。certificate.crt
和private.key
文件不匹配,这无疑是我的错,因为我之前尝试过将它们替换掉。
在搜索了由 HermanB 帮我找到的错误消息后AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) AH00016: Configuration Failed
,我意识到一定是我尝试更新证书导致了这个问题,果然更新证书的两个部分都解决了这个问题。