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 = 对等方重置连接