nginx串联(一台反向代理,一台分发)引起问题

2021-04-20  本文已影响0人  sunland_0416

在工作中遇到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"

上一篇下一篇

猜你喜欢

热点阅读