背景
nginx服務(wù)器經(jīng)常用于反向代理
實現(xiàn)負載均衡匿辩,但是經(jīng)常出現(xiàn)的問題是反向代理之后跳纳,我們通過 request.getRemoteAddr() 取到的客戶端ip就變成了反向代理服務(wù)器的ip地址
设褐,而不是真實的客戶端地址啄枕。問題
原因就是nginx反向代理相當(dāng)于再真實客戶端與真實服務(wù)器中的一個連接中介的作用萌抵,將請求發(fā)到真實服務(wù)器的是實現(xiàn)反向代理的服務(wù)器稿饰,而不是真實客戶端了,此時畦粮,我們再通過直接獲取請求客戶端的ip散址、端口、協(xié)議等方法就變成了反向代理服務(wù)器的ip锈玉、端口爪飘、協(xié)議了义起,如此就與我們的初衷相違背;解決
因此我們要做的就是再nginx反向代理中動態(tài)的將http 的header頭信息
更改為真實的客戶端信息
拉背,之后在真實服務(wù)器上,我們就可以通過http 的 header 頭信息
來獲取到真實的客戶端信息了默终。在
nginx
的配置文件nginx.conf
做如下更改:
server {
# 在每一個 location 配置里都需要
location / {
# host 修改為真實的域名和端口
proxy_set_header Host $http_host;
# 客戶端真實ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 客戶端真實協(xié)議(http/https)
proxy_set_header X-Forwarded-Proto $scheme;
}
}
如此椅棺,我們就能獲取到真實的客戶端信息了犁罩。
轉(zhuǎn)載自: https://www.cnblogs.com/linlm/p/10112916.html