當前是客戶端登入軟體後台獲取不到客戶的真實ip而是雲盾的**
ip為了獲取到真實ip後來發現通過配置
nginx
的read_ip
模組就可以了
當nginx處在
haproxy
後面時,就會把
remote_addr
設為haproxy的ip
,這個值其實是毫無意義的,可以通過
nginx
的realip
模組,讓它使用
x_forwarded_for
裡的值。使用這個模組需要重新編譯
nginx
,增加--with-http_realip_module
引數目前系統版本,及已有的模組(安裝新模組時這些需要重新編譯)
nginx安裝目錄放在了/usr/local/目錄下
編譯安裝新模組時--with-http_realip_module(訪問
nginx
是可以得到真實客戶真實ip)
安裝只要make就行,不要
make install
2,備份原nginx下的
sbin/nginx
二進位制檔案,把新生成的移過去
編譯之後目錄下會有乙個objs的目錄,新的
nginx
二進位制檔案就在此目錄下
[root@web01 nginx-1.4.7]# cd objs/
cp nginx /usr/local/nginx/sbin/
之後再檢查目前的最新模組,已經有了--with-http_realip_module
3,修改配置檔案
在server下新增
set_real_ip_from 59.56.19.0/24;(**ip網段)
real_ip_header x-forwarded-for;
說明:設定ip源的時候可以設定單個
ip,也可以設定
ip段,另外是使用
x-real-ip
還是x-forwarded-for
,取決於前面的伺服器有哪個頭。我這裡設定的是
x-forwarded-for
4,重啟
nginx
[root@sweb01 vhost]# /usr/local/nginx/sbin/nginx -s stop
[root@sweb01 vhost]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
之後再次登入客戶端訪問後台就可以看到客戶的真實ip而不是**
ip解釋:
x-forwarded-for和
x-real-ip
的區別
x-forwarded-for是用於記錄**資訊的,每經過一級**(匿名**除外
),**伺服器都會把這次請求的**
ip追加在
x-forwarded-for中
x-real-ip,一般只記錄真實發出請求的客戶端ip
什麼是remote_addr
remote_addr代表客戶端的
ip,但它的值不是由客戶端提供的,而是服務端根據客戶端的
ip指定的,當你的瀏覽器訪問某個**時,假設中間沒有任何**,那麼**的
web伺服器(
nginx
,apache
等)就會把
remote_addr
設為你的機器
ip,如果你用了某個**,那麼你的瀏覽器會先訪問這個**,然後再由這個****到**,這樣
web伺服器就會把
remote_addr
設為這台**機器的ip。
什麼是x_forwarded_for
正如上面所述,當你使用了**時,web伺服器就不知道你的真實
ip了,為了避免這個情況,**伺服器通常會增加乙個叫做
x_forwarded_for
的頭資訊,把連線它的客戶端
ip(即你的上網機器
ip)加到這個頭資訊裡,這樣就能保證**的
web伺服器能獲取到真實
ip
nginx新增新模組
git clone 2.放入指定位置 mv echo nginx module master usr local src nginx 1.8.1 echo nginx module 3.檢視已編譯引數 usr local nginx sbin nginx v 結果為 4.重新編譯 ps 這裡只需要m...
nginx新增新模組
git clone 2.放入指定位置 mv echo nginx module master usr local src nginx 1.8.1 echo nginx module 3.檢視已編譯引數 usr local nginx sbin nginx v 結果為 4.重新編譯 ps 這裡只需要m...
新增新的nginx模組
說明 已經安裝好的nginx,需要新增乙個未被編譯安裝的模組,需要怎麼弄呢?具體 cd data software git clone 2.檢視nginx編譯安裝時安裝了哪些模組 可以看出編譯安裝使用了 prefix usr local nginx with http ssl module with...