nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP
ngx_http_realip_module模塊
realip模塊作用:當本機的nginx處于反向代理的后端時可以獲取到用戶的真實ip。可以讓accesslog記錄用戶真實IP地址。
set_real_ip_from IP1; real_ip_header X-Forwarded-For; real_ip_recursive on;- set_real_ip_from —— 設置反向代理服務器,即信任服務器IP
- real_ip_header X-Forwarded-For —— 用戶真實IP存在X-Forwarded-For請求頭中
- real_ip_recursive
- off —— 會將real_ip_header指定的HTTP頭中的最后一個IP作為真實IP
- on —— 會將real_ip_header指定的HTTP頭中的最后一個不是信任服務器的IP當成真實IP
參考
http頭中的X-Forwarded-For(XFF)和X-Real-IP、Remote Address
XFF位于HTTP請求頭,是HTTP的擴展header,已經是事實上的標準。
X-Forwarded-For用于表示HTTP請求端真實IP。
格式如下:
nginx代理一般配置
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $remote_addr; #不合理,nginx之前的代理信息都被抹掉說明:
1、X-Forwarded-For:最后一節是nginx追加上去的,但前面部分來源于nginx收到的請求頭,這部分內容完全不可信。符合IP格式的才可以使用,否則容易引發XSS或者SQL注入漏洞。
2、Remote Address:HTTP協議沒有IP的概念,Remote Address來自于TCP連接,表示與服務端建立TCP連接的設備IP,因此,Remote Address無法偽造。
3、X-Real-IP:HTTP代理用于表示與它產生TCP連接的設備IP,可能是其他代理,也可能是真正的請求端。
結論:
1、直接對外提供服務的web應用,在進行與安全有關的操作的時候,只能通過Remote Address獲取IP,不能相信任何請求頭。
2、使用nginx等web server進行反向代理的web應用,要使用X-Forwarded-For的最后一節或者 X-Real-IP來獲取IP,同時還應該進行web應用直接對外提供服務。
3、在與安全無關的場景,可以通過 X-Forwarded-For的靠前位置獲取IP,但是需要校驗IP的合法性。
更多專業前端知識,請上 【猿2048】www.mk2048.com
總結
以上是生活随笔為你收集整理的nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wijmo 更优美的jQuery UI部
- 下一篇: APP网络测试要点和弱网模拟