Nginx 如何修复 Reponse Status 0 Worker Process Exited on Signal 11
作者:迹忆客
最近更新:2022/05/14
浏览次数:
实际上,让我们首先澄清一下:HTTP 没有状态码 0(零)。 问题是 nginx 工作进程在处理请求时死亡,因此连接中断,导致没有任何响应数据的错误。
问题
我们在各种情况下都遇到了这个问题:
- Github Webhooks :webhook 请求未成功完成,响应码始终为 0
- Piwik :我们无法在 Safari 浏览器中打开 Piwik 网络控制面板,也无法在 Android 上添加连接详细信息。 两种情况下的请求都会导致状态为 0 的错误响应(Reponse Status 0)
由于我们在 Strider 和 Piwik 日志中找不到任何应用程序错误,因此问题应该是出在下面的层:nginx。
我们检查了 nginx 的错误日志文件,终于找到了线索。
这是 Ubuntu 上默认的 nginx 错误日志文件位置:/var/log/nginx/error.log
错误日志文件数据:
2022/05/10 09:37:34 [alert] 7955#0: worker process 9835 exited on signal 11 (core dumped)
2022/05/10 09:37:36 [alert] 7955#0: worker process 9853 exited on signal 11 (core dumped)
2022/05/10 09:37:36 [alert] 7955#0: worker process 9855 exited on signal 11 (core dumped)
2022/05/106 09:42:34 [alert] 7955#0: worker process 9857 exited on signal 11 (core dumped)
如果大家有兴趣,我们使用 nginx 版本 1.8.0。
解决方法
要解决此问题,需要修改 nginx 的配置,在 http 块中添加以下行。
Ubuntu上 nginx 的配置文件默认位置是 /etc/nginx/nginx.conf
http {
…
ssl_session_cache shared:SSL:10m;
…
}
Nginx 使用多个工作进程来处理接收到的请求。 ssl_session_cache shared:SSL:10m
使 nginx 在所有工作进程之间共享会话信息。 从现在开始,每个工作进程都有可用的会话信息,并且不会因为缺少请求数据而停止执行请求。
不要忘记重启 nginx 服务。
$ sudo service nginx restart
就是这样。 我们的请求将通过 nginx 流向应用程序,反之亦然,不会出现问题!