為了演示多級代理場景,我們分配了以下服務器資源:
- 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”