網上常見nginx配置ip請求頭
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
風險: 用戶可以通過自己設置請求頭來偽造ip,比如用戶在發起http請求是自己測試請求頭x-forwarded-for:192.168.0.151。那么服務器通過x-forwarded-for獲取到的第一個ip就是用戶偽造的ip。
防止偽造方案:
情況1: 在只有1層nginx代理的情況下,設置nginx配置“proxy_set_header X-Forwarded-For $remote_addr;”。(此時$remote_addr獲取的是用戶的真是ip)
情況2:在有多層反向代理的情況下,1)設置“最外層”nginx配置和情況1一樣“proxy_set_header X-Forwarded-For $remote_addr;”。2)除了最外層之外的nginx配置“proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;”。
這樣就防止了用戶通過偽造請求頭來偽造真實ip。后台只需要從x-forwarded-for請求頭中取出第一個ip就是用戶的真實ip。后面如果有多個ip,就是反向代理的ip
同理:X-Real-IP也差不多。不同的是當只有1層nginx代理情況下只需配置“proxy_set_header X-Real-IP $remote_addr;”即可。當有多層反向代理時,只能在最外層代理設置“proxy_set_header X-Real-IP $remote_addr;”,如果在非最外層設置,則獲取到的是反向代理機器的ip