当我打开网站时,收到 502 bad gateway 错误。查看 中的错误日志文件后/var/log/nginx/error.log
,它提到“从上游读取响应标头时上游过早关闭连接”。
nginx.conf
文件内容:
#user nginx;
worker_processes 1;
#error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
#pid /var/run/nginx.pid;
events {
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
client_header_timeout 600;
client_body_timeout 600;
send_timeout 6000;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
keepalive_timeout 36500;
proxy_read_timeout 1250000;
proxy_connect_timeout 1250000;
fastcgi_read_timeout 1250000;
#tcp_nodelay on;
#gzip on;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";
server_tokens off;
include /etc/nginx/conf.d/*.conf;
如何解决这个问题?
答案1
我遇到了同样的问题,但由于我们网站上的观众数量增加,起初我做了我可以在这里找到的所有建议“如何解决网关超时问题?“和其他网站以及这里的SO,仍然有相同的502网关错误问题。所以我发现我正在工作的服务器在同一台服务器上有一个网站和一个apiend,所以我将apiend转移到另一个服务器上服务器运行得很好,直到我们收到越来越多的请求,因为我们的客户端有越来越多的事件,并且 502 网关超时问题又回来了,当网站处于 502 状态时,apiend 仍在响应。
所以我尝试检查所有服务器日志,直到我检查 php-fpm.log 并看到以下错误:
[26-Mar-2015 10:10:04] WARNING: [pool www] server reached pm.max_children setting (35), consider raising it
[26-Mar-2015 12:04:52] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
正如我的 php-fpm.log 中所说,我需要增加 max_children 设置,我/etc/php5/fpm/pool.d/www.conf
当前的设置是:
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 4
pm.max_spare_servers = 8
使用此命令:ps -ylC php5-fpm --sort:rss
我检查 php-fpm 每个进程的平均内存使用量(以千字节为单位),然后计算 pm.max_children。
计算 pm.max_children
举个例子:如果我们的云服务器有 4 GB RAM 并且正在运行 MySQL 数据库服务,该服务至少消耗 1 GB,我们的最佳目标是获得 4 - 1 - 0,5(marge)GB = 2,5 GB RAM 或2560 MB。
pm.max_children 使我们达到 2560 Mb / 60 Mb = 42 max_children
在我这样做之后,已经有 8 个月了,我没有遇到 502 网关错误,并且我们还检查了我们的代码,发现其他开发人员的关键过程代码消耗了大量资源,所以我们仍然对后端代码也是如此。
即使这个帖子很旧,我只是想分享我如何解决这个问题。:D
这是我的参考。 确定 NGinx 上 PHP-FPM 的正确子进程数