Nginx 教程- 获取真实IP模块 - http_realip_module
有這么一情況,某網站靜態文件很多,而且用戶訪問的來源有網通,有電信,有鐵通...設置還有國外。
為了令處于不同網絡運營商的用戶收取靜態文件的速度都有良好的體現,該網站分別在這些不同運營商的積分中部署了Squid,然后統一 Proxy 到主站的 Nginx 上,形成分布式緩存架構。
如果單是這樣的話,主站上 Nginx 的日志,或者應用所獲得的IP來源,始終都只會是各個機房中 Squid 的IP。而不是用戶的真實IP。Apache 的話,能通過以上所提到的mod_rpaf解決。當然,強大的 Nginx 也有自己的看家法寶。
Nginx 有個在編譯時默認不加載的模塊 http_realip_module ,就是用來實現這一功能。
 但網上很多作者對這一模塊的理解完全錯誤,以為是 Proxy 參數里頭的 proxy_set_header 。
proxy_set_header 用于向后端轉發 IP head,這一參數是位于 proxy_module ?模塊中的,而并非 http_realip_module .
 好多的博主寫文章的時候,都把這模塊的用途寫成了“為后端應用提供 realip ”
Nginx 官方 wiki 對于該模塊的說明?http://wiki.nginx.org/NginxHttpRealIpModule
“It is useful if nginx works behind some proxy of L7 load balanver, and request come from local IP, but proxy add request header with client's IP.
This module isn't built by default, enable it with the configure option ”
說簡單了,就是 Nginx 的 http_realip_module = Apache 的 mod_rpaf 用于接受前端發來的 IP head 信息,從獲取到真是的用戶IP。
配置方式相當簡單,重新編譯 Nginx 加上 --with-http_realip_module 參數,如:
./configure --prefix=/opt/nginx --with-http_stub_status_module? --with-pcre=../pcre-6.6 --with-http_realip_module
 make
 make install
怎么?Nginx 的服務正在跑著?要重啟不容易?
 簡單,原來你的 Nginx 裝在哪,重新編譯的時候就選哪,直接 make install 進去就會把原來的覆蓋掉。
然后執行 Killall -s USR2 nginx 即可平滑升級。
 編輯 Nginx.conf
在 location 里頭插入
set_real_ip_from?? 192.168.1.0/24;???? 指定接收來自哪個前端發送的 IP head 可以是單個IP或者IP段
 set_real_ip_from?? 192.168.2.1;??
 real_ip_header???? X-Real-IP;???????? IP head? 的對應參數,默認即可。
配置跟 mod_rpaf??大致相同!
配置完成后 sbin/nginx -t 測試語法
 測試無誤執行 Killall -s HUP nginx 平滑加載配置。
這么就無間斷完成了Nginx這一模塊的加載。
本文轉自 zhegaozhouji 51CTO博客,原文鏈接:http://blog.51cto.com/1038741/1736090
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的Nginx 教程- 获取真实IP模块 - http_realip_module的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: git提交规范
- 下一篇: Linux CentOS 7下 Apac
