通过 nginx-load balancer 访问 tomcat 时从 servlet 获取客户端 ip 地址

通过 nginx-load balancer 访问 tomcat 时从 servlet 获取客户端 ip 地址

我使用 nginx 作为负载均衡器,并使用一些 tomcat 服务器作为后端。Web 客户端是 java 脚本,它们从网站向负载均衡器发送请求。

因此路径如下:

客户端 xhttp 请求来自PC1 具有 IP 1
通过 Javascript 托管于域名A.com(服务器A知识产权 2

请求已发布至 -->后端.domainA.com(也在服务器上A知识产权 2
负载均衡器将请求上传至 -->雄猫(在服务器 B、C 或 D

当直接向 Tomcat 服务器执行 servlet 请求时,我得到了所需的客户端 IP 1,因此我可以排除问题出在编程错误上。

我尝试了以下配置,但仍然只收到 Web 服务器 A 的 IP 2,而不是请求客户端所需的 IP 1。我需要如何配置 nginx-part 来检索 IP 1?

nginx.conf:

user www-data;
    ---- other stuff
    
http {
    
    --- other stuff
    
    
    upstream backend {
        server mytomcat1.serverB.com  max_fails=1 fail_timeout=2s;
        server mytomcat2.serverC.com  max_fails=2 fail_timeout=5s;
        server mytomcat3.serverD.com  max_fails=2 fail_timeout=5s;
    }
}

站点可用/com.domainA.backend

server {
       listen         80;
       server_name    backend.domainA.com;
       # Redirect all traffic to SSL:
       rewrite ^ https://$server_name$request_uri? permanent; 
       set_real_ip_from unix:;
       real_ip_header X-Real-IP;
       real_ip_recursive on;
}
 
server {
    listen 443 ssl;
    server_name     backend.domainA.com;
    ...
    other stuff
    ...
    location / {
            proxy_set_header  Host $host;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-Proto https;
            proxy_set_header  X-Forwarded-For $remote_addr;
            proxy_set_header  X-Forwarded-Host $remote_addr;
            proxy_pass http://backend;
        }
    }

站点可用/com.domainA

server {
       listen         80;
       server_name    domainA.com www.domainA.com;
       # Redirect all traffic to SSL
       rewrite ^ https://$server_name$request_uri? permanent; 
}
server {
    listen 443 ssl;
    server_name    domainA.com www.domainA.com;
   
    location  / {
        root /var/www/html/ ... ;
   }
}

相关内容