在 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 部分的路径澄清才能恢复工作。
我发布这个错误的替代原因希望它能帮助到其他人!