我在运行Ubuntu 16.10的笔记本电脑上运行本地测试服务器。我在运行Apache2,但我决定切换到NginX。我有五个站点,一个是纯HTML,其他是PHP 7.
只是HTML的网站运行正常。 PHP站点失败了。首先,基于PHP的网站都返回403 Forbidden
错误,如this question I asked earlier中所述。
但是,经过一些实验并查看网络上的文档后,似乎问题可能是每个网站的NginX配置文件都指向index.html
,而不是index.php
。所以,我改变了配置文件:
location / {
try_files $uri $uri/ /index.html;
}
......对此:
location / {
try_files $uri $uri/ /index.php;
}
不幸的是,这只会改变我得到的那种错误。现在,当我加载我的一个PHP网站时,出现502 Bad Gateway
错误,这就是/var/log/nginx/error.log
中显示的内容:
2017/01/07 17:28:26 [crit] 6308#6308: *9 connect() to unix:/var/run/php7.0-fpm.sock failed (2: No such file or directory) while connecti
ng to upstream, client: 127.0.0.1, server: local_examle.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php7.0-fpm.
sock:", host: "local_example.com"
我以为我已正确安装并配置了php7.0-fpm,但我猜不知道NginX和PHP在我的系统上不能一起工作。
如何解决此Bad Gateway
错误并让我的基于PHP的网站在NginX上运行?
答案 0 :(得分:4)
您收到错误是因为nginx
正在向不存在的端点代理请求。基本上,它永远不会到达PHP。这就是我们需要解决的问题。
什么告诉我们错误在于:
[crit] 6308#6308: *9 connect() to unix:/var/run/php7.0-fpm.sock
php-fpm
正常工作php-fpm
在我所做的是检查进程列表中是否有php-fpm
进程。这告诉我php-fpm
是否已经开始。
在终端中输入:
ps aux | grep php
它显示了php进程列表。如果PHP-FPM不存在,则表示它从未启动过,因此您可以使用
启动它 sudo service php7.0-fpm start
。我假设php7.0-fpm
是服务的名称。
如果php-fpm
存在,您可以随时查看已打开的文件描述符。这包括配置文件,库,网络连接和unix套接字。
首先,您需要找到process ID
进程的php-fpm
或PID。 ps aux | grep php
的输出会为您提供一个列表,您希望查看其所有者为root
的进程(通常表示如果您使用16.04的默认值)。
我们会使用sudo lsof -p 123456
列出打开的文件描述符,其中123456
是您从ps aux | grep php
获得的进程ID。
向下滚动列表,您正在寻找" unix"或" tcp"看看它做了什么。
我们可以更改上述值,也可以保留。我遇到麻烦来展示这几个有用的命令的原因是为了强调你可以随时询问你的系统发生了什么。
IF 您知道池的配置文件在哪里(通常是/etc/php/7.0/fpm/pool.d/www.conf
然后打开它并找到listen
指令。更改或保留它,但在nginx
的{{1}}值中使用它。
我写了很多,但是如果你继续使用Linux,那么你最终只会熟悉一些命令。它没有什么特别困难所以我希望这不会让你远离这种服务PHP的方法。我发布了更多信息,但此时我还没有在Linux机器附近,因此我没有发布终端输出作为示例。如果你没有找到这个答案,我以后会这样做。
祝你好运!