Nginx 错误表明拒绝连接 PHP-FPM 端口

Nginx 错误表明拒绝连接 PHP-FPM 端口

在 Ubuntu 14.04 x64 上新建运行 PHP-FPM 的 LEMP 堆栈。尝试访问我的 webroot 中的某些 PHP。浏览器显示 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 在哪个端口上运行或为什么它没有在该端口上运行?谢谢。

答案1

找到了:

为了指定端口号,您需要编辑“听 =“指令在/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;

现在我已经开始行动了。

答案2

如果您的服务(不仅仅是 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)

您可以看到 pid 为 25078 的 PHP-FPM 进程使用 81 端口。

答案3

问题是 /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。

答案4

RHEL 9.1 / 默认安装包含 PHP: 8.0.2.0

NGINX 安装 WordPress 时失败

症状:nginx[5700]: nginx: [emerg] /etc/nginx/default.d/php.conf:15 中的上游“php-fpm”中没有端口

...在这种情况下,互联网上的一些安装说明忽略了必须在 RHEL 9 上安装 php-fpm 的事实。它不包含在提供的 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 和 php.conf 的 fastcgi 部分的路径澄清才能恢复工作。

我发布这个错误的替代原因希望它能帮助到其他人!

相关内容