nginx - 我们的 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 配置有问题还是我们的节点应用程序以某种方式导致了问题?
解决方案
根据日志,似乎某些东西已经在使用端口 80 和 443。它可以是任何东西。同样在极少数情况下,它可能是 nginx 本身。然后我会建议重新启动服务器。
我将通过以下方式开始指出实际使用这些端口的内容:
# netstat -tulpn | grep :80
# netstat -tulpn | grep :443
然后会检查nginx
错误日志以了解更多信息
tail -n 500 /var/log/nginx/error.log
然后,如果您找到使用这些端口的其他应用程序,您可以检查它们是什么:
# whatis <appName>
# whereis <appName>
如果它是由不同的应用程序引起的,那么您可以将其关闭或重新绑定到另一个端口。
希望能帮助到你 :)
推荐阅读
- business-objects - 在全局变量中传递多个值并在 BODS 作业的运行时打印它
- c# - ASP.NET MVC Post 模型项为空
- ffmpeg - 当我尝试将 jpg 更改为 mp4 时,std::system 停止
- ios - 是否可以更改 TableView 和 SearchBar Delegates 的处理顺序?
- facebook - 是否可以从 Facebook Pixel 隐藏引用页面 URL?
- java - 我应该如何从我的数据库中获取所有消息并返回它
- javascript - fs 不下载图像
- php - 获取 Array 数据(序列化数据?)并显示,这段代码运行良好,但是为什么,它是否正确?
- c - 关于涉及 scanf() 的简单 C 程序的错误
- azure - 无法删除已禁用的订阅