我今天刚刚收到我的第一个 VPS,想在上面安装 nginx + PHP + MariaDB。好吧,我确实这样做了,但在配置时遇到了问题。
让 nginx 提供静态 .html 文件没有问题,但尝试提供动态 PHP 文件时只会显示公开的“502 Bad Gateway”消息。我对 nginx 日志文件的解释表明 nginx 和 PHP-FPM 之间存在通信错误,但我是个新手,所以这可能非常错误。
php5-fpm.log:
[05-Aug-2012 21:50:10] NOTICE: fpm is running, pid 10982
[05-Aug-2012 21:50:10] NOTICE: ready to handle connections
nginx 的 error.log 部分内容:
2012/08/06 00:13:20 [error] 11419#0: *4 connect() failed (111: Connection refused) while connecting to upstream, client: REMOVED, server: lo$
2012/08/06 00:23:21 [error] 11419#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: REMOVED, server: lo$
2012/08/06 00:23:22 [error] 11419#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: REMOVED, server: lo$
2012/08/06 00:23:23 [error] 11419#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: REMOVED, server: lo$
我查看了大多数配置,但一开始我几乎保留了所有默认配置。PHP-FPM 仍在端口 9000 上运行,这是 nginx 应该查询的端口...
答案1
这是一个长远的想法(因为我不知道你的发行版、版本或配置),但如果我没记错的话,PHP-FPM 的最新默认配置(至少在 Debian 上)已切换到基于文件的通信(UNIX 套接字)而不是 TCP。
您可以通过检查 PHP-FPM 的配置文件或使用等方式来验证这lsof
一点netstat -a
。
编辑:刚刚检查了我的设置。我在这里使用 Apache,因此这不会直接有帮助,但 FastCGI 配置行如下:
FastCgiExternalServer /var/run/apache2/php5.fcgi -idle-timeout 600 -flush -socket /var/run/php5-fpm.sock
正如您所见,它指的是一个套接字文件,即/var/run/php5-fpm.sock
。