歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Nginx獲取真實IP模塊 - http

Nginx獲取真實IP模塊 - http

日期:2017/2/27 16:01:59   编辑:Linux教程
有這麼一情況,某網站靜態文件很多,而且用戶訪問的來源有網通,有電信,有鐵通...設置還有國外。

為了令處於不同網絡運營商的用戶收取靜態文件的速度都有良好的體現,該網站分別在這些不同運營商的積分中部署了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這一模塊的加載。
Copyright © Linux教程網 All Rights Reserved