Nginx和PHP-FPM 502网关错误

3
让我先解释一下情况,我有一台64GB RAM和20 Core的服务器,还有40GB(SSD)的存储空间。我大约有2000个并发用户。
一周前,我使用Apache和PHP 7,但是CPU占用率达到了80%,有时甚至达到了101%,这是由于巨大的SQL插入引起的。之后,我从Apache转向Nginx,从MySql转向MongoDB,此时CPU占用率约为8%。
我的问题现在是Nginx经常返回502错误网关响应。我寻找了一些答案,但没有任何帮助。但当我将fpm socket更改为端口listen = 127.0.0.1:9000时,Nginx总是返回502错误,我无法弄清楚问题所在。
2个回答

2

您的服务器足够强大,每天可以处理>500 000个应用程序请求(如果编写得当)。

问题是由于PHP-FPM无法拥有更多的子进程来服务更多的请求。

在Apache中,它会自动启动其他Apache进程。

但是Nginx + PHP-FPM让您自由处理这些情况。

只需更改您的fpm池配置:/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 - socket更快,因为在ip:port中,它通过IP和端口创建网络连接,但在套接字版本中,它只是打开.sock“文件”。

提示:不要更改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和内存活动。

它有何帮助!很高兴能帮忙 (: - num8er
1
实际上,这帮助我允许更多的并发请求.. 我将项目的特定部分从 Laravel 移动到 Phalcon.. 现在它运行得非常好。 - Ahmed Ashraf
干得好!Phalcon是PHP框架中的猛兽。它可以在小型DigitalOcean droplets上节省我的CPU和内存,因此服务器可以处理更多的请求。 - num8er
实际上,我必须说我的答案并不是专门为了优化应用程序速度而设计的。它只有在其他子进程正在执行某些任务时才能帮助处理更多请求。即使在Phalcon的情况下,它也很有用。因为随着性能的提高,您会获得更多的用户,所以请求也会增加。 - num8er

-1
这些更改将生效:Nginx配置文件 /etc/nginx/nginx.conf :在nginx.conf文件的http部分下添加以下内容
``` http { fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; } ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接