在工作中遇到nginx串联的502问题
由于历史原因会出现既有域名访问接口,也有ip+端口号访问接口,也有域名+端口号访问接口
简单介绍下大概架构如下(全是docker部署的)
一台nginx作为主机,用来反向代理域名到ip+端口号,并配置两个nginx连接池(一主一备)
http {
......
upstream WEB_NGINX_POOL{
server ip1:port1;
server ip1:port2 backup;
}
upstream 域名{
server ip1:port3;
}
server {
listen 80;
server_name 域名;
#include /usr/local/nginx/conf/domain.conf
# 下面location可以抽出来单独文件,也可以不抽出来
location / {
access_log logs/domain.log main;
if ( $host = '域名' ) {
proxy_pass http://域名;
}
include /usr/local/nginx/conf/proxy_params;
}
}
server {
listen port3;
server_name localhost;
include /usr/local/nginx/conf/proxy_params;
}
}
proxy_params内容如下:
proxy_set_header cookie $http_cookie;
proxy_set_header Host $http_host;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header request_uri $uri;
proxy_set_header referer $http_referer;
proxy_ignore_client_abort on;
proxy_pass_header X-Accel-Redirect;
proxy_pass_request_headers on;
proxy_pass_request_body on;
client_max_body_size 50m;
client_body_buffer_size 256k;
#60 0000 000
proxy_connect_timeout 600000000;
proxy_send_timeout 600000000;
proxy_read_timeout 600000000;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
上面这样配置后会导致如下问题
1). 访问不存在的uri时并不会立即返回404,虽然后面的nginx会返回404,但主nginx会显示500
2). 偶尔会出现502 no live upstream while conneting to upstream,client: XXX.XXX.XXX.XXX,server:localhost,request:"GET uri HTTP/1.1", upstream:"http://WEB_NGINX_POOL/" host:"host"
网友评论