經過反向代理后,客戶端與web服務器之間添加了中間層,因此:
1.代理服務器使用$remote_addr拿到的會是客戶端的ip
2. web服務器使用$remote_addr拿到的會是代理服務器的ip
3.客戶端使用getRemoteAddr()拿到的會是反向代理服務器的ip
為了讓服務器能得到客戶端的ip,可以在nginx中做些賦值操作:
1.proxy_set_header X-real-ip $remote_addr;
即在請求頭部放入真實ip
2.proxy_set_header X-Forwarded-For $proxy_add_x_forward-for;
這一段的意思是: 添加一個$proxy_add_x_forward-for到X-Forwarded-For
設置X-Forwarded-For后,每次經過代理轉發都會有記錄,格式是: client,proxy1,proxy2,這是一個非rfc標准,因此默認沒有,需要手動添加,
那么$proxy_add_x_forwarded_for又是什么?
$proxy_add_x_forwarded_for變量包含客戶端請求頭中的"X-Forwarded-For",與$remote_addr兩部分,他們之間用逗號分開。