Nginx Web服務(wù)器標準IP解決方案
Nginx Web服務(wù)器在使用的時候常常會使服務(wù)取ip出現(xiàn)問題,讓Nginx Web服務(wù)器直接支持x_forwarded_for是其中一種解決方案。那么我們要如何才能使用這樣的方案呢?
- set $ip $http_x_forwarded_for;
- if ($ip ~ ^$ )
- {
- set $ip $remote_addr;
- }
- proxy_set_header X-Forwarded-For "$ip, $server_addr";
用這段代碼就可以讓Nginx Web服務(wù)器支持標準的x_forwarded_for,在某些情況下,可以用:
- proxy_set_header X-Forwarded-For "$ip";
不把Nginx Web服務(wù)器機器的ip地址加進去。
附:x_forwarded_for取ip的正確方式
x_forwarded_for是將請求路過的代理服務(wù)器的ip都記錄下來的一條字符串,每經(jīng)過一個代理服務(wù)器,x_forwarded_for就會在它的后面加上這個代理服務(wù)器的ip地址。常見的:
119.120.112.157, 61.135.253.11
這樣就表示請求經(jīng)過了一個代理服務(wù)器61.135.253.11。
119.120.112.157, 61.135.253.11, 192.168.0.13
經(jīng)過了兩個代理服務(wù)器61.135.253.11和192.168.0.13。
這樣看起來取***個ip地址就是正確的,不過這比較草率:
192.168.0.1, 119.120.112.157, 61.135.253.11, 192.168.0.13
可以看到會有這樣的x_forwarded_for地址,這是因為用戶在反向代理前,還用了一個正向代理上網(wǎng),這時取***個的話就是192.168.0.1,顯然是不正確的。正確的取法應(yīng)該是:取倒數(shù)***個非服務(wù)器ip,在例子中61.135.253.11, 192.168.0.13,這兩個ip都是服務(wù)器用的ip,除去這兩個,倒數(shù)***個119.120.112.157就是正確的。
【編輯推薦】