badgateway首先从字面上翻译:错误的网关
简单来说就是服务器没有相应,也就是我们的web服务器没有接到有效的信息导致的,产生错误的原因有很多,连接超时、设置代理、请求过多导致无法响应等等,都有可能导致请求BadGateway。
以下是搜集整理的一些错误的排查方法,供参考:
错误的原因比较多,首先排查一下访问的电脑有没有设置代理。
是因为在代理模式下访问也是有可能报的。
badgateway第二是用ipconfig命令或右键网络图形化界面查看ip和DNS,看下是否有问题
badgatewayDNS缓冲或者DNS设置不正确都有可能导致。这种情况的通常原因是因为你在未开启vpn的情况下访问了facebook这样的网站。这个时候自然访问不上,同时却在本机留下了缓冲。这种情况通常在几分钟之内就可以访问了。也可以尝试在dos窗口运行ipconfig/flushdns,该命令会刷新DNS缓冲dns被劫持了,即使使用国外的dns,也会被劫持。有些机子开vpn能够访问,有些机子确不能。并且排除了代理、防火墙、本地网络的原因。这个时候同时ping远程网站,比如facebook。不能访问的机子通常获取了一个怪异的ip,从任何地方都ping不通的ip。而能访问的机子ip,在不能访问的机子上直接可以访问,也可以ping通。这种情况我们可以去掉VPN服务器的DNS。切换另外的dns。在windows系统中,可以在本地网络连接的属性中,去掉默认的dns,选用国外的dns,比如google的的。或opendns。
上面几部都检查完了,最后清楚一下浏览器的缓存,CTRL+F5强制刷新页面。
如果是Nginx搭建的服务,则尝试如下方法。
Nginx服务器上发现错误,很多情况下并非Nginx本身的问题。就以Nginx+PHP+MySQL这种架构说明。Nginx本身设置等cgi接口返回的数据延时太短,要延长这个时间。如同前面说的,很多情况下并非Nginx本身的问题,这样操作后常常并不能缓解问题。此时,就要考虑对应cgi接口的配置,比php-fpm.conf的配置,脚本执行时间的超时情况限制。这可以通过跟踪php-fpm的slowlog来排查,对相关代码优化,减少延时。另外很大的问题在MySQL数据库这一块如果数据库执行命令超时也会大延长php脚本的执行时间,导致Nginx等待超时。可以my.cnf的slowlog进行确认效能低下的sql语句是哪些,进行优化配置。通过优化php-fpm及MySQL的配置都大大减少Nginx的等待超时的情况。
fastcgi缓冲区设置过小
确认这个问题首先要看nginx的日志文件,目录为/var/log/nginx,如果在日志中发现了类似如下错误。
0:*16upstreamsenttoobigheaderwhilereadingresponseheaderfromupstream
则是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。
增加缓冲区即可,彻底解决了NginxBadGateway的问题。方法如下: