默認后端服務器只能看到是前端nginx調度器訪問的本機
針對前端只有單個代理服務器的解決辦法
一、修改調度機nginx的虛擬主機的配置文件
設定轉發往后端主機的請求報文的請求首部的值;
vim /etc/nginx/conf.d/test.conf
server { listen 80; server_name www.test.net; root /data/site1/; location ~.*\.(jpg|png|jpeg)$ { proxy_pass http://192.168.1.4; } location /api { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://192.168.1.6; } access_log /var/log/nginx/test_net.log ; }
nginx 對別人發給它的文件沒辦法修改,但對他發送給別人的文件可以修改,這里在頭部添加一個X-Real-IP
默認日志里記錄的是訪問本機的客戶端IP地址,X-Real-IP這個字段可以自定義
二、重啟nginx服務器
1 systemctl restart nginx 2 或者 3 nginx -s stop 4 nginx
三、修改后端主機的主配置文件
vim /etc/httpd/conf/httpd.conf
默認記錄的開頭是客戶端IP地址:(英文輸入法下,輸入/LogFormat 直接定位到這行)
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
將原來的注釋掉,修改為:
LogFormat "\"%{X-Real-IP}i\" %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
四、測試訪問
curl www.test.net/api -L
五、查看后端日志
"192.168.1.4" 192.168.1.5 - - [08/Jun/2021:11:47:23 +0800] "GET /api HTTP/1.0" 301 231 "-" "curl/7.29.0" "192.168.1.4" 192.168.1.5 - - [08/Jun/2021:11:47:23 +0800] "GET /api/ HTTP/1.0" 200 31 "-" "curl/7.29.0"
192.168.1.4 是測試服務器地址,192.168.1.5是nginx調度器地址。