nginx多层代理

本文展示了nginx多层代理(proxy1→proxy2→nginx server)的配置示例,重点讲解如何通过proxy_protocol协议传递真实客户端IP。proxy1和proxy2监听21000端口并启用proxy_protocol,nginx server监听80端口并解析proxy_protocol头部,使用$proxy_protocol_addr变量记录真实IP,确保日志和请求头中正确获取客户端地址。

作者:zhuge··预计阅读 4 分钟·1,177 阅读·0 评论
nginx多层代理

proxy1 --> proxy2 --> nginx server

proxy1

server {
    set_real_ip_from 172.16.0.0/16;
    listen 21000 so_keepalive=on;
    proxy_protocol    on;  #特别注意这个
    proxy_pass goapi;
}

proxy2

server {
    set_real_ip_from 172.16.0.0/16;
    listen 21000 so_keepalive=on;
    proxy_pass goapi;
}

nginx server

http{
  log_format proxy '$proxy_protocol_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent"';
  #注意这里proxy_protocol_addr这个变量
  server
  {
      listen 80 proxy_protocol; #负责解开data头部数据

      set_real_ip_from 172.16.0.0/16;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      access_log /opt/logs/nginx/proxy_api.timoq.com proxy;
      server_name api.timoq.com;
      real_ip_header  proxy_protocol;
      proxy_set_header X-Real-IP       $proxy_protocol_addr;
      proxy_set_header X-Forwarded-For $proxy_protocol_addr;

      include conf.d/include/api.conf;
  }
}

相关文章

评论

加载中...