由于最近线上出现502错误比较蛋疼,所以重新把nginx详细配置做下说明,以此来查找问题。
nginx 配置
location / {
proxy_next_upstream http_500 http_502 http_504 error timeout invalid_header;
proxy_pass http://bak_server;
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_next_upstream http_500 http_502 http_504 error timeout invalid_header;
#这个配置指定nginx在从一台后端主机获取数据时遇到何种错误时会转到下一个后端服务器,默认是error timeout 就是后端服务器
当机,网络出现问题之类的,timeout一般是网络阻塞,超时。
proxy_pass http://bak_server;
#转发请求到后端服务器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以上三行的配置是同一个目的,后端服务器获得client的真实IP
#nginx并不会对X-Forwarded-For头做任何的处理,除非用户使用proxy_set_header 参数设置:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr用逗号分开,如果没有"X-Forwarded-For" 请求头,则$proxy_add_x_forwarded_for等于$remote_addr。
$remote_addr变量的值是客户端的IP
根据线上的错误
8990057 upstream sent invalid header while reading response header from upstream
所以注释掉
invalid_header
变为:
proxy_next_upstream http_500 http_502 http_504 error timeout;
则一切正常了。