Nginx Web服務(wù)器標(biāo)準(zhǔn)IP解決方案
Nginx Web服務(wù)器在使用的時(shí)候常常會(huì)使服務(wù)取ip出現(xiàn)問(wè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ù)器支持標(biāo)準(zhǔn)的x_forwarded_for,在某些情況下,可以用:
- proxy_set_header X-Forwarded-For "$ip";
不把Nginx Web服務(wù)器機(jī)器的ip地址加進(jìn)去。
附:x_forwarded_for取ip的正確方式
x_forwarded_for是將請(qǐng)求路過(guò)的代理服務(wù)器的ip都記錄下來(lái)的一條字符串,每經(jīng)過(guò)一個(gè)代理服務(wù)器,x_forwarded_for就會(huì)在它的后面加上這個(gè)代理服務(wù)器的ip地址。常見的:
119.120.112.157, 61.135.253.11
這樣就表示請(qǐng)求經(jīng)過(guò)了一個(gè)代理服務(wù)器61.135.253.11。
119.120.112.157, 61.135.253.11, 192.168.0.13
經(jīng)過(guò)了兩個(gè)代理服務(wù)器61.135.253.11和192.168.0.13。
這樣看起來(lái)取***個(gè)ip地址就是正確的,不過(guò)這比較草率:
192.168.0.1, 119.120.112.157, 61.135.253.11, 192.168.0.13
可以看到會(huì)有這樣的x_forwarded_for地址,這是因?yàn)橛脩粼诜聪虼砬埃€用了一個(gè)正向代理上網(wǎng),這時(shí)取***個(gè)的話就是192.168.0.1,顯然是不正確的。正確的取法應(yīng)該是:取倒數(shù)***個(gè)非服務(wù)器ip,在例子中61.135.253.11, 192.168.0.13,這兩個(gè)ip都是服務(wù)器用的ip,除去這兩個(gè),倒數(shù)***個(gè)119.120.112.157就是正確的。
【編輯推薦】