全部產品
Search
文件中心

Global Accelerator:保持用戶端源IP

更新時間:Aug 12, 2025

通過GA加速應用服務時,若需要擷取用戶端真實IP地址,您可以啟用GA的保持用戶端源IP功能。使用七層監聽時,可通過HTTP要求標頭的X-Forwarded-For欄位擷取用戶端真實IP地址;使用四層監聽時,根據後端服務類型的不同,支援自動擷取或需要適配Proxy Protocol來擷取用戶端真實IP地址。

說明

僅智能路由類型監聽支援保持用戶端源IP;自訂路由類型監聽預設不支援,如需保持用戶端源IP,請向商務經理申請。

HTTP或HTTPS監聽

擷取方式

通過保持用戶端源IP功能擷取。該功能預設開啟。

GA將用戶端真實IP儲存在HTTP要求標頭的X-Forwarded-For欄位中,後端伺服器進行相應配置後即可擷取。第一個IP即為用戶端真實IP。

X-Forwarded-For: <用戶端真實IP, Proxy 伺服器1-IP, Proxy 伺服器2-IP, ...>

操作步驟

本文後端伺服器以Alibaba Cloud Linux 3作業系統、Nginx 1.20.1版本配置為例介紹。具體請以您實際使用的環境為準。

  1. 在伺服器執行nginx -V | grep http_realip_module命令,檢查Nginx伺服器是否安裝了http_realip_module模組。Nginx使用http_realip_module模組解析X-Forwarded-For記錄。

    如果返回資訊中包括--with-http_realip_module,表示已安裝http_realip_module模組,可進行下一步。

    已安裝http_realip_module模組返回資訊樣本

    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    
    說明
    • Nginx 1.0.4 版本(2011年)開始支援http_realip_module 模組。如果您使用的Nginx版本過老,建議您備份配置資料並升級Nginx版本。

    • 如果未安裝http_realip_module模組,需要重新編譯安裝Nginx並安裝http_realip_module 模組。操作較為繁瑣,建議您使用類似yum的包管理器安裝Nginx。

  2. 修改Nginx服務組態檔並儲存,修改點可參考下方說明。執行nginx -t命令查看設定檔所在路徑,預設通常為 /etc/nginx/nginx.conf,具體請以實際環境為準。

    http {
      # 確保設定$http_x_forwarded_for,該變數用於記錄X-Forwarded-For的值
      log_format  main  '$remote_addr- $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      
      # ...
    }
    

  3. 執行sudo nginx -s reload命令,重新載入Nginx設定檔。

  4. 擷取用戶端真實IP。

    您可以通過檢查Nginx日誌來判斷是否成功擷取到了用戶端的真實IP地址。

    執行tail -n <指定返回日誌條數> <日誌路徑>命令,在返回的日誌資訊中查看$http_x_forwarded_for變數對應的欄位,第一個IP地址即為用戶端源IP。

    本文中,使用Nginx記錄檔預設路徑:/var/log/nginx/access.log

    HTTP XFF 日誌.png

    說明

    如果您為Global Acceleration開啟了健全狀態檢查,建議每次返回多條日誌進行查看,或暫時將健全狀態檢查間隔時間範圍調大,避免包含用戶端源IP的日誌資訊被健全狀態檢查日誌資訊覆蓋。

TCP監聽

擷取方式

通過保持用戶端源IP功能擷取。該功能開啟後,需要選擇擷取用戶端真實IP方式。

