文档章节

网站出现502 BAD GATEWAY的解决办法

slagga
 slagga
发布于 11/09 23:25
字数 772
阅读 6
收藏 0

出现502 bad gateway错误的原因

1.php-fpm进程数不够用
2.Linux内核打开文件数量小
3.脚本执行时间超时
4.缓存设置比较小

网站间歇性出现502,第一反应不是程序的问题,而是nginx服务器的问题,因为这是代理服务器出现的问题,代理服务器并没有安装php 排除第一中情况。

于此想到的是可能是超时,所以我把超时修改了一些
一下是服务器原配置(重点配置)

http部分

server_names_hash_bucket_size 64;
client_header_buffer_size 128k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;

keepalive_timeout 60;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60;
fastcgi_read_timeout 600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;

gzip_buffers 4 128k;

server部分

upstream myweb {
server 10.10.10.1:80 max_fails=3 fail_timeout=30s;
server 10.10.10.2:80 max_fails=3 fail_timeout=30s;
ip_hash;
}

location / {
proxy_pass http://myweb;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}

第一步修改超时 只改了http部分 缓冲基本上都加了几倍

server_names_hash_bucket_size 512;
client_header_buffer_size 512k;
large_client_header_buffers 16 128k;
client_max_body_size 256m;

keepalive_timeout 600;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 256k;
fastcgi_buffers 16 512k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 1024k;

gzip_buffers 16 512k;

观察nginx出现502的频率并没有下降,还是和以前一样

第二步修改server代理服务超时

location / {
proxy_pass http://myweb;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;

proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;

}

观察nginx502的频率有一点下降,没有达到预期效果于是更改代理的缓冲区

location / {
proxy_pass http://myweb;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_redirect off;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffer_size 512k;
proxy_buffers 32 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;
proxy_ignore_client_abort on;

}

观察nginx502的频率和刚才一样,并没有明显效果。打开nginx的错误日志,观察错误状态,nginx错误日志显示

[error] 20435#0: *3890606 no live upstreams while connecting to upstream, client:

意思是nginx发现没有存活的后端了,后端有两台服务器,这怎么可能

猜想nginx在等待后端服务器返回的时候做了判断,如果后端服务器响应慢就有可能踢掉后端服务器,因此就可能把后端的两台服务器都踢掉

所以问题是出在 upstream 配置,原来配置中的max_fails=3 fail_timeout=30s;是默认的配置

我尝试修改 max_fails=10 fail_timeout=60s; 观察nginx出现502的频率下降了很多,但是如果出现502就时间比较久。以下是upstream最终配置

upstream myweb {
server 10.10.10.1:80 max_fails=60 fail_timeout=10s;
server 10.10.10.2:80 max_fails=60 fail_timeout=10s;
ip_hash;
}

接下来可能的优化 调高调高linux内核打开文件数量备注一下

echo ‘ulimit -HSn 65536′ >> /etc/profile
echo ‘ulimit -HSn 65536′ >> /etc/rc.local
source /etc/profile

© 著作权归作者所有

共有 人打赏支持
slagga
粉丝 17
博文 134
码字总数 122135
作品 0
深圳
程序员
私信 提问
502 bad gateway怎么解决

方法/步骤 目前lnmp一键安装包比较多的问题就是502 Bad Gateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。 解决办法:可以尝试根据lnmp一...

lg2045
2013/08/26
0
0
nginx 502 Bad Gateway 错误解决办法

nginx 502 Bad Gateway 错误解决办法 一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是小编搜集整理的一些Nginx 502错误的排查方法,供参考: ...

coolner
06/26
0
0
解决:502 bad gateway

502 Bad Gateway服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 解决办法是:再刷新一下网页或清理一下电脑的缓冲文件在打开你想打开的网页就好了....

Junn
2013/07/28
0
0
nginx 502 Bad Gateway 错误解决办法

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是小编搜集整理的一些Nginx 502错误的排查方法,供参考:   Nginx 502错误的原因比较多,是因...

大道至簡
2014/04/23
0
0
PHP脚本监控Nginx 502错误并自动重启php-fpm

最近服务器时不时出现Nginx 502 Bad Gateway,如果在电脑旁边还好,要是半夜或者出去了,怎么办? 没关系,写个脚本检测服务状态,发现异常,自动重启。 自动重启脚本: 复制代码代码如下: <...

老查
2016/03/02
199
0

没有更多内容

加载失败,请刷新页面

加载更多

爬虫教程」Python做一个简单爬虫,小白也能看懂的教程

俗话说“巧妇难为无米之炊”,除了传统的数据源,如历史年鉴,实验数据等,很难有更为简便快捷的方式获得数据,在目前互联网的飞速发展写,大量的数据可以通过网页直接采集,“网络爬虫”应运...

糖宝lsh
今天
1
0
KEIL MDK工程中的宏定义:字符,值,字符串

下图中定义了2个宏: 等效于文件中: #define MCU_FLASH_LESSTHAN_64K #define VERSION_INFO_hw 'a' // MDK :VERSION_INFO_hw="'a'" 即MDK中的VERSION_INFO_hw="'a'" 和 #define VERS......

SamXIAO
今天
0
0
集合的最优子集划分

问题描述:如何将一个个数为n的集合N划分为为若干个子集N1…Nk,其中1≤k≤n,计算出每个子集的最优结果R1…Rk,使得F(R1…Rk)为最优的结果。 这个问题可以分成3步解决: 求出集合所有子集 ...

laolin23
今天
0
0
JavaScript实现在线Markdown编辑器、转换HTML工具-toolfk程序员工具网

本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。T...

toolfk
今天
2
0
Source Tree 在git 密码更新后,无法拉取代码的解决办法

背景: git 密码总是需要修改。在修改代码后,拉去代码, source tree 总提示access denied. 解决方法:重新修改git 仓库对应的密码。 for mac:应用程序 -》 钥匙串 -》 搜索 source tre...

Carlyle_Lee
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部