在使用Nginx时遇到的最令人沮丧的错误之一是502错误。伴随这个错误的文本是“坏网关”,不幸的是,它并没有说明什么地方可能出错了。相比之下,其他错误清楚地表明没有找到资源或页面,或者您没有查看特定资源的权限。 在本文中,我们将更详细地研究Nginx中的502坏网关错误,并提出一些经过时间考验的故障排除方法。 502坏网关错误是什么? 当服务器响应一个HTTP请求时,响应代码的类别说明了很多。例如,像4xx这样的响应与坏请求有关;同样,5xx系列是为服务器错误保留的。这意味着如果你得到500或502的回应,这不是你的错——服务器出了问题。 在502错误中,服务器试图告诉你的是,它未能通过一个连接的“网关”连接到一个重要的服务如果这听起来太笼统,没有帮助,那只是野兽的本性;根据您正在运行的堆栈以及Nginx是如何设置服务请求的,这个错误将意味着不同的事情。 在最常见的情况下,例如,当您的新WordPress安装抛出这个错误时,这意味着Nginx无法与PHP(或PHP-FPM)服务正确通信。接下来,让我们看一个例子,说明如何在PHP中解决这个错误。 Nginx和PHP中502坏网关错误的解决 要解决502坏网关错误,您需要系统地检查几个步骤。 FPM不在场 在第一种情况下,也许您提供给Nginx的配置文件说它必须通过PHP-FPM连接,而该服务实际上并没有安装在您的服务器上。这在新服务器安装中非常常见。 要解决这个问题,你需要做的就是(假设你在Ubuntu 16.04上): $ sudo apt install php-fpm $ sudo service php-fpm restart $ sudo service nginx restart 之后,再尝试访问URL,很可能错误就没了。 FPM不能连接到端口或插座 另一个典型的情况是,当您有Nginx配置文件要求它监听一个套接字时,而实际上那个套接字甚至不存在。另一种可能性是,配置文件告诉Nginx通过端口9000连接(这是一个非常常见的设置),而FPM进程被配置为通过套接字文件发送输出。 要查看是否存在这种不匹配,请打开PHP-FPM配置文件。对于Ubuntu 16.04上的PHP 7.1,位置是/etc/PHP/7.1/fpm/pool . d/www . conf,查找下面一行: listen =/run/PHP/PHP 7.1-fpm . sock
现在,检查文件/run/php/php7.1-fpm.sock是否确实存在。如果没有,只需创建它并设置相关权限: # touch /run/php/php7.1-fpm.sock # chown:www-data/run/PHP/PHP 7 . 1-fpm . sock # chmod 775/run/PHP/PHP 7.1-fpm . sock
一旦这样做了,尝试重新启动FPM和Nginx,事情应该会有所进展。 有时替代性PHP缓存(APC)是一个非常糟糕的想法,最好避免。这通常是502坏网关错误的原因。如果您正在运行APC,请禁用它,并替换为更健壮的缓存方案(Memcache是一个很好的替代方案)。 根据您的环境,您需要做类似的检测工作来查看Nginx连接出了什么问题。最好的开始总是Nginx错误日志。
|