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