後端服務類型不同,支援的擷取方式有所差異。

  • 自動擷取:直接透傳用戶端源IP,後端伺服器擷取到的用戶端IP即為真實IP地址。

  • Proxy Protocol:後端伺服器需要適配Proxy Protocol,方可擷取用戶端真實IP地址。

    什麼是Proxy Protocol?

    Proxy Protocol是一種通訊協定,用於在Proxy 伺服器和後端伺服器之間傳遞用戶端的原始網路連接資訊。

    通常情況下,Proxy 伺服器在轉寄用戶端請求到後端伺服器時會重寫要求標頭部,將用戶端的源IP地址和連接埠等資訊替換為Proxy 伺服器自身的資訊。這樣後端伺服器就無法獲得用戶端的真實網路連接資訊。

    而使用Proxy Protocol,Proxy 伺服器在轉寄請求時將用戶端的原始網路連接資訊封裝在要求標頭部中,發送給後端伺服器。後端伺服器通過解析Proxy Protocol頭部,就可以獲得用戶端的真實網路連接資訊,包括源IP地址、源連接埠以及傳輸協議等。

    通過使用Proxy Protocol,後端伺服器可以準確擷取用戶端的原始網路連接資訊,從而進行更準確的日誌記錄、存取控制、流量監控等操作。

    重要
    • 注意Proxy Protocol需要Proxy 伺服器和後端伺服器都支援該協議才能正常使用。如果後端伺服器不具備解析Proxy Protocol協議能力,直接開啟特性開關,很可能會導致後端服務解析異常,從而影響服務可用性。

    • GA監聽支援通過Proxy Protocol攜帶原始串連資訊(源IP、目的IP、源連接埠、目的連接埠等)並添加到TCP資料頭中,且不會丟棄或覆蓋任何原有資料。

    • GA僅支援Proxy Protocol v1版本。Proxy Protocol v1版本僅支援TCP協議,更多資訊,請參見The PROXY protocol

後端服務部署在阿里雲

後端服務類型

是否支援擷取用戶端源IP

對應擷取方式

ECS

支援

但必須為專用網路類型,且ECS所在安全性群組需放通所有用戶端源IP。

  • 自動擷取

  • Proxy Protocol

ALB

不支援

不涉及

NLB

支援

  • 自動擷取(僅當NLB執行個體後端伺服器類型為ECS或ENI時支援)

  • Proxy Protocol

CLB

支援

但需要CLB的後端伺服器所在安全性群組放通所有用戶端源IP。

請注意在以下情形中,後端伺服器無法擷取用戶端源IP:

  • 您的CLB執行個體的後端伺服器為傳統網路類型的ECS執行個體。

  • 您的CLB執行個體的監聽協議為HTTP或HTTPS。

  • 自動擷取(僅當CLB執行個體後端伺服器類型為ECS或ENI時支援)

  • Proxy Protocol

OSS

不支援

不涉及

ENI

支援

但需要ENI所在安全性群組放通所有用戶端源IP。

  • 自動擷取

  • Proxy Protocol

自訂私網IP

支援

Proxy Protocol

阿里雲公網IP

警告

當終端節點為阿里雲公網IP時,如果該公網IP解除綁定原有執行個體並重新綁定至其他執行個體,可能會導致保持用戶端源IP的能力失效,並造成流量中斷。為恢複該終端節點保持用戶端源IP的能力,您可以刪除並重建相應的終端節點,或者聯絡商務經理協助處理。

綁定專用網路類型ECS執行個體

支援

  • 自動擷取

  • Proxy Protocol

綁定NLB執行個體

支援

  • 自動擷取(僅當NLB執行個體後端伺服器類型為ECS或ENI時支援)

  • Proxy Protocol

綁定ALB執行個體

不支援

不涉及

綁定私網CLB執行個體

支援

  • 自動擷取(僅當CLB執行個體後端伺服器類型為ECS或ENI時支援)

  • Proxy Protocol

綁定ENI

支援

  • 自動擷取

  • Proxy Protocol

綁定公網NAT執行個體

支援

Proxy Protocol

後端服務部署在非阿里雲

後端服務類型

是否支援擷取用戶端源IP

對應擷取方式

自訂公網IP

支援

Proxy Protocol

自訂網域名

支援

說明

用戶端通過IPv6類型加速IP接入GA,或者GA與後端使用IPv6協議通訊,均需要使用Proxy Protocol來擷取用戶端真實IP地址。

操作步驟

本文後端伺服器以Alibaba Cloud Linux 3作業系統、Nginx 1.20.1版本配置為例介紹。具體請以您實際使用的環境為準。

