nginx之頭部變量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"部分是空的,所以只有
到了第二臺nginx,使用
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
現在的$proxy_add_x_forwarded_for變量,X-Forwarded-For部分包含的是用戶的真實ip,$remote_addr部分的值是上一臺nginx的ip地址,於是通過這個賦值以後現在的X-Forwarded-For的值就變成了“用戶的真實ip,第一臺nginx的
最後我們看到還有一個$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; 這樣就可以獲得用戶真實
nginx之頭部變量x_forwarded_for