为了演示多级代理场景,我们分配了以下服务器资源:
- 10.1.9.98:充当客户端
- 10.0.3.137:一级代理
- 10.0.4.105:二级代理
- 10.0.4.129:三级代理
- 10.0.4.120:服务器端
各级代理配置
以下是各级代理的基本配置示例(仅展示关键部分):
一级代理(10.0.3.137)配置
server {listen 80;location / {proxy_pass http://10.0.4.105; # 转发请求到二级代理proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;}
}
二级代理(10.0.4.105)配置
与一级代理类似,只是转发目标改为三级代理:
server {listen 80;location / {proxy_pass http://10.0.4.129; # 转发请求到三级代理proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;}
}
三级代理(10.0.4.129)配置
三级代理直接转发请求到服务器端:
server {listen 80;location / {proxy_pass http://10.0.4.120; # 转发请求到服务器端proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;}
}
服务器端(10.0.4.120)配置
服务器端记录客户端的真实IP地址:
server {listen 80;server_name localhost;charset utf-8;location / {root /home/ruoyi/projects/ruoyi-ui;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/;}# springdoc proxylocation ~ ^/v3/api-docs/(.*) {proxy_pass http://localhost:8080/v3/api-docs/$1;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
在以上配置下,当客户端10.1.9.98发起请求时,X-Forwarded-For头信息包含了客户端10.1.9.98、一级代理10.0.3.137和二级代理10.0.4.105的IP地址。“10.1.9.98, 10.0.3.137, 10.0.4.105”