1. 程式人生 > >nginx之頭部變量x_forwarded_for

nginx之頭部變量x_forwarded_for

x_forwarded_for

$proxy_add_x_forwarded_for是什麽?


$proxy_add_x_forwarded_for變量包含客戶端請求頭中的"X-Forwarded-For",與$remote_addr兩部分,他們之間用逗號分開。

舉個例子,有一個web應用,在它之前通過了2個nginx轉發,即用戶訪問該web通過2臺nginx

在第一臺nginx中,使用

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

現在的$proxy_add_x_forwarded_for變量的"X-Forwarded-For"部分是空的,所以只有

$remote_addr,而$remote_addr的值是用戶的ip,於是賦值以後,X-Forwarded-For變量的值就是用戶的真實的ip地址了。

到了第二臺nginx,使用

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

現在的$proxy_add_x_forwarded_for變量,X-Forwarded-For部分包含的是用戶的真實ip$remote_addr部分的值是上一臺nginxip地址,於是通過這個賦值以後現在的X-Forwarded-For的值就變成了“用戶的真實ip,第一臺nginx

ip”,這樣就清楚了吧。

最後我們看到還有一個$http_x_forwarded_for變量,這個變量就是X-Forwarded-For,由於之前我們說了,默認的這個X-Forwarded-For是為空的,所以當我們直接使用proxy_set_header X-Forwarded-For $http_x_forwarded_for時會發現,web服務器端使用X-Forwarded-For獲得的值是null。如果想要通過X-Forwarded-For獲得用戶ip,就必須先使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 這樣就可以獲得用戶真實

ip


nginx之頭部變量x_forwarded_for