自動擷取

  1. 開啟保持用戶端源IP。

    1. 登入Global Acceleration管理主控台

    2. 執行個體列表頁面,找到目標Global Acceleration執行個體,在操作列單擊配置監聽

    3. 監聽頁簽下,找到目標TCP監聽,在操作列單擊編輯監聽

    4. 配置監聽和協議設定精靈頁面,單擊下一步

    5. 配置終端節點設定精靈頁面,在保持用戶端源IP列表中選擇保持,然後單擊下一步

      當後端服務部署在阿里雲上時,擷取用戶端真實IP方式預設選擇為自動擷取

      image.png

    6. 組態稽核頁面,確認無誤後,單擊提交

  2. 查看Nginx服務組態檔。

    執行nginx -t命令查看設定檔所在路徑,預設通常為/etc/nginx/nginx.conf,具體請以實際環境為準。

    說明

    如果後端服務僅需要處理HTTP和HTTPS流量,則只需要確保Nginx伺服器支援http{}模組;如果後端服務還需要處理TCP流量,則需確保Nginx伺服器已支援stream{}模組。

    自Nginx 1.9.0版本起,新增了stream{}模組,但該模組並不預設安裝,需自行編譯安裝以實現對stream{}模組的支援。

    #處理HTTP流量
    http {
      # 預設配置
      log_format  main  '$remote_addr- $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      access_log  /var/log/nginx/access.log  main;
      
      # 以80監聽連接埠為例
      server {
            listen 80;
            #...
           }
    }
    
    #處理TCP流量(可按需增加)
    stream {
        log_format main_stream '$remote_addr - [$time_local] '
                            '"$protocol" $status $bytes_sent $bytes_received '
                            '"$session_time"';
    
        access_log  /var/log/nginx/stream_access.log  main_stream;
    # 以4000監聽連接埠為例
        server {
            listen 4000;
            #...
        }
    }
  3. 擷取用戶端源IP。

    • 方式1:您可以通過檢查Nginx日誌來判斷是否成功擷取到了用戶端的真實IP地址。

      執行tail -n <指定返回日誌條數> <日誌路徑>命令,在返回的日誌資訊中查看第一個IP地址($remote_addr變數對應的欄位),即為用戶端源IP。

      • 對於HTTP流量:

        本文情境中,記錄檔路徑為:/var/log/nginx/access.logTCP 透傳IP 日誌.png

      • 對於TCP流量:

        本文情境中,記錄檔路徑為:/var/log/nginx/stream_access.log

        TCP流量 自動擷取 日誌

    • 方式2:您可以通過抓取資料包來判斷是否成功擷取到了用戶端的真實IP地址。

      執行tcpdump tcp port [監聽連接埠] -n -X -s 0命令,從抓取的資料包中查看用戶端真實IP地址。

      TCP流量 自動擷取 抓包

