天翼雲增強型彈性負載均衡ELB轉發流量至nginx后無法獲取客戶端真實ip


如何獲取來訪者的真實IP?

1、nginx需要安裝http_realip_module模塊

wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar zxvf nginx-1.17.0.tar.gz
cd nginx-1.17.0
./configure --user=www --group=www --prefix=/path/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
make
make install
kill -USR2 `cat /path/server/nginx/logs/nginx.pid`
kill -QUIT `cat /path/server/nginx/logs/ nginx.pid.oldbin`

2、編輯nginx配置文件

vi /path/server/nginx/conf/nginx.conf
在http或者server處,需要添加的配置字段和信息:
set_real_ip_from 100.125.0.0/16;
real_ip_header X-Forwarded-For;

添加配置字段如下所示

[root@web_server_01 conf.d]# cat default.conf 
server {


    listen      443 default ssl;
    server_name  localhost;

    set_real_ip_from 100.125.0.0/16;
    real_ip_header X-Forwarded-For;

3、重啟nginx

nginx -s reload

4、查看Nginx的訪問日志,您可以獲取真實的來訪者IP。

四層服務

注意:針對四層(TCP協議)服務,需要配置TOA插件獲取。需要配置TOA插件獲取。

操作場景

ELB可以針對客戶訪問的業務為訪問者提供個性化的管理策略,制定策略之前需要獲取來訪者的真實IP。TOA內核模塊主要用來獲取ELB轉化過的訪問者真實IP地址(僅支持IPv4),該插件安裝在ELB后端服務器。

當客戶需要在操作系統中編譯TOA內核模塊時,可參考本文檔進行配置。

Linux內核版本為2.6.32和Linux內核版本為3.0以上的操作系統,在配置TOA內核模塊的操作步驟上有所區別,具體操作請參照相應的操作步驟進行配置。

前提條件
編譯內核模塊開發環境需與當前內核版本開發環境一致。
確保虛擬機可以訪問開放源。
如果是非root用戶,需擁有sudo權限。
操作步驟
以下操作步驟是針對Linux內核版本為3.0以上的操作系統。
准備編譯環境。
說明: 
安裝內核模塊開發包的過程中,如果源里面找不到對應內核版本的安裝包,需要自行去網上下載需要的安裝包。

以下是不同Linux發行版本的操作說明,請根據環境選擇對應的方案。

CentOS環境下的操作步驟。
執行如下命令,安裝gcc編譯器。
sudo yum install gcc

執行如下命令,安裝make工具。
sudo yum install make

執行如下命令,安裝內核模塊開發包,開發包頭文件與庫的版本需要與內核版本一致。
sudo yum install kernel-devel-`uname -r`

說明: 
如果自帶源里沒有對應的內核開發包,可以到如下地址中去下載對應的rpm包。

地址:https://mirror.netcologne.de/oracle-linux-repos/ol7_latest/getPackage/

以3.10.0-693.11.1.el7.x86_64為例,下載后執行以下命令安裝:

rpm -ivh kernel-devel-3.10.0-693.11.1.el7.x86_64.rpm。

 2、編譯內核模塊

編譯內核模塊
使用git工具,執行如下命令,下載TOA內核模塊源代碼。
git clone https://github.com/Huawei/TCP_option_address.git

說明: 
如果未安裝git工具,請進入以下鏈接下載TOA模塊源代碼。

https://github.com/Huawei/TCP_option_address

執行如下命令,進入源碼目錄,編譯模塊。
cd src

make

編譯過程未提示warning或者error,說明編譯成功,檢查當前目錄下是否已經生成toa.ko文件。

說明: 
如果報錯提示“config_retpoline=y but not supported by the compiler, Compiler update recommended”,表明gcc版本過老,建議將gcc升級為較新版本

加載內核模塊
執行如下命令,加載內核模塊。
sudo insmod toa.ko

執行如下命令,驗證模塊加載情況,查看內核輸出信息。
dmesg | grep TOA

若提示信息包含“TOA: toa loaded”,說明內核模塊加載成功。

說明: 
CoreOS在容器中編譯完內核模塊后,需要將內核模塊復制到宿主系統,然后在宿主系統中加載內核模塊。由於編譯內核模塊的容器和宿主系統共享/lib/modules目錄,可以在容器中將內核模塊復制到該目錄下,以供宿主系統使用。

 推薦常用rpm包搜索網站:http://rpm.pbone.net/

這時候再次查看nginx日志,則可以正常獲取到真實訪問的ip地址

參考:https://support.huaweicloud.com/elb_faq/elb_faq_0090.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM