我使用 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/ ... ;
}
}