首页 > 解决方案 > 我们的 nginx 服务器正在自行停止

问题描述

我们有一个使用 pm2 进程管理器在端口 3000 上运行的快速应用程序。我们正在使用 nginx 将请求反向代理到节点应用程序。但是突然 nginx 停止自行运行。它发生在几天前,我们进行了重新启动,然后它就起作用了。但是今天又失败了。那时我们检查nginx status它给出了这个输出,

nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2018-09-22 12:38:52 UTC; 1h 43min ago
   Process: 21571 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCES
   Process: 21680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
   Process: 21676 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 8027 (code=exited, status=0/SUCCESS)

Sep 22 12:38:51 ip-172-31-27-16 nginx[21680]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Sep 22 12:38:51 ip-172-31-27-16 nginx[21680]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
Sep 22 12:38:52 ip-172-31-27-16 nginx[21680]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
Sep 22 12:38:52 ip-172-31-27-16 nginx[21680]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Sep 22 12:38:52 ip-172-31-27-16 nginx[21680]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
Sep 22 12:38:52 ip-172-31-27-16 nginx[21680]: nginx: [emerg] still could not bind()
Sep 22 12:38:52 ip-172-31-27-16 systemd[1]: nginx.service: Control process exited, code=exited status=1
Sep 22 12:38:52 ip-172-31-27-16 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Sep 22 12:38:52 ip-172-31-27-16 systemd[1]: nginx.service: Unit entered failed state.
Sep 22 12:38:52 ip-172-31-27-16 systemd[1]: nginx.service: Failed with result 'exit-code'.

这是 nginxerror.log

2018/09/22 12:38:41 [warn] 21539#21539: conflicting server name "example.com" on 0.0.0.0:80, ignored
2018/09/22 12:38:48 [warn] 21641#21641: conflicting server name "example.com" on 0.0.0.0:80, ignored
2018/09/22 12:38:48 [notice] 21641#21641: signal process started
2018/09/22 12:38:48 [error] 21641#21641: open() "/run/nginx.pid" failed (2: No such file or directory)
2018/09/22 12:38:48 [warn] 21642#21642: conflicting server name "example.com" on 0.0.0.0:80, ignored
2018/09/22 12:38:50 [warn] 21676#21676: conflicting server name "example.com" on 0.0.0.0:80, ignored
2018/09/22 12:38:50 [warn] 21680#21680: conflicting server name "example.com" on 0.0.0.0:80, ignored
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to [::]:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to [::]:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to [::]:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to [::]:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: bind() to [::]:80 failed (98: Address already in use)
2018/09/22 12:38:50 [emerg] 21680#21680: still could not bind()
2018/09/22 12:38:52 [alert] 21643#21643: unlink() "/run/nginx.pid" failed (2: No such file or directory)

知道为什么会这样吗?是我们的 nginx 配置有问题还是我们的节点应用程序以某种方式导致了问题?

标签: nginx

解决方案


根据日志,似乎某些东西已经在使用端口 80 和 443。它可以是任何东西。同样在极少数情况下,它可能是 nginx 本身。然后我会建议重新启动服务器。

我将通过以下方式开始指出实际使用这些端口的内容:

# netstat -tulpn | grep :80
# netstat -tulpn | grep :443

然后会检查nginx错误日志以了解更多信息

tail -n 500 /var/log/nginx/error.log

然后,如果您找到使用这些端口的其他应用程序,您可以检查它们是什么:

# whatis <appName>
# whereis <appName>

如果它是由不同的应用程序引起的,那么您可以将其关闭或重新绑定到另一个端口。

希望能帮助到你 :)


推荐阅读