我刚刚启动了一个新的 Rackspace 云服务器并运行了以下命令:
apt-get install php5 nginx php-fpm
当我导航到 IP 地址时,我会看到默认的 Nginx 消息。然后,我/etc/nginx/sites-available/default
从另一个工作设置中复制了我的文件:
server {
listen 80;
server_name localhost;
root /srv/www;
index index.php;
location / {
try_files $uri $uri/ /controllers$uri.php;
location ~ \.php$ {
try_files $uri /index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
}
我创建index.php
并/srv/www
开始nginx
了php-fpm
:
/etc/init.d/nginx start
/etc/init.d/php5-fpm start
我收到 502 Bad Gateway 错误。我做错了什么吗?
答案1
由于我无法添加评论,因此我将将其作为答案发布...
检查/etc/php5/fpm/pool.d/www.conf
(或其中的文件)它是否设置为在 TCP 或 UNIX 套接字上运行。还要检查 PHP 是否实际正在运行。并查看日志文件/var/log/php5-fpm.log
或/var/log/php5-fpm/*
(/var/log/nginx/*
取决于设置)。
您应该在那里找到错误的原因。
答案2
就我而言,解决方案是:
1- 像@David 一样更改列表器:
sudo nano /etc/php/7.0/fpm/pool.d/www.conf
在文件搜索中listen =
,注释 ...sock 并添加 127.0.0.1:9000
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
2- 更改 Nginx 站点配置(例如 /etc/nginx/sites-available/mysite.com)
server {
.
.
.
location ~ \.php$ {
.
.
.
#fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
.
.
.
3-增加超时和max_children:
/etc/php/7.0/fpm/php.ini => default_socket_timeout = 60000
/etc/php/7.0/fpm/php.ini => pm.max_children = 20
/etc/php/7.0/fpm/pool.d/www.conf => request_terminate_timeout = 60000
4- 增加 /etc/nginx/nginx.conf 上的超时时间:
keepalive_timeout 65000;
重启php-fpm和nginx后:
sudo service php7.0-fpm restart
sudo service nginx restart
我建议在重新启动 nginx 之前测试一切是否正常:
sudo service nginx configtest
答案3
网关错误意味着 php 进程正在响应错误。您可以检查 php 错误日志吗?还可以尝试将文件 test.php 放置在<?php phpinfo(); ?>
@ /srv/www/ 中,然后尝试直接从服务器的命令行访问该域:
curl http://127.0.0.1:9000/test.php;
您是否检查过一些显而易见的东西,例如,您有一个文件 @ /srv/www/index.php?您是否运行过 ps aux 并 grepped nginx 和 php 以确保它们正在运行?
如何运行:netstat -an | grep LISTEN
以确保 php-fpm 守护进程正在监听?
答案4
就我而言restart
,fpm 服务有效。我只运行了reload
。忘记了 conf 更改需要重新启动才能应用。