让 PHP-FPM 监听“IPAddress:Port”而不是“/var/run/php5-fpm.sock;”

its*_*_me 4 php nginx fastcgi php-fpm debian-wheezy

当我今天对我的网站进行负载测试时(使用blitz.io);尽管有大量 RAM(超过 50%)和 CPU 能力(超过 70%)可用,但结果显示我的网站在每秒达到一定数量的并发用户时开始超时。

我的网站的 Nginx 错误日志 (/var/log/nginx/example.com.error.log) 显示如下内容:

2013/02/12 19:03:57 [错误] 13749#0: *3175 connect() 到 unix:/var/run/php5-fpm.sock 在连接到上游时失败(11:资源暂时不可用),客户端: 54.123.456.46,服务器:example.com,请求:“GET / HTTP/1.1”,上游:“fastcgi://unix:/var/run/php5-fpm.sock:”,主机:“example.com”

谷歌搜索错误让我找到了这个答案,它指出使用 TCP\IP 连接而不是 unix 套接字作为问题的解决方案;因为unix套接字的“高负载情况下的问题是众所周知的”

因此,正如答案所建议的:

  • 我在 /etc/php5/fpm/pool.d/www.conf 中替换listen = /var/run/php5-fpm.socklisten 127.0.0.1:9000

  • 由于我的发行版(Debian Wheezy)上没有/etc/nginx/php_location,所以我没有采取任何措施。

  • fastcgi_pass unix:/var/run/php5-fpm.sock;由于我在站点的 Nginx 配置文件中使用,即 /etc/nginx/sites-available/example.com,因此我将其替换为fastcgi_pass 127.0.0.1:9000;

现在的问题是,当我502 Bad Gateway访问我的网站时出现错误。是的,我做了reloadNginx 和 PHP-FPM。我究竟做错了什么?(这里完全是新手,尽我最大努力边做边学。)

如果这是相关的,当我这样做时sudo service php5-fpm restart,我会收到此错误:

[FAIL] Restarting PHP5 FastCGI Process Manager: php5-fpm failed!
Run Code Online (Sandbox Code Playgroud)

这只是在我做出上述更改后才发生的。我怎样才能解决这个问题?

如果我需要了解更多信息,请告诉我。


更新

该文件/etc/nginx/sites-available/default是这样说的:

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;

#   # With php5-fpm:
#   fastcgi_pass unix:/var/run/php5-fpm.sock;
Run Code Online (Sandbox Code Playgroud)

那么,这是否意味着,如果我的服务器正在运行 PHP-FPM,它应该在没有选择的情况下使用/var/run/php5-fpm.sock

its*_*_me 6

我使用$ sudo php5-fpm -t命令来测试 PHP-FPM 的设置是否正常(如果没有,它会显示一些错误/信息)。

所以,输出如下:

[13-Feb-2013 18:35:00] ERROR: [/etc/php5/fpm/pool.d/www.conf:33] value is NULL for a ZEND_INI_PARSER_ENTRY
[13-Feb-2013 18:35:00] ERROR: Unable to include /etc/php5/fpm/pool.d/www.conf from /etc/php5/fpm/php-fpm.conf at line 33
[13-Feb-2013 18:35:00] ERROR: failed to load configuration file '/etc/php5/fpm/php-fpm.conf'
[13-Feb-2013 18:35:00] ERROR: FPM initialization failed
Run Code Online (Sandbox Code Playgroud)

该错误表明, of 的第 33 行出了点问题/etc/php5/fpm/pool.d/www.conf,恰好是这样的:(listen 127.0.0.1:9000这并不是巧合,不是吗?)。

我看到之后,立刻和其他的几行对比一下,突然发现,=少了一个(等号)!

所以,这就是它应该的样子:listen = 127.0.0.1:9000这解决了一切!