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

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

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

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

2013/02/12 19:03:57 [错误] 13749#0: *3175 connect() to 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!

自从我做了上述更改后,这种情况才发生。我该如何解决这个问题?

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


更新

该文件/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;

那么,这是否意味着,如果我的服务器运行的是 PHP-FPM,应该,别无选择,使用/var/run/php5-fpm.sock

答案1

我使用$ 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

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

看到之后,我立即将其与其他行进行了比较,然后我突然意识到,=少了一个(等号)!

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

答案2

听起来(基于 502 和错误消息)php-fpm 服务无法启动。

是否有其他东西在使用端口 9000?要检查,请运行:

sudo lsof -P | grep TCP | grep LISTEN

并查找类似 的内容TCP localhost:9000 (LISTEN)。如果有,您可以使用其他端口,例如 9001。

php-fpm 错误日志是检查的好地方。默认情况下,它可能未启用。如果您查看 php-fpm conf 文件(我的系统上为 /etc/php5/fpm/php-fpm.conf),您将找到“error_log”设置。这是错误日志的路径。如果注释掉了,请取消注释,重新启动 php-fpm 服务并检查日志文件的内容。

答案3

您可以根据自己的选择使用 IP/端口或 Unix 套接字。

这取决于您的 php-fpm 配置,该文件是www.conf,在我的系统(Ubuntu 16.04)中,该文件位于/etc/php/7.0/fpm/pool.d

在此文件中,您可以找到一个名为的指令listen,例如,如果您将此指令设置为/run/php/php7.0-fpm.sock,那么您的 nginx 站点配置fastcgi_pass应该是unix:/run/php/php7.0-fpm.sock

但如果你设定听的话127.0.0.1:9000应该fastcfg_pass127.0.0.1:9000

答案4

我遇到了同样的问题,将 IP 从 127.0.0.1 更改为 0.0.0.0 后问题就解决了!结果应该如下所示:

监听 = 0.0.0.0:9000

相关内容