Nginx 多級代理環境下直接獲取真實客戶的IP地址

 

前陣子因爲需求在集羣web中爲使用者開闢一個自定義變量爲客戶的真實IP地址.一般Nginx 直接使用X-Forwarded-For 即可獲取到真實訪問者的IP.

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

這個X-Forwarded-For會疊加之前分節點IP,若要獲取到單純的訪問者IP還需要手動處理比較麻煩.這裏有另外一個思路,使用自定義變量傳遞真實訪問者的IP.

在Nginx集羣中配置自定義變量True-ip

proxy_set_header   Ture-ip    $ture-ip;           

proxy_set_header   Ture-ip    $remote_addr;

重啓集羣nginx後,源站日誌中測試直接調用$true-ip 即是來訪者的真正IP.

 

這裏遇到的問題有:
    1. proxy_set_header   Ture-ip    $ture-ip; 這個變量賦值時第二個字段不可以使用_

    2.遵照這個配置順序是nginx[源站]最終接受變量的真實IP

    3.如果後端是第三方程序分析[如:java php lu ruby等]接受需要把這個賦值順序顛倒即:

       proxy_set_header   Ture-ip    $remote_addr;

       proxy_set_header   Ture-ip    $ture_ip;  

 

 

nginx爲源站測試直接訪問/一級中轉訪問/二級中轉訪問皆是用戶的真實IP

  #一級二級中轉爲squid時最終變量無效

  #一級squid二級nginx變量仍會獲得真實IP

  #squid暫時未測得有效變量request_header_add Ture-ip "%>a" all

 

log_format testlog'$http_ture_ip - - $time_iso8601 "$request_method$scheme://$host$request_uri $server_protocol" $status $bytes_sent"$http_referer" "$http_user_agent"$upstream_cache_status:TCP $request_length $request_time$upstream_response_time $server_addr';

 

參考          

$http_x_real_ip


   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章