nginx + php5-fpm 中的错误 502

Posted

技术标签:

【中文标题】nginx + php5-fpm 中的错误 502【英文标题】:Error 502 in nginx + php5-fpm 【发布时间】:2012-05-15 06:06:04 【问题描述】:

我对主题有一些错误。服务器负载不高:~15% CPU,有几 Gb 内存,硬盘不忙。但是大约 3% 的情况会引发错误 502。

程序:Debian 6、nginx/0.7.62、php5-fpm (5.3.3-1)。

在 nginx 的 error.log 中是这个错误:

connect() to unix:/var/run/php5-fpm.sock failed

php5-fpm 的状态通常是这样的:

accepted conn:   41680
pool:             www
process manager:  dynamic
idle processes:   258
active processes: 1
total processes:  259

我认为,这意味着加载不高。

我增加了 backlog 参数:在 sysctl - net.core.somaxconn = 5000,在 php-fpm pool - listen.backlog = 5000。没有效果。

我引用一个配置:

/etc/nginx/nginx.conf

user www-data;
worker_processes  8;
timer_resolution 100ms;
worker_rlimit_nofile 20240;
worker_priority -5;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events 
    worker_connections  2048;
    use epoll;
    # multi_accept on;


http 
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_min_length 1100;
    gzip_buffers 64 8k;
    gzip_comp_level 3;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_types text/plain application/xml application/x-javascript text/css;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    client_max_body_size 100M;
    server_tokens off;

/etc/nginx/php_location

fastcgi_pass   unix:/var/run/php5-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
fastcgi_buffers 256 128k;
#fastcgi_buffer_size 16k;
#fastcgi_busy_buffers_size 256k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;

php-fpm 池

[www]
listen = /var/run/php5-fpm.sock
listen.backlog = 5000
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
user = www-data
group = www-data
pm = dynamic
pm.max_children = 1024
pm.start_servers = 64
pm.min_spare_servers = 64
pm.max_spare_servers = 128
pm.max_requests = 32000
pm.status_path = /system/php5-fpm-status
slowlog = /var/www/log/php-fpm.log.slow
chdir = /var/www

我可以做些什么来优化这个系统并让它使用所有的服务器资源?

PS。对不起,我的英语不好。

【问题讨论】:

我在 Ubuntu 13.10 上,php5-fpm 的日志记录在某种程度上歪曲了发生的事情......实际上,日志什么也没说 :) 我通过直接从命令行运行守护程序发现了错误, sudo php5-fpm --daemonize --fpm-config /etc/php5/fpm/php-fpm.conf 以防万一有人在 Ubuntu 12.04.3 LTS 上的 /etc/php5/fpm/pool.d/www.conf 中搜索 php-fpm 池文件 对于那些通过谷歌搜索来到这个问题的人:首先尝试这个解决方案:***.com/questions/23443398/… 【参考方案1】:

问题在于套接字本身,它在高负载情况下的问题是众所周知的。请考虑使用 TCP\IP 连接而不是 unix 套接字,因为您需要进行以下更改:

php-fpm 池配置listen = /var/run/php5-fpm.sock 替换为 listen = 127.0.0.1:7777/etc/nginx/php_location 中将 fastcgi_pass unix:/var/run/php5-fpm.sock; 替换为 fastcgi_pass 127.0.0.1:7777;

【讨论】:

现在好多了。另外我想说的是,将PHP更新到5.4版本效果非常好。 我认为这里有一个错误。 = 符号丢失。它应该是listen = 127.0.0.1:7777,而不是listen 127.0.0.1:7777 AFAIK。 找到了 - 现在在 /etc/nginx/sites-available/* 我的同事们证明我对为什么这样做的解释是错误的,但它似乎仍然对许多人有用。多年后,我仍在寻找问题的根本原因,但找不到。 在 ubuntu 上 php-fpm 池配置的位置是 /etc/php5/fpm/pool.d/www.conf 也不要忘记在你做之后重新启动 nginx 和 php5-fpm 服务这些变化。【参考方案2】:

没有创建这个文件的唯一原因是 /etc/php-fpm.d/www.conf 中的配置

更改监听 = 127.0.0.1:9000

用听 = /var/run/php-fpm/php-fpm.sock

然后重启nginx和php-fpm

【讨论】:

我有那行,都重新启动了,但文件仍然不存在。 php5-fpm.log 中没有错误【参考方案3】:

在 Centos 7、Plesk 12.5 上

在我的硬盘已满且某些服务失败后,我遇到了这个问题。 其他域工作得很好,但没有一个域它只给了我 502 和类似的超时。来自错误日志:

[crit] 3112#0: *65746768 connect() to 
unix:///var/www/vhosts/system/sub.domain.de/php-fpm.sock failed 
(2: No such file or directory) while connecting to upstream

为了解决这个问题,我必须(首先腾出空间然后)重新启动 php-fpm 和 nginx - 然后这个错误就消失了!

【讨论】:

【参考方案4】:

我同样的问题,但不希望从套接字切换到 TCP/IP。重启php-fpm和nginx即可解决问题。

sudo /etc/init.d/php-fpm restart
sudo /etc/init.d/nginx restart

【讨论】:

遇到问题时重新启动应用程序永远不能被视为解决方案。 取决于问题的频率和可分配的资源量——是的,它可以是一个解决方案。当然,系统应该设计得更好的基本观点仍然存在 @GeekRide 如果情况需要使用套接字连接,那么正如 DmitryV 所说“它在高负载情况下的问题是众所周知的”,我们别无选择,只能战略性地重新启动服务。我觉得很遗憾有这么多人忽视了这一点,因为他们在生产成本较低的环境中工作。 +1 建议,在我的情况下调查有问题的服务状态sudo service php5-fpm status 我注意到它以某种方式没有运行;因此,只需启动(或重新启动它)sudo service php5-fpm start 即可解决问题。 我想把它留在这里作为历史参考——也就是说,它是另一种策略,尽管不如公认的答案。承认这个答案的残余目的,我想请人们停止投票。我会删除它,除非其他人可能认为这也是已接受答案的可行替代方案。

以上是关于nginx + php5-fpm 中的错误 502的主要内容,如果未能解决你的问题,请参考以下文章

又一个 FastCGI Primary Script Unknown 错误(nginx、php5-fpm)

Nginx + php5-fpm 不显示 php 错误但 cli 显示错误

php5-fpm + nginx + google bot = 对等方重置连接

PHP 文件上传到 NGINX & PHP5-FPM

在 ubuntu 上使用 nginx 和 php5-fpm 进行配置帮助

nginx 502 网关错误