通過Proxy Protocol擷取

  1. 開啟保持用戶端源IP。

    1. 登入Global Acceleration管理主控台

    2. 執行個體列表頁面,找到目標Global Acceleration執行個體,在操作列單擊配置監聽

    3. 監聽頁簽下,找到目標TCP監聽,在操作列單擊編輯監聽

    4. 配置監聽和協議設定精靈頁面,單擊下一步

    5. 配置終端節點設定精靈頁面,在保持用戶端源IP頁簽下選擇保持,然後單擊下一步

      當後端服務部署在非阿里雲上時,擷取用戶端真實IP方式預設選擇為ProxyProtocol

      開啟保持用戶端源IP

    6. 組態稽核頁面,確認無誤後,單擊提交

  2. 修改Nginx服務組態檔並儲存,修改點可參考下方說明。

    執行nginx -t命令查看設定檔所在路徑,預設通常為 /etc/nginx/nginx.conf,具體請以實際環境為準。

    說明

    如果後端服務僅需要處理HTTP和HTTPS流量,則只需要確保Nginx伺服器支援http{}模組;如果後端服務還需要處理TCP流量,則需確保Nginx伺服器已支援stream{}模組。

    自Nginx 1.9.0版本起,新增了stream{}模組,但該模組並不預設安裝,需自行編譯安裝以實現對stream{}模組的支援。

    #處理HTTP流量
    http {
      #確保在http{}模組的日誌格式中添加儲存用戶端源IP的變數$proxy_protocol_addr
      log_format  main  '$proxy_protocol_addr - $remote_addr- $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';     
                                        
      access_log  /var/log/nginx/access.log  main;
      
      # 以80監聽連接埠為例,開啟解析proxy_protocol
      server {
        listen 80   proxy_protocol;
        #...
      }
    }
    
    #處理TCP流量(可按需增加)
    stream {
        #確保在stream{}模組的日誌格式中添加儲存用戶端源IP的變數$proxy_protocol_addr
        log_format  main_stream  '$proxy_protocol_addr - $remote_addr - $protocol [$time_local] '
                                  '$status $bytes_sent $bytes_received $session_time';
                                  
        access_log /var/log/nginx/stream_access.log main_stream; 
    
       # 以12345監聽連接埠為例,開啟解析proxy_protocol
        server {
            listen 12345 proxy_protocol;
            #...
        }
    }
  3. 執行sudo nginx -s reload命令,重新載入Nginx設定檔。

  4. 擷取用戶端源IP。

    您可以通過檢查Nginx日誌來判斷是否成功擷取到了用戶端的真實IP地址。

    執行tail -n <指定返回日誌條數> <日誌路徑>命令,在返回的日誌資訊中查看$proxy_protocol_addr變數對應的IP地址,即為用戶端源IP。

    • 對於HTTP流量:

      本文情境中,記錄檔路徑為:/var/log/nginx/access.log

      TCP PP 日誌.png

    • 對於TCP流量:

      本文情境中,記錄檔路徑為:/var/log/nginx/stream_access.log

      TCP PP 四層請求  日誌.png

UDP監聽

擷取方式

通過保持用戶端源IP功能擷取。該功能開啟後,預設僅支援自動擷取方式,GA直接透傳用戶端源IP,後端伺服器擷取到的用戶端IP即為真實IP地址。

UDP監聽開啟保持用戶端源IP,有以下限制:

  • 僅隨用隨付的GA執行個體支援。

    如果您的隨用隨付GA執行個體不支援為UDP監聽開啟保持用戶端源IP,可能是由於執行個體版本不支援。如需使用,請向商務經理申請升級執行個體。

  • 僅支援後端服務類型ECSENINLB。其中,NLB類型的保持用戶端源IP功能預設不開放,如需使用,請向商務經理申請。

  • 僅支援IPv4後端伺服器擷取IPv4用戶端源IP,IPv6後端伺服器擷取IPv6用戶端源IP。

操作步驟

