2016-07-24 98 views
1

让我先解释一下情况,我有一个64 GB RAM的服务器& 20核心与40GB(SSD)。我有大约2000个并发用户Nginx和PHP-FPM 502错误的网关错误

1个星期前,我使用Apache的PHP 7,但CPU是80%有时高达101%,这是因为巨大的SQL插入后,从Apache转换为Nginx,MySql MongoDB 。 CPU是大约8%。

我现在的问题是Nginx的很多次返回502错误网关的响应,我找了一些答案,但没有帮助我的人,但是当我改变FPM插座端口listen = /var/run/php5-fpm.socklisten = 127.0.0.1:9000 ngnix总是返回502,我可以不知道是什么问题。

回答

0

你的服务器是功能强大,足以应付> 500 000要求每天应用程序(如果它是明智的书面)。

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

在apache中,它自动以额外的apache进程启动。

但是Nginx + PHP-FPM给了你自由如何处理这种情况。

只要改变你的FPM池的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; 
} 



p.s.请不要将listen属性更改为ip:port - 套接字更快,因为它在ip:port中通过ip和端口创建网络连接,但是在套接字版本中它只是打开.sock“文件”。

p.s.不要修改fastcgi_buffers等指令,它不会修复坏的网关问题,因为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

感谢这个伟大的回答:) –

+0

它是如何有益的!乐意帮助(: – num8er

+1

实际上它帮助我允许更多的并发请求..并且我将项目的特定部分从laravel移动到phalcon ..现在它工作得很好 –

-1

这种变化将工作:Nginx的配置文件/etc/nginx/nginx.conf:在HTTP下部分的下方添加在nginx.conf文件

HTTP

{

fastcgi_buffers 8 16K ;

fastcgi_buffer_size 32k;

}