如何使用本地NginX网站解决此错误网关错误?

时间:2017-01-07 08:46:08

标签: php nginx

我在运行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上运行?

1 个答案:

答案 0 :(得分:4)

为什么你首先得到错误

您收到错误是因为nginx正在向不存在的端点代理请求。基本上,它永远不会到达PHP。这就是我们需要解决的问题。

什么告诉我们错误在于:

[crit] 6308#6308: *9 connect() to unix:/var/run/php7.0-fpm.sock

我们采取的步骤

  • 确保php-fpm正常工作
  • 找出php-fpm
  • 接受连接的位置
  • 修改nginx配置以反映上述内容

确保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的默认值)。

PHP-FPM接受

的连接

我们会使用sudo lsof -p 123456列出打开的文件描述符,其中123456是您从ps aux | grep php获得的进程ID。

向下滚动列表,您正在寻找" unix"或" tcp"看看它做了什么。

更改PHP-FPM在

接受连接的位置

我们可以更改上述值,也可以保留。我遇到麻烦来展示这几个有用的命令的原因是为了强调你可以随时询问你的系统发生了什么。

IF 您知道的配置文件在哪里(通常是/etc/php/7.0/fpm/pool.d/www.conf然后打开它并找到listen指令。更改或保留它,但在nginx的{​​{1}}值中使用它。

我写了很多,但是如果你继续使用Linux,那么你最终只会熟悉一些命令。它没有什么特别困难所以我希望这不会让你远离这种服务PHP的方法。我发布了更多信息,但此时我还没有在Linux机器附近,因此我没有发布终端输出作为示例。如果你没有找到这个答案,我以后会这样做。

祝你好运!