我在 AMAZON EC2 上有一台服务器,通过端口 9000 运行 Nginx +PHP 和 PHP FASTCGI。
服务器在几分钟内运行良好,一段时间后(在这种情况下有数千次点击)FastCGI 死机,Nginx 返回 502 错误。
Nginx 日志显示
2010/01/12 16:49:24 [error] 1093#0: *9965 connect() failed (111: Connection refused) while connecting to upstream, client: 79.180.27.241, server: localhost, request: "GET /data.php?data=7781 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site1.mysite.com", referrer: "http://www.othersite.com/subc.asp?t=10"
如何调试导致 FastCGI 死机的原因?
我意识到 OP 现在可能已经继续前进,但是如果有人遇到同样的问题,我希望这会有所帮助。
在默认设置中,NGINX 以“nobody”用户身份运行,而 spawn-fcgi 以“root”用户身份生成 php-cgi 子级。因此,NGINX 无法使用其当前权限连接到 fastcgi://127.0.0.1:9000。您所要做的就是稍微更改 spawn-fcgi 命令来解决这个问题。
或者您可以使用 UNIX 套接字(我更喜欢这种方法)
并将 nginx.conf 中的 fastcgi_pass 更改为:
您可以首先检查 PHP 在标准错误死时打印的内容。如果这不能说明问题,那么将 strace 连接到 PHP 进程并观察它们执行它们的操作,然后查看它执行的最后操作可能会很有启发性。在daemontools等称职的进程监控框架下运行 FCGI 进程也是一个好主意——这就是我在 nginx 下运行所有 PHP 进程的方式。