即使端口 80 未被使用,也无法启动 apache httpd

即使端口 80 未被使用,也无法启动 apache httpd

在 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.crtprivate.key文件不匹配,这无疑是我的错,因为我之前尝试过将它们替换掉。

在搜索了由 HermanB 帮我找到的错误消息后AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) AH00016: Configuration Failed,我意识到一定是我尝试更新证书导致了这个问题,果然更新证书的两个部分都解决了这个问题。

相关内容