php - Nginx 和 PHP-FPM 502 网关错误

标签 php mongodb nginx

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

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

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

最佳答案

您的服务器足够强大,每天可以处理>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 - socket 更快,因为在 ip:port 中它通过 ip 和端口创建网络连接,但在 socket 版本中它只是打开.sock"file"。

附:不要更改 fastcgi_buffers 和 etc 指令,它不会修复 bad gateway 问题,因为 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、内存事件

关于php - Nginx 和 PHP-FPM 502 网关错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551104/

相关文章:

php - CodeIgniter 动态 URI 路由可能吗?

javascript - 在单击的(网格的)单元格内放置图像或 css 样式图标

php - 如何在浏览器中录制音频或视频并将其存储在我服务器的数据库中?

MongoDB:非稳定时间序列的推荐模式/文档大小

php - nginx.conf 用于 restful api

php - 如何检索存储在表中的sql查询并为表中的所有查询创建动态php页面

MongoDB:如何定义模式?

node.js - 如何在 sailsJs 中使用 mongoDB 仅在数组中获取 _id 字段

node.js - 如何使用nginx作为s3 aws的代理?

django - 如何在同一域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?