热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

应用程序“defaultwebsite”中的服务器错误_NGINX502BadGateway错误疑难解答

502BadGateway错误非常常见,此错误代码的确切原因取决于您的特定堆栈。由于前端Web服务器和后端应用程序处理程序之间的通信中断,通常会出现错误

502 Bad Gateway错误非常常见,此错误代码的确切原因取决于您的特定堆栈。

d5e96fcd6897d070d76a982d23b9ce18.png

由于前端Web服务器和后端应用程序处理程序之间的通信中断,通常会出现错误的网关错误。大多数情况下,潜在原因可归因于过度延迟或极短的超时窗口。

df7dbd8e206a8cac6ed049e5e3f8bc85.png

在其他情况下,错误的网关错误表明配置错误的Web应用程序处理程序 - Web服务器理解请求并将其传递给适当的处理程序,但在切换期间出现了问题。

诊断502错误网关错误的原因主要取决于您正在使用的应用程序服务器,我们在下面列出了PHP-FPM的解决方案。

PHP-FPM未运行

e99ea83a731b17f651d657416f6bc459.png

检查PHP-FPM状态的最快方法是使用ps和grep。如果您的输出类似于下面的文字,你可以肯定PHP-FPM正在运行

root@nginx0:/var/log/nginx# ps aux | grep php
root 29191 0.0 1.7 133628 18108 ? Ss 20:41 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 29193 0.0 0.5 133628 5956 ? S 20:41 0:00 php-fpm: pool www
www-data 29194 0.0 0.5 133628 5956 ? S 20:41 0:00 php-fpm: pool www

如果没有,请尝试启动PHP-FPM

4bd4b6ebed6f7a62f393c2228a3d57a4.png

PHP-FPM无法启动

如果PHP-FPM无法成功启动,请在Web服务器上请求PHP页面以导致记录错误。然后,尾部NGINX的错误日志:

www-data@nginx0:/var/log/nginx$ tail /var/log/nginx/error.log
2016/09/19 20:39:30 [crit] 28751#28751: *9 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.0.2.101, server: example.com, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.0.2.255"
2016/09/19 20:39:50 [crit] 28751#28751: *9 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.0.2.101, server: example.com, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.0.2.255"
2016/09/20 16:39:44 [crit] 28751#28751: *33 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.0.2.101, server: example.com, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.0.2.255"

上述错误指向请求处理套接字的问题。NGINX正在寻找一个位于/var/run/php5-fpm.sock但无法找到它的UNIX套接字; 将这些错误与syslog中发现的错误(PHP-FPM的默认日志位置)相关联,很明显PHP-FPM无法启动,这几乎肯定是一个配置问题。

www-data@nginx0:/var/log/nginx$ tail /var/log/syslog
Sep 20 16:39:10 nginx0 kernel: [77167.468712] init: php5-fpm main process (3551) terminated with status 78
Sep 20 16:39:11 nginx0 kernel: [77167.468727] init: php5-fpm main process ended, respawning

请注意terminated with status 78。要确定错误代码78代表什么,我们可以在以下方面grep该错误代码/usr/include/sysexits.h:

www-data@nginx0:/var/log/nginx$ cat /usr/include/sysexits.h | grep 78
#define EX_CONFIG 78 /* configuration error */

我们的怀疑得到了证实;错误实际上是由于PHP-FPM的配置错误。

解决PHP-FPM配置问题

配置问题可能是手指发胖或真正的配置冲突造成的。

要解决由配置错误导致的错误,请首先确保运行php-fpm的用户可以写入套接字目录。接下来,验证是否使用适当的用户权限创建了套接字。

特别是,检查您的工作池配置(in /etc/php5/fpm/pool.d/*.conf)并验证:

  • 套接字路径
  • 流程所有者/组
  • listen.owner / listen.group

user = www-data
group = www-datlisten = /var/run/php5-fpm.socklisten.owner = www-data
listen.group = www-data

注意上面配置文件中的拼写错误:group = www-dat应该读取group = www-data。修复此错误并重新启动PHP-FPM守护程序可以解决此问题

NGINX无法与PHP-FPM通信

78f62c4176b2ec63043610bf33f65aa0.png

如果PHP-FPM和您的应用程序都正常工作,则问题可能在于NGINX的配置。在启用站点的目录中,打开导致问题的站点配置(/etc/nginx/sites-enabled/default默认情况下),并验证该fastcgi_pass指令是否与listenPHP-FPM工作池配置中的socket()匹配。

[...]location ~ .php$ {try_files $uri =404;fastcgi_pass unix:/var/run/php5-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_nam$include fastcgi_params;}

如果您进行了任何更改,请确保重新启动NGINX。

NGINX正在超时

如果后端应用程序服务器已启动并正在运行,则问题的原因可能在于所服务的应用程序。具体而言,未及时响应NGINX的应用程序将导致502,因为NGINX不能再等待响应。

根据应用程序应该执行的操作,可能需要较长的执行时间(> 30秒)。在这种情况下,如下所述增加最大执行时间和NGINX超时窗口将是最佳解决方案。

但是,如果应用程序和数据集的上下文中的执行周期很长,那么您可以从分析和优化相关应用程序中受益。

此修复需要进行两项更改:首先,打开PHP-FPM的配置文件(/etc/php5/fpm/php.ini),然后找到以下行:max_execution_time = 30

增加max_execution_time你的预期应用程序执行时间(以秒为单位)。为了以防万一,添加额外时间的缓冲区可能是谨慎的。

接下来,在您的NGINX config(/etc/nginx/nginx.conf)中,在http块中添加以下内容以增加超时窗口,缓冲区和缓冲区大小:

http {
...fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}

最后,一旦进行了更改并保存,请重新加载NGINX和PHP-FPM:

585c7682dad17f3900bc74933b98cb94.png

PHP-FPM正在超时

在某些情况下,增加PHP-FPM的超时窗口可能只能为更深层次的底层问题提供临时解决方案。根据应用程序的性质,您可以对其进行概要分析和优化,以缩短执行时间,完全避免超时问题。例如,您的应用程序可能会在数据库查询上花费过多的时间阻塞,这取决于您的平台,可能会计入最大分配的执行时间。从PHP文档:“在确定脚本运行的最长时间时,不包括在执行脚本之外发生的任何活动,例如使用system()的系统调用,流操作,数据库查询等。 。在测量时间真实的Windows上,情况并非如此。“

如果您的NGINX超时足够高,您可以通过set_time_limit()从应用程序中调用该函数暂时延长PHP的执行时间限制,但如果您不断进入执行上限,则可以使用长期解决方案(如分析或增加PHP-FPM的超时)更合适。

200 OK

问题是在您的应用程序中,PHP-FPM还是NGINX对您的最终用户无关紧要。因此,在您解决了当前问题的同时,监控基础架构和应用程序的性能和运行状况仍是一个持续关注的问题。

使用Datadog,您可以从整个基础架构中收集,可视化,警报和处理性能和运行状况指标。通过全粒度保留15个月,您可以将过去的性能与最近的趋势进行比较,预测流量和负载,并在事情偏离预期时发出警报。



推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
author-avatar
发哥争霸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有