NGINX 和 PHP-FPM 502 错误网关

NGINX 和 PHP-FPM 502 错误网关

好吧,情况是这样的,我们目前有一台服务器,现在正在迁移到 AWS。我们的配置几乎相同,而且我们已经尝试运行 Apache 基准测试,因此据我所知,PHP-FPM 池在某种程度上已经得到优化。但是,一小时后,我们将域指向 AWS DNS 后,我们收到 502 错误网关,并收到此错误:

connect() to unix:/var/run/nginx/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 127.0.0.1, server: domain.com, request: \"GET / HTTP/1.0\", upstream: \"fastcgi://unix:/var/run/nginx/php-fpm.sock:\", host: \"domain.com\""

你知道这里出了什么问题吗?或者有什么方法可以追踪导致 502 错误网关的原因吗?


资源

- EC2: m4.large
  - CPU: 2
  - RAM: 8
- Cloudfront
- ELB
  - min: 2 instances
- Memcached (AWS Elasticache) for PHP session handling

设置

在 AWS 中使用以下工具运行:CloudFront - ELB - NGINX - PHP

  1. NGINX 1.8
  2. PHP 7.1.11

配置

NGINX

worker_processes auto;
worker_connections 4096;
multi_accept on;
use epoll;
send_timeout 3600;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 3600;
gzip on;

PHP-FPM

user = nginx
group = nginx
listen = /var/run/nginx/php-fpm.sock
pm = dynamic
pm.max_children = 46
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 5
request_terminate_timeout = 3600
pm.max_requests = 400
process.priority = -19
request_terminate_timeout = 3600
catch_workers_output = yes

答案1

去年发现了这个问题。只是想分享一下我发现的东西。这是由于 S3Fuse + PHP 脚本将扫描安装 S3Fuse 的文件夹。它会产生很大的负载。S3Fuse 扫描文件的速度非常慢,尤其是当存储桶中有这么多文件时。

如果您仅将其用于读取文件或备份文件,我认为建议使用 S3Fuse。您可以在 AWS 中用于多挂载存储的替代方案是 EFS。

答案2

步骤 1:缺少一些配置,请添加您的 PHP_FPM 文件

listen.allowed_clients = 127.0.0.1

listen.owner = nginx
listen.group = nginx
listen.mode = 0666

步骤 2:取决于 PHP 版本,有时php-fpm.sock名称可以是php5-fpm.sock。请确保 nginx 和 php-fpm 配置中的套接字名称相同。

希望这能立即解决您的问题。

相关内容