Nginx& PHP-FPM 502错误的网关错误

时间:2016-07-24 10:37:15

标签: php mongodb nginx

首先让我解释一下这种情况,我有一台64 GB RAM的服务器。 20核心40GB(SSD)。我有大约2000个并发用户

1周前,我使用apache和php 7但是cpu有80%有时高达101%,这是因为在从apache转移到Nginx,MySql到MongoDB之后,巨大的sql插入了。 cpu约为8%。

我现在的问题是Nginx多次返回502错误的网关响应,我找了一些答案,但没有任何帮助我,但当我将fpm socket更改为端口listen = /var/run/php5-fpm.socklisten = 127.0.0.1:9000 ngnix总是返回502,我无法弄清楚是什么问题。

2 个答案:

答案 0 :(得分:0)

您的服务器功能强大,足以每天处理> 500 000 申请(如果明白的话)。

问题是因为PHP-FPM不能让更多子进程处理更多请求。

在apache中,它会自动从额外的apache进程开始。

但是Nginx + PHP-FPM为您提供了如何处理这种情况的自由。

只需更改您的fpm池conf:/etc/php/php-fpm.d/www.conf(或您使用的任何内容)

确保它包含以下内容:

pm = static
pm.max_children = 4096
pm.process_idle_timeout = 10s
pm.max_requests = 32

然后重启php fpm

还要修改nginx.conf并确保其中包含此字段:

user http;
worker_processes  auto; 

events {
    worker_connections  4096;
    multi_accept on;
    use epoll; 
}



附:不要将listen属性更改为ip:port - 套接字更快,因为ip:port它通过ip和端口创建网络连接,但是在套接字版本中它只是打开.sock" file&# 34 ;.

附:不要更改fastcgi_buffers和etc指令,它不会修复错误的网关问题,因为php-fpm进程较少。

在我的服务器中默认为:

fastcgi_buffers 32 1024k;
fastcgi_buffer_size 1024k;


附:禁用不必要的日志记录(nginx.conf)以免使您的磁盘驱动器具有更多IO负载:

access_log off;
error_log /var/log/nginx/error.log crit;

如果您需要监控使用newrelic并监控您的服务器的网络,cpu,mem活动

答案 1 :(得分:-1)

此更改将起作用:Nginx配置文件/etc/nginx/nginx.conf:在nginx.conf文件的http部分下面添加

  

HTTP

     

{

     

fastcgi_buffers 8 16k;

     

fastcgi_buffer_size 32k;

     

}