本文後端伺服器以Alibaba Cloud Linux 3作業系統、Nginx 1.20.1版本配置為例介紹。具體請以您實際使用的環境為準。

  1. 開啟保持用戶端源IP。

    1. 登入Global Acceleration管理主控台

    2. 執行個體列表頁面,找到目標Global Acceleration執行個體,在操作列單擊配置監聽

    3. 監聽頁簽下,找到目標UDP監聽,在操作列單擊編輯監聽

    4. 配置監聽和協議設定精靈頁面,單擊下一步

    5. 配置終端節點設定精靈頁面,在保持用戶端源IP頁簽下選擇保持,然後單擊下一步

      此時,擷取用戶端真實IP方式預設選擇為自動擷取

      UDP開啟保持用戶端源IP

    6. 組態稽核頁面,確認無誤後,單擊提交

  2. 查看Nginx服務組態檔。

    執行nginx -t命令查看設定檔所在路徑,預設通常為/etc/nginx/nginx.conf,具體請以實際環境為準。

    說明

    後端服務處理UDP流量,需確保Nginx伺服器已支援stream{}模組。

    自Nginx 1.9.0版本起,新增了stream{}模組,但該模組並不預設安裝,需自行編譯安裝以實現對stream{}模組的支援。

    #...
    
    #處理UDP流量(請確保包括該模組)
    stream {
        log_format main_stream '$remote_addr - [$time_local] '
                            '"$protocol" $status $bytes_sent $bytes_received '
                            '"$session_time"';
    
        access_log  /var/log/nginx/stream_access.log  main_stream;
    # 以UDP 4000監聽連接埠為例
        server {
            listen 4000 udp;
            #...
        }
    }
  3. 擷取用戶端源IP。

    • 方式1:您可以通過檢查Nginx日誌來判斷是否成功擷取到了用戶端的真實IP地址。

      執行tail -n <指定返回日誌條數> <日誌路徑>命令,在返回的日誌資訊中查看第一個IP地址($remote_addr變數對應的欄位),即為用戶端源IP。

      本文情境中,記錄檔路徑為:/var/log/nginx/stream_access.log

      UDP流量 自動擷取 日誌

    • 方式2:您可以通過抓取資料包來判斷是否成功擷取到了用戶端的真實IP地址。

      執行tcpdump udp port [監聽連接埠] -n -X -s 0命令,從抓取的資料包中查看用戶端真實IP地址。

      UDP流量 自動擷取 抓包

常見問題

保持用戶端源IP功能開啟後不生效,可能是哪些原因?

  • HTTP或HTTPS監聽下,如果後端伺服器不支援記錄和處理X-Forwarded-For欄位,則開啟保持用戶端源IP功能後不生效。

  • TCP監聽下:

    • 後端服務部署地為阿里雲時,如果後端執行個體或阿里雲公網IP綁定執行個體不是專用網路類型執行個體,則開啟保持用戶端源IP功能後不生效。

    • 後端服務部署地為非阿里雲時, 需要後端伺服器支援解析Proxy Protocol,才能擷取到用戶端源IP資訊,否則不生效。

      因為在您開啟保持用戶端源IP功能的情況下,Global Acceleration會使用Proxy Protocol保持用戶端源IP,如果您的後端伺服器不支援解析Proxy Protocol,則會導致後端伺服器無法正確解析加速流量。

    • 用戶端使用IPv6地址訪問後端的IPv4服務時,需要後端伺服器支援解析Proxy Protocol,才能擷取到用戶端源IP資訊,否則不生效。

  • UDP監聽下,如果用戶端使用IPv6地址訪問後端的IPv4服務時,則開啟保持用戶端源IP功能後不生效。

如何關閉保持用戶端源IP功能?

對於HTTP或HTTPS監聽,預設開啟保持用戶端源IP功能,無法關閉。

對於TCP及UDP監聽,您可以直接在控制台進行關閉。操作步驟如下:

  1. 執行個體列表頁面,找到目標Global Acceleration執行個體,在操作列單擊配置監聽

  2. 監聽頁簽下,找到目標監聽,在操作列單擊編輯監聽

  3. 配置監聽和協議設定精靈頁面,單擊下一步

  4. 配置終端節點設定精靈頁面,配置保持客戶端源IP不保持,然後單擊下一步

  5. 組態稽核設定精靈頁面,確認無誤後,單擊提交

Global AccelerationIPv6轉換IPv4時如何擷取用戶端源IP?

  • 針對HTTP或HTTPS監聽:IPv6用戶端與IPv4用戶端均僅支援通過HTTP要求標頭的X-Forwarded-For欄位擷取用戶端源IP。

  • 針對TCP監聽:IPv6用戶端僅支援ProxyProtocol方式。ProxyProtocol方式需要後端伺服器支援解析Proxy Protocol,才能擷取到用戶端源IP資訊,否則訪問會失敗。

  • 針對UDP監聽:不支援擷取IPv6用戶端源IP。

相關文檔

控制台操作文檔

API文檔

您可以在調用以下API時,通過參數EnableClientIPPreservation(自動擷取方式)和EnableProxyProtocol(ProxyProtocol 方式)配置擷取用戶端真實IP的方式。