Назад | Перейти на главную страницу

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

Обнаружил проблему в прошлом году. Просто хочу поделиться тем, что узнал. Это произошло из-за сценария S3Fuse + PHP, который будет сканировать папку, в которой монтируется S3Fuse. Это большая нагрузка. S3Fuse очень медленно сканирует файлы, особенно если у вас так много файлов в корзине.

Я думаю, что рекомендуется использовать S3Fuse, если вы будете использовать его только для чтения файлов или для резервного копирования файлов. Альтернативой, которую вы можете использовать в AWS для мультимонтированного хранилища, является EFS.

Шаг 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.

Надеюсь, что это сразу решит вашу проблему.