Ошибка Nginx, сообщающая об отказе в соединении с портом PHP-FPM
Недавно создайте стек LEMP с PHP-FPM на Ubuntu 14.04 x64. Попытка получить доступ к некоторому PHP в моем webroot. Браузер показывает 502 Bad Gateway, а журнал ошибок Nginx показывает следующее (мой IP и рабочий IP удалены):
TIME [error] 22838#0: *7 connect() failed (111: Connection refused) while connecting to upstream, client: [my personal IP], server: [production server IP], request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "[production server IP]"
Чтобы определить, работает ли PHP-FPM, я выполняю:
ps -waux | grep php5
И я отвечу в ответ:
root 22930 0.0 0.4 327432 16324 ? Ss 10:10 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
Как определить, на каком порту работает PHP-FPM или почему он не работает на этом порту? Спасибо.
4 ответа
Нашел это:
Чтобы указать номер порта, вам нужно отредактировать директивуlisten = в /etc/php5/fpm/pool.d/www.conf, однако я обнаружил, что теоретически более эффективно разрешать Nginx взаимодействовать через сокеты Unix поэтому я поменялся
127.0.0.1:9000
с
/var/run/php5-fpm.sock
Это был первый шаг...
Затем мне пришлось заменить следующие строки в файле конфигурации моих сайтов (sites-available/default):
fastcgi_pass 127.0.0.1:9000;
с
fastcgi_pass unix:/var/run/php5-fpm.sock;
И теперь я в порядке.
Если ваш сервис (не только PHP-FPM) является портом прослушивания, вы можете определить его, набрав sudo netstat -lntp
:
# sudo netstat -lntp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.16.121:3306 0.0.0.0:* LISTEN 1427/mysqld
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1722/memcached
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 642/smbd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21315/nginx
tcp 0 0 127.0.0.1:81 0.0.0.0:* LISTEN 25078/php-fpm.conf)
где вы можете видеть, что процесс PHP-FPM с pid 25078 использует порт 81.
RHEL 9.1 / установка по умолчанию включена PHP: 8.0.2.0
NGINX не работает при установке WordPress
Признак: nginx[5700]: nginx: [emerg] нет порта в восходящем «php-fpm» в /etc/nginx/default.d/php.conf:15
... в этом случае некоторые инструкции по установке в Интернете игнорируют тот факт, что php-fpm должен быть установлен на RHEL 9. Он не включен в поставляемую установку PHP. Без этого /var/run/php-fpm/www.sock (автоматически созданный php-fpm отсутствует. Однако установка отсутствующего php-fpm все равно приводит к сбою.
Файл php.conf по умолчанию в разделе:
местоположение ~ .(php|phar)(/.*)?$ {
есть линия...
fastcgi_pass php-fpm;
К сожалению, для этого необходимо (в некоторых случаях):
fastcgi_pass /var/run/php-fpm/www.sock
В общем, вам нужен php-fpm И уточнение пути для раздела fastcgi php.conf, чтобы вернуться к работе.
Я публикую эту альтернативную причину ошибки на случай, если она поможет кому-то еще!
Проблема заключается в наличии более одного файла конфигурации в /etc/php/7.4/fpm/pool.d.
usr@server:/etc/php/7.4/fpm/pool.d$ ls
www.conf foor-php-fpm.conf bar-php-fpm.conf.bak
Решение
Шаг 1. Удалите или переименуйте все остальные файлы .conf, оставив только www.conf.
usr@server:/etc/php/7.4/fpm/pool.d$ sudo mv other-php-fpm.conf other-php-fpm.conf.bak2
Шаг 2:systemctl restart php7.4-fpm.service
Сделанный!
user@server:~$ systemctl status php7.4-fpm.service
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-31 16:16:22 UTC; 6s ago
Docs: man:php-fpm7.4(8)
Process: 381508 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
Main PID: 381487 (php-fpm7.4)
Status: "Ready to handle connections"
Tasks: 3 (limit: 4568)
Memory: 12.1M
CGroup: /system.slice/php7.4-fpm.service
├─381487 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
├─381506 php-fpm: pool www
└─381507 php-fpm: pool www
Это решение применимо и к php-fpm-7.2.