精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解Nginx獲取客戶端真實IP

網絡 網絡管理
如果沒有特殊配置,Nginx 的訪問日志只能記錄到直接連接的上游設備 IP(負載均衡器或 CDN 的 IP),而不是真實用戶的 IP 地址。

為什么需要獲取真實IP

在現代 Web 架構中,為了應對大量用戶訪問,網站通常會部署在以下架構之后:

? WAF(如 Cloudflare WAF、AWS WAF)

? 負載均衡器(如 AWS ALB/ELB、阿里云 SLB)

? CDN 服務(如 Cloudflare、AWS CloudFront)

? 反向代理(如 Nginx、Apache)

因此,一個典型的客戶端請求流程如下:

真實用戶(1.2.3.4)CDN/WAF(103.x.x.x)負載均衡器(10.0.1.100)Nginx應用服務器

如果沒有特殊配置,Nginx 的訪問日志只能記錄到直接連接的上游設備 IP(負載均衡器或 CDN 的 IP),而不是真實用戶的 IP 地址。這會導致:

? 日志分析困難:無法識別真實用戶行為

? 安全防護失效:無法基于用戶 IP 進行訪問控制

? 地域限制失效:無法根據用戶地理位置提供服務

? 監控告警不準確:無法準確識別攻擊來源

技術原理

HTTP 頭部傳遞機制

負載均衡器和 CDN 通常會在 HTTP 請求頭中添加真實用戶的 IP 信息:

頭部字段

使用場景

示例

X-Forwarded-For

標準字段,大多數代理使用

X-Forwarded-For: 1.2.3.4, 172.16.1.10

X-Real-IP

簡單代理環境

X-Real-IP: 1.2.3.4

CF-Connecting-IP

Cloudflare CDN 專用

CF-Connecting-IP: 1.2.3.4

Forwarded

RFC 7239 標準

Forwarded: for=1.2.3.4;proto=https

關于上述字段的詳細介紹,可以參考:

? X-Forwarded-For

? CF-Connecting-IP

? Forwarded

? RFC 7239

連接來源 IP vs 真實客戶端 IP

連接來源 IP

? 定義:與 Nginx 建立 TCP 連接的設備 IP

? 獲取方式:通過系統調用 getpeername() 獲得

? 特點:無法被應用層偽造,是真實的網絡層信息

? 在 Nginx 中:對應 $realip_remote_addr 變量

真實客戶端 IP

? 定義:最終用戶的實際 IP 地址

? 獲取方式:從 HTTP 頭部解析

? 特點:可能被中間代理修改或偽造

? 在 Nginx 中:經過處理后的 $remote_addr 變量

核心配置指令

可以參考Nginx Real IP Module Documentation

real_ip_header

作用:指定從哪個 HTTP 頭部獲取真實 IP

# 常用配置
real_ip_header X-Forwarded-For;     # 標準配置
real_ip_header X-Real-IP;           # 簡單代理
real_ip_header CF-Connecting-IP;    # Cloudflare CDN

set_real_ip_from

作用:定義可信任的代理 IP 范圍(白名單機制)

# 基本語法
set_real_ip_from ip_address;
set_real_ip_from ip_address/netmask;
set_real_ip_from unix:;

# 實際示例
set_real_ip_from 10.0.0.0/8;        # 內網段
set_real_ip_from 172.16.0.0/12;     # 私有網絡
set_real_ip_from 192.168.1.100;     # 特定 IP

real_ip_recursive

作用:啟用遞歸處理多層代理

real_ip_recursive on;   # 啟用(推薦)
real_ip_recursive off;  # 禁用(默認)

工作機制詳解

白名單驗證機制

set_real_ip_from 采用白名單機制:

set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;

工作流程

1. 檢查連接來源 IP

2. 如果來源 IP 在白名單中 → 信任請求 → 解析 HTTP 頭部

3. 如果來源 IP 不在白名單中 → 不信任請求 → 忽略 HTTP 頭部

示例對比

來源 IP 在白名單中:

連接來源: 10.0.1.100 (? 在 10.0.0.0/8 范圍內)
X-Forwarded-For: 1.2.3.4
結果: $remote_addr = 1.2.3.4

來源 IP 不在白名單中:

連接來源: 8.8.8.8 (? 不在白名單范圍內)
X-Forwarded-For: 1.2.3.4
結果: $remote_addr = 8.8.8.8 (忽略頭部信息)

多值 X-Forwarded-For 處理算法

X-Forwarded-For 格式

X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip, proxy3_ip
                 ←────────── 從左到右:客戶端到服務器 ──────────→

非遞歸模式 real_ip_recursive off

選擇 最后一個(最右邊) IP:

set_real_ip_from 192.168.1.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive off;

# X-Forwarded-For: 1.2.3.4, 172.16.1.10, 192.168.1.50
# 選擇: 192.168.1.50

遞歸模式 real_ip_recursive on

從右到左檢查,跳過可信 IP,選擇第一個不可信 IP:

set_real_ip_from 192.168.1.0/24;    # 可信代理1
set_real_ip_from 172.16.1.0/24;     # 可信代理2
real_ip_header X-Forwarded-For;
real_ip_recursive on;

# X-Forwarded-For: 1.2.3.4, 172.16.1.10, 192.168.1.50
# 處理過程:
# 1. 檢查 192.168.1.50 → 可信,跳過
# 2. 檢查 172.16.1.10 → 可信,跳過
# 3. 檢查 1.2.3.4 → 不可信,選擇
# 結果: $remote_addr = 1.2.3.4

不同匹配程度的處理邏輯

假設 X-Forwarded-For: 1.2.3.4, 203.0.113.5, 172.16.1.10,連接來源為 172.16.1.10:

情況1:只匹配最后一個

set_real_ip_from 172.16.0.0/12;  # 只信任 172.16.1.10
# 處理: 172.16.1.10(跳過) → 203.0.113.5(選擇)
# 結果: $remote_addr = 203.0.113.5

情況2:匹配最后兩個

set_real_ip_from 172.16.0.0/12;  # 信任 172.16.1.10
set_real_ip_from 203.0.113.0/24; # 信任 203.0.113.5
# 處理: 172.16.1.10(跳過) → 203.0.113.5(跳過) → 1.2.3.4(選擇)
# 結果: $remote_addr = 1.2.3.4

情況3:全部匹配

set_real_ip_from 172.16.0.0/12;  # 信任 172.16.1.10
set_real_ip_from 203.0.113.0/24; # 信任 203.0.113.5
set_real_ip_from 1.2.3.0/24;     # 信任 1.2.3.4
# 處理: 所有IP都可信 → 選擇最左邊的IP
# 結果: $remote_addr = 1.2.3.4

除了上述情況,還有其他情況,比如:

情況4:連接來源不可信,也就是沒有任何一個IP在可信列表中

set_real_ip_from 172.16.0.0/12;  # 信任 172.16.1.10
# 但連接來源是: 8.8.8.8 (不在可信列表中)
# X-Forwarded-For: 1.2.3.4, 203.0.113.5, 172.16.1.10
# 處理: 連接來源不可信 → 完全忽略 X-Forwarded-For 頭部
# 結果: $remote_addr = 8.8.8.8

實際場景配置

AWS ALB/ELB 環境

http {
    # AWS ALB 通常使用 VPC 內網 IP
    set_real_ip_from10.0.0.0/8;
    set_real_ip_from172.16.0.0/12;
    set_real_ip_from192.168.0.0/16;
    
    real_ip_header X-Forwarded-For;
    real_ip_recursiveon;
    
    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    server {
        listen80;
        access_log /var/log/nginx/access.log main;
        
        location / {
            # 應用邏輯
        }
    }
}

Cloudflare CDN 環境

http {
    # Cloudflare IP 段(需要定期更新)
    set_real_ip_from173.245.48.0/20;
    set_real_ip_from103.21.244.0/22;
    set_real_ip_from103.22.200.0/22;
    set_real_ip_from103.31.4.0/22;
    set_real_ip_from141.101.64.0/18;
    set_real_ip_from108.162.192.0/18;
    set_real_ip_from190.93.240.0/20;
    set_real_ip_from188.114.96.0/20;
    set_real_ip_from197.234.240.0/22;
    set_real_ip_from198.41.128.0/17;
    
    # 使用 Cloudflare 專用頭部
    real_ip_header CF-Connecting-IP;
    real_ip_recursiveon;
    
    server {
        listen80;
        
        # 獲取用戶國家信息(Cloudflare 提供)
        location / {
            add_header X-Country-Code $http_cf_ipcountry;
            # 應用邏輯
        }
    }
}

混合環境(CDN + 負載均衡器)

http {
    # CDN 層 IP 段
    set_real_ip_from103.21.244.0/22;   # Cloudflare
    set_real_ip_from104.16.0.0/12;     # Cloudflare
    
    # 負載均衡器層
    set_real_ip_from10.0.0.0/8;        # AWS VPC
    set_real_ip_from172.31.0.0/16;     # AWS Default VPC
    
    # 內網代理層
    set_real_ip_from192.168.100.0/24;  # 內網代理
    
    real_ip_header X-Forwarded-For;
    real_ip_recursiveon;
    
    # 詳細日志格式
    log_format detailed '$realip_remote_addr forwarded $remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
    
    server {
        listen80;
        access_log /var/log/nginx/access.log detailed;
        
        location / {
            # 應用邏輯
        }
    }
}

內網多層代理環境

http {
    # 第一層:外部負載均衡器
    set_real_ip_from172.16.1.0/24;
    
    # 第二層:內網負載均衡器
    set_real_ip_from10.0.1.0/24;
    
    # 第三層:應用網關
    set_real_ip_from192.168.1.0/24;
    
    real_ip_header X-Forwarded-For;
    real_ip_recursiveon;
    
    server {
        listen80;
        
        # 基于真實 IP 的訪問控制
        location /admin {
            allow192.168.0.0/16;    # 允許內網訪問
            allow10.0.0.0/8;        # 允許 VPN 訪問
            deny all;
            
            # 管理接口
        }
        
        # 基于真實 IP 的限流
        location /api {
            limit_req zone=per_ip burst=10 nodelay;
            # API 接口
        }
    }
}

# 限流配置
limit_req_zone$remote_addr zone=per_ip:10m rate=10r/s;

多值處理算法

算法實現偽代碼

def nginx_select_real_ip(forwarded_for_header, trusted_proxies, recursive_mode, connection_ip):
    # 首先檢查連接來源是否可信
    if connection_ip notin trusted_proxies:
        return connection_ip  # 不可信連接,直接返回連接 IP
    
    # 解析 X-Forwarded-For 頭部
    ifnot forwarded_for_header:
        return connection_ip
    
    ips = [ip.strip() for ip in forwarded_for_header.split(',')]
    
    ifnot recursive_mode:
        # 非遞歸模式:返回最后一個 IP
        return ips[-1]
    else:
        # 遞歸模式:從右到左找第一個不可信的 IP
        for ip inreversed(ips):
            if ip notin trusted_proxies:
                return ip
        
        # 如果所有 IP 都是可信的,返回最左邊的 IP
        return ips[0]

處理示例

示例 1:標準多層代理

set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 103.21.244.0/22;
real_ip_recursive on;

這樣配置后,一個實際的舉例以及處理過程如下:

連接來源: 10.0.1.100
X-Forwarded-For: 1.2.3.4, 103.21.244.50, 172.16.1.10, 10.0.1.100

處理步驟:
1. 連接來源 10.0.1.100 ∈ 10.0.0.0/8 → 可信 ?
2. 從右到左檢查:
   - 10.0.1.100 ∈ 可信列表 → 跳過
   - 172.16.1.10 ∈ 可信列表 → 跳過
   - 103.21.244.50 ∈ 可信列表 → 跳過
   - 1.2.3.4 ? 可信列表 → 選擇 ?

結果: $remote_addr = 1.2.3.4

示例 2:惡意請求檢測

連接來源: 8.8.8.8 (不在可信列表中)
X-Forwarded-For: 1.2.3.4, 10.0.1.100

處理步驟:
1. 連接來源 8.8.8.8 ? 任何可信網段 → 不可信 ?
2. 忽略 X-Forwarded-For 頭部

結果: $remote_addr = 8.8.8.8

示例 3:邊界情況 - 所有 IP 都可信

連接來源: 10.0.1.100
X-Forwarded-For: 10.0.2.50, 172.16.1.10, 10.0.1.100

處理步驟:
1. 連接來源可信 ?
2. 從右到左檢查:
   - 10.0.1.100 ∈ 可信列表 → 跳過
   - 172.16.1.10 ∈ 可信列表 → 跳過
   - 10.0.2.50 ∈ 可信列表 → 跳過
3. 所有 IP 都可信,選擇最左邊的

結果: $remote_addr = 10.0.2.50

安全考慮

白名單精確性

# 好的做法:精確指定
set_real_ip_from 10.0.1.100;        # 特定負載均衡器
set_real_ip_from 172.16.1.0/24;     # 特定代理網段

# 危險的做法:范圍過大
set_real_ip_from 0.0.0.0/0;         # 信任所有 IP - 危險做法

定期更新 IP 列表

CDN 和云服務提供商的 IP 段會定期變化,需要及時更新:

#!/bin/bash
# 自動更新 Cloudflare IP 段的腳本

# 獲取最新的 Cloudflare IP 段
curl -s https://www.cloudflare.com/ips-v4 > /tmp/cloudflare-ips-v4.txt
curl -s https://www.cloudflare.com/ips-v6 > /tmp/cloudflare-ips-v6.txt

# 生成 Nginx 配置片段
echo"# Cloudflare IP ranges - Updated $(date)" > /etc/nginx/conf.d/cloudflare-ips.conf
whileread ip; do
    echo"set_real_ip_from $ip;" >> /etc/nginx/conf.d/cloudflare-ips.conf
done < /tmp/cloudflare-ips-v4.txt

echo"real_ip_header CF-Connecting-IP;" >> /etc/nginx/conf.d/cloudflare-ips.conf

# 測試配置并重載
nginx -t && systemctl reload nginx

多層驗證策略

http {
    # 基礎 IP 驗證
    set_real_ip_from10.0.0.0/8;
    real_ip_header X-Forwarded-For;
    real_ip_recursiveon;
    
    # 地理位置驗證(需要 GeoIP 模塊)
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    
    server {
        listen80;
        
        # 結合真實 IP 和地理位置的訪問控制
        location /admin {
            # 只允許來自特定國家的特定 IP 段
            if ($geoip_country_code != CN) {
                return403;
            }
            
            allow192.168.0.0/16;
            deny all;
        }
        
        # 異常檢測:如果 X-Forwarded-For 和連接 IP 差異過大
        location /sensitive {
            access_by_lua_block {
                local forwarded = ngx.var.http_x_forwarded_for
                local remote = ngx.var.remote_addr
                local connection = ngx.var.realip_remote_addr
                
                -- 如果存在可疑的 IP 跳轉,記錄日志
                if forwarded and remote ~= connection then
                    ngx.log(ngx.WARN, "Suspicious IP forwarding: " .. 
                           "connection=" .. connection .. 
                           " forwarded=" .. forwarded .. 
                           " final=" .. remote)
                end
            }
        }
    }
}

簡化方案:自定義真實 IP 頭部

問題分析

X-Forwarded-For 的復雜匹配邏輯確實容易出錯,特別是在多層代理環境中,我們經常聽到一個叫做 HTTP頭部偽造攻擊 的安全問題,因為攻擊者可以偽造 X-Forwarded-For 頭部來繞過IP限制

一個更簡單可靠的方案是:在架構最外層(如 WAF、CDN)設置自定義頭部。

解決方案

方案設計

客戶端(1.2.3.4)WAF/CDN負載均衡器Nginx設置X-Client-True-IP透傳讀取

外層設置(WAF/CDN 配置)

# 在 WAF 或最外層代理設置
set $client_real_ip $remote_addr;  # 獲取四層握手的真實 IP
proxy_set_header X-Client-True-IP $client_real_ip;
proxy_set_header Host $host;
proxy_pass http://backend;

Nginx 端配置(極簡)

# 簡化配置:只信任自定義頭部
set_real_ip_from 10.0.0.0/8;      # 內網代理段
set_real_ip_from 172.16.0.0/12;   # 負載均衡器段
real_ip_header X-Client-True-IP;   # 使用自定義頭部
real_ip_recursive off;             # 無需遞歸處理

方案對比

傳統 X-Forwarded-For 方案

# 復雜配置
set_real_ip_from103.21.244.0/22;  # CDN IP段1
set_real_ip_from103.22.200.0/22;  # CDN IP段2
set_real_ip_from172.16.0.0/12;    # 負載均衡器
set_real_ip_from10.0.0.0/8;       # 內網段
real_ip_header X-Forwarded-For;
real_ip_recursiveon;               # 需要遞歸處理

# 潛在問題:
# - 需要維護多個可信 IP 段
# - 復雜的遞歸匹配邏輯
# - CDN IP 段變化需要更新

自定義頭部方案

# 簡化配置
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Client-True-IP;   # 單一可信頭部
real_ip_recursive off;             # 無需復雜邏輯

調試與驗證

調試端點配置

server {
    listen80;
    
    # IP 信息調試端點
    location /debug-ip {
        return200"Connection IP: $realip_remote_addr\nProcessed IP: $remote_addr\nX-Forwarded-For: $http_x_forwarded_for\nX-Real-IP: $http_x_real_ip\nUser-Agent: $http_user_agent\n";
        add_header Content-Type text/plain;
    }
    
    # 詳細的調試信息
    location /debug-detailed {
        access_by_lua_block {
            local headers = ngx.req.get_headers()
            local info = {
                connection_ip = ngx.var.realip_remote_addr,
                processed_ip = ngx.var.remote_addr,
                forwarded_for = headers["x-forwarded-for"],
                real_ip = headers["x-real-ip"],
                cf_connecting_ip = headers["cf-connecting-ip"],
                user_agent = headers["user-agent"],
                timestamp = ngx.time()
            }
            
            ngx.header.content_type = "application/json"
            ngx.say(require("cjson").encode(info))
        }
    }
}

日志分析配置

http {
    # 詳細的日志格式
    log_format debug_ip '$time_local '
                        'connection_ip=$realip_remote_addr '
                        'processed_ip=$remote_addr '
                        'forwarded="$http_x_forwarded_for" '
                        'real_ip="$http_x_real_ip" '
                        'cf_ip="$http_cf_connecting_ip" '
                        'request="$request" '
                        'status=$status '
                        'user_agent="$http_user_agent"';
    
    server {
        access_log /var/log/nginx/debug_ip.log debug_ip;
    }
}

測試腳本

#!/bin/bash
# 測試真實 IP 獲取的腳本

NGINX_HOST="your-nginx-server.com"
TEST_ENDPOINT="/debug-ip"

echo"=== 測試 1: 直接訪問 ==="
curl -H "X-Forwarded-For: 1.2.3.4" http://$NGINX_HOST$TEST_ENDPOINT

echo -e "\n=== 測試 2: 多層代理模擬 ==="
curl -H "X-Forwarded-For: 1.2.3.4, 172.16.1.10, 10.0.1.100" http://$NGINX_HOST$TEST_ENDPOINT

echo -e "\n=== 測試 3: 惡意偽造檢測 ==="
curl -H "X-Forwarded-For: 192.168.1.1" http://$NGINX_HOST$TEST_ENDPOINT

echo -e "\n=== 測試 4: 無頭部信息 ==="
curl http://$NGINX_HOST$TEST_ENDPOINT

監控腳本

#!/bin/bash
# 監控真實 IP 獲取異常的腳本

LOG_FILE="/var/log/nginx/access.log"
ALERT_THRESHOLD=100

# 檢查可疑的 IP 跳轉
suspicious_count=$(tail -10000 $LOG_FILE | grep -c "forwarded.*differ")

if [ $suspicious_count -gt $ALERT_THRESHOLD ]; then
    echo"ALERT: Detected $suspicious_count suspicious IP forwarding in recent logs"
    # 發送告警
fi

# 檢查 IP 地理位置異常
geoip_anomaly=$(tail -10000 $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr | head -10)
echo"Top IP addresses by frequency:"
echo "$geoip_anomaly"

最佳實踐

生產環境標準配置

http {
    # 真實 IP 獲取配置
    include /etc/nginx/conf.d/real-ip.conf;
    
    # 限流配置
    limit_req_zone$remote_addr zone=per_ip:10m rate=10r/s;
    limit_req_zone$server_name zone=per_server:10m rate=100r/s;
    
    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    log_format security '$time_local $remote_addr $realip_remote_addr '
                        '"$request" $status "$http_user_agent"';
    
    server {
        listen80;
        server_name example.com;
        
        access_log /var/log/nginx/access.log main;
        access_log /var/log/nginx/security.log security;
        
        # 安全頭部
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-XSS-Protection "1; mode=block" always;
        
        # 基于真實 IP 的限流
        limit_req zone=per_ip burst=20 nodelay;
        
        location / {
            # 應用邏輯
        }
        
        # 管理接口訪問控制
        location /admin {
            allow192.168.0.0/16;
            allow10.0.0.0/8;
            deny all;
            
            # 管理功能
        }
    }
}

真實 IP 配置文件

可單獨放置一個文件/etc/nginx/conf.d/real-ip.conf

# 內網 IP 段
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;

# 云服務商 IP 段(需要定期更新)
include /etc/nginx/conf.d/cloudflare-ips.conf;
include /etc/nginx/conf.d/aws-ips.conf;

# 配置真實 IP 頭部
real_ip_header X-Forwarded-For;
real_ip_recursive on;

常見問題

配置后仍然顯示代理 IP ?

可能原因:

1. 代理 IP 不在 set_real_ip_from 范圍內

2. HTTP 頭部字段名稱不匹配

3. Nginx 配置未生效

解決方案:

# 1. 檢查連接來源 IP
curl -H "X-Forwarded-For: 1.2.3.4" http://your-server/debug-ip

# 2. 驗證配置語法
nginx -t

# 3. 重載配置
nginx -s reload

# 4. 檢查錯誤日志
tail -f /var/log/nginx/error.log

如何處理 IPv6 地址 ?

# IPv6 地址配置
set_real_ip_from 2001:db8::/32;
set_real_ip_from ::1;

# 混合 IPv4/IPv6 環境
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 2001:db8::/32;
real_ip_header X-Forwarded-For;

使用 X-Real-IP 能否正確獲取真實 IP ?

X-Real-IP 和 X-Forwarded-For 的行為不同,需要了解其特點:

X-Real-IP 的特點

? 單值頭部:只包含一個 IP,不像 X-Forwarded-For 包含多個

? 設置方:通常由簡單的反向代理或某些負載均衡器設置

? 標準化程度:相比 X-Forwarded-For 標準化程度較低

實際效果對比

假設請求鏈路:用戶(1.2.3.4) → CDN(103.x.x.x) → ALB(10.0.1.100) → Nginx

如果 ALB 設置了:

X-Real-IP: 1.2.3.4
X-Forwarded-For: 1.2.3.4, 103.21.244.50

使用 X-Real-IP:

real_ip_header X-Real-IP;
set_real_ip_from 10.0.0.0/8;
# 結果: $remote_addr = 1.2.3.4 ? 正確

使用 X-Forwarded-For(非遞歸):

real_ip_header X-Forwarded-For;
real_ip_recursive off;
set_real_ip_from 10.0.0.0/8;
# 結果: $remote_addr = 103.21.244.50 ? 拿到CDN IP

使用建議

簡單環境(推薦 X-Real-IP):

# 只有一層代理,且確認設置了 X-Real-IP
real_ip_header X-Real-IP;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive off;

復雜環境(推薦 X-Forwarded-For):

# 多層代理環境
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
real_ip_recursive on;

檢查方法

# 檢查你的環境是否設置了 X-Real-IP
curl -H "Host: your-domain.com" http://your-nginx/debug-ip

多個 real_ip_header 如何處理 ?

Nginx 只能配置一個 real_ip_header,但可以通過 Lua 腳本處理多個頭部:

location / {
    access_by_lua_block {
        -- 優先級:X-Real-IP > CF-Connecting-IP > X-Forwarded-For
        local real_ip = ngx.var.http_x_real_ip
        if not real_ip or real_ip == "" then
            real_ip = ngx.var.http_cf_connecting_ip
        end
        if not real_ip or real_ip == "" then
            local xff = ngx.var.http_x_forwarded_for
            if xff then
                real_ip = xff:match("([^,]+)")  -- 取第一個IP
            end
        end
        
        if real_ip then
            ngx.var.client_real_ip = real_ip
        end
    }
    
    proxy_set_header X-Client-IP $client_real_ip;
    proxy_pass http://backend;
}

如何驗證配置是否正確 ?

測試步驟:

1. 創建測試端點

2. 模擬不同來源的請求

3. 檢查日志輸出

4. 驗證安全策略

# 完整測試腳本
#!/bin/bash
SERVER="http://your-nginx-server.com"

echo"=== 測試真實 IP 獲取配置 ==="

echo"1. 測試直接訪問:"
curl -s "$SERVER/debug-ip" | grep -E "(Connection|Processed)"

echo -e "\n2. 測試代理轉發:"
curl -s -H "X-Forwarded-For: 203.0.113.1""$SERVER/debug-ip" | grep -E "(Connection|Processed)"

echo -e "\n3. 測試多層代理:"
curl -s -H "X-Forwarded-For: 203.0.113.1, 172.16.1.10""$SERVER/debug-ip" | grep -E "(Connection|Processed)"

echo -e "\n4. 測試訪問控制:"
curl -s -w "%{http_code}\n""$SERVER/admin" -o /dev/null

echo -e "\n配置測試完成!"

性能影響 ?

真實 IP 獲取對性能的影響很小:

? CPU 開銷:每個請求增加 < 0.1ms 處理時間

? 內存開銷:忽略不計

? 網絡開銷:無額外網絡請求

優化建議:

# 在 http 塊中配置,避免重復解析
http {
    set_real_ip_from 10.0.0.0/8;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    # 使用高效的日志格式
    log_format optimized '$remote_addr [$time_local] "$request" $status';
}

附:一些常見服務商的IP地址范圍

1. Cloudflare IP Ranges

2. AWS IP Address Ranges

責任編輯:武曉燕 來源: 仙人技術
相關推薦

2023-11-15 13:50:07

服務端IP

2019-10-29 05:34:34

IPJava服務器

2018-12-19 10:31:32

客戶端IP服務器

2011-11-30 15:43:40

JavaJSP

2010-02-22 11:10:17

WCF獲取客戶端IP

2009-12-21 15:53:56

WCF獲取客戶端IP

2010-12-21 11:03:15

獲取客戶端證書

2010-02-24 16:17:09

WCF獲取客戶端IP

2010-05-12 15:46:51

Subversion客

2018-01-10 10:15:48

NginxIP問題

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2010-04-08 15:35:13

Oracle 簡易客戶

2020-04-23 09:32:33

zookeeperCP系統

2009-12-08 16:47:06

WCF IP

2010-08-31 16:29:40

DHCP客戶端

2011-08-25 13:42:57

IP隧道IPIPGRE

2009-12-03 10:09:47

PHP獲取客戶端IP

2024-05-06 08:00:00

C#IP地址

2013-06-08 09:59:15

VMwarevSphere Web

2010-06-01 14:11:11

TortoiseSVN
點贊
收藏

51CTO技術棧公眾號

国产精品丝袜视频| 精品亚洲精品福利线在观看| 咪咪色在线视频| 亚洲综合婷婷久久| 中文字幕av播放| 韩国三级大全久久网站| 亚洲va欧美va国产va天堂影院| 麻豆av一区二区三区| 亚洲网站在线免费观看| 国产综合色产| 中文字幕在线亚洲| 日本道中文字幕| 日本在线一区二区| 懂色aⅴ精品一区二区三区蜜月| 一区二区精品免费视频| 少妇高潮久久久| 久久国产精品99久久人人澡| 97在线日本国产| 97在线观看视频免费| 日韩母乳在线| 欧美大黄免费观看| а 天堂 在线| 精品无人乱码一区二区三区| 亚洲大型综合色站| 91看片淫黄大片91| 又爽又大又黄a级毛片在线视频| 国产一区二区h| 国产精品美女在线观看| 天堂网一区二区三区| 欧美91视频| 丝袜美腿亚洲一区二区| 成人性生交大免费看| 成人黄色av网址| 日韩一区二区中文字幕| 邪恶网站在线观看| 在线看欧美视频| 欧美特黄级在线| 日韩av高清在线看片| 午夜小视频在线观看| 国产精品第五页| 亚洲欧洲日韩综合二区| 毛片在线播放网址| 久久综合久久鬼色中文字| 国产一区不卡在线观看| 国产小视频一区| 懂色av中文字幕一区二区三区 | 日本不卡视频一二三区| 91产国在线观看动作片喷水| 国产奶水涨喷在线播放| 伊人久久大香线蕉综合热线| 欧美成人免费观看| 全程偷拍露脸中年夫妇| 欧美成人有码| 欧美成人精品在线视频| 国产中文av在线| 国产精品传媒精东影业在线| 久久香蕉国产线看观看网| 999精品在线视频| 久久久精品久久久久久96| 日韩视频免费大全中文字幕| 在线观看亚洲网站| 在线一区电影| 久久久久久中文| 亚洲天堂日韩av| 久久美女性网| 国产精品久久久久久久电影| 一本色道久久综合精品婷婷| 精品一区二区三区久久| 95av在线视频| 免费a视频在线观看| 99精品视频在线免费观看| 欧美激情视频一区二区三区| 成年人在线观看视频| 国产精品二区一区二区aⅴ污介绍| 亚洲国产精品影视| 岛国毛片av在线| 日韩欧美中文字幕在线播放| 91日韩视频在线观看| 色成人综合网| 亚洲成年网站在线观看| 无码熟妇人妻av| 四季av在线一区二区三区| 蜜臀久久99精品久久久无需会员 | 欧美色图一区二区三区| 色噜噜狠狠一区二区三区狼国成人| 成人在线视频区| 亚洲国产欧美精品| 色综合99久久久无码国产精品| 97精品一区| 亚洲3p在线观看| 中文字幕免费在线看| 国产69精品一区二区亚洲孕妇| 精品无码久久久久久久动漫| 欧美黄色激情| 高跟丝袜一区二区三区| 一级做a爱视频| 日韩高清一级| 美女黄色丝袜一区| 日韩精品一区不卡| 成人综合激情网| 亚洲精品高清国产一线久久| 国产第一页在线| 色婷婷精品大视频在线蜜桃视频| 日本人dh亚洲人ⅹxx| 国产欧美亚洲精品a| 欧美丰满片xxx777| 在线观看免费中文字幕| 99视频在线观看一区三区| 中文字幕99| 原纱央莉成人av片| 精品久久久久久无| 91av手机在线| 天堂影院一区二区| 国产欧美一区二区视频| 超碰最新在线| 欧美亚洲日本一区| 好男人香蕉影院| 在线免费观看日本欧美爱情大片| 国产精品男人的天堂| 天天操天天操天天操| 亚洲精品美国一| 一区二区三区视频在线观看免费| 精品嫩草影院| 久久久久久久久久国产| 国产一区二区女内射| 国产日韩视频一区二区三区| 成人毛片一区二区| 粉嫩一区二区三区四区公司1| 日韩中文字幕在线视频| 久久亚洲精品石原莉奈| 97精品久久久午夜一区二区三区 | 欧美a级片免费看| 久久一区精品| 欧美1o一11sex性hdhd| a国产在线视频| 精品国产百合女同互慰| 国产大片免费看| 国产一区二区在线观看免费| 亚洲欧美久久久久一区二区三区| 搜成人激情视频| 亚洲天堂av网| 激情网站在线观看| 国产日韩欧美制服另类| 97公开免费视频| 精品日韩欧美一区| 国产成人久久精品| 毛片网站在线观看| 91极品美女在线| 实拍女处破www免费看| 亚洲中字黄色| 欧美日韩国产免费一区二区三区 | 国产欧美一区二区三区久久| 91在线观看| 欧美日韩激情一区二区三区| 自拍偷拍第9页| 精品一区二区三区视频在线观看 | 激情久久av| 国产精品xx| 亚洲欧美综合图区| 国产精品传媒在线观看| 国产精品电影一区二区三区| 日韩精品aaa| 国产精品99免费看| 国产欧美日韩在线播放| 韩国美女久久| 在线看日韩欧美| 国产普通话bbwbbwbbw| 又紧又大又爽精品一区二区| 北京富婆泄欲对白| 宅男噜噜噜66一区二区| 日本一区免费| 亚洲欧洲专区| 久久久久久久久网站| 天堂中文在线视频| 在线观看免费成人| 日本福利片在线观看| 国产成人av电影在线| www.av毛片| 成人精品久久| 亚洲xxx自由成熟| 密臀av在线播放| 中文字幕在线观看亚洲| 精品国产99久久久久久宅男i| 亚洲国产毛片aaaaa无费看| 国产肉体xxxx裸体784大胆| 热久久一区二区| 日韩精品一区二区免费| 国产99久久精品一区二区300| 成人av在线天堂| 第一福利在线视频| 最近2019中文字幕在线高清| 亚洲爱爱综合网| 欧美专区在线观看一区| 青草影院在线观看| 久久久久9999亚洲精品| 欧美专区第二页| 美女精品在线| 伊人网在线免费| 精品久久一区| av一本久道久久波多野结衣| 免费高清视频在线一区| 欧美大片网站在线观看| 成a人片在线观看www视频| 精品欧美一区二区三区精品久久 | 欧美一级日韩免费不卡| 区一区二在线观看| 亚洲在线视频一区| 日韩av片在线免费观看| 26uuu精品一区二区| 久久久久久国产精品日本| 日韩在线卡一卡二| 精品无码国模私拍视频| 亚洲成人免费| 亚洲精品影院| 国产精品探花在线观看| 国产乱码精品一区二区三区日韩精品 | 在线免费av一区| 日本在线观看中文字幕| 亚洲免费成人av| 山东少妇露脸刺激对白在线| 99久精品国产| 一级欧美一级日韩片 | 99久久人妻精品免费二区| 国产一区二区三区不卡在线观看| 国产熟人av一二三区| 99热这里只有精品8| 国产1区2区3区中文字幕| 日韩一区二区在线| 日本一区二区三区在线视频| 思热99re视热频这里只精品| 国产精品国产三级欧美二区| 国产精品一站二站| 国产一区视频在线播放| 国产成人午夜性a一级毛片| 国产成一区二区| 日韩电影av| 日本成人在线视频网址| 亚洲v.com| 欧美一级片一区| 在线观看的黄色| 欧美亚洲国产另类| 亚洲欧美韩国| 欧美一级片久久久久久久| 亚洲国产欧美日本视频| 日韩av手机在线观看| 欧美日韩国产v| 国产91色在线|免| 播放一区二区| 国产精品久久久久91| 午夜精品成人av| 国产精品女人网站| 成人亚洲网站| 91九色综合久久| 日韩在线视频一区二区三区| 国产精品白丝jk白祙| 精品久久ai| 欧美日韩亚洲一区二区三区四区| 亚洲欧洲av| 亚洲精品二区| 综合国产在线| 九一国产精品视频| 久久看片网站| 在线不卡一区二区三区| 国产精品夜夜嗨| a天堂视频在线观看| 久久一区二区三区国产精品| 2019男人天堂| 亚洲欧美电影院| 一级免费在线观看| 欧美天堂亚洲电影院在线播放| 伊人网综合在线| 日韩欧美中文字幕精品| 手机看片一区二区| 亚洲视频日韩精品| 免费在线观看av片| 欧美精品电影在线| 欧美美女日韩| 亚洲精品欧美日韩专区| 牛牛视频精品一区二区不卡| 日韩欧美亚洲日产国| 午夜精品久久| 国产熟女高潮视频| 国产一区二区在线看| 在线免费观看污视频| 国产精品国产三级国产专播品爱网| 激情五月少妇a| 色94色欧美sute亚洲线路一ni | 免费在线不卡视频| 欧美日韩你懂得| 欧美一级视频免费| 在线亚洲国产精品网| 国产理论电影在线| 国产精品丝袜一区二区三区| japanese色系久久精品| 日韩欧美99| 亚洲激情精品| 色91精品久久久久久久久| 99re热这里只有精品视频| 激情五月激情综合| 一本一道综合狠狠老| 成人黄色免费视频| 中文字幕亚洲一区| 日本乱码一区二区三区不卡| 91夜夜揉人人捏人人添红杏| 九九在线高清精品视频| 日本一级黄视频| 久久综合综合久久综合| 中文字幕一区二区三区人妻| 亚洲精品亚洲人成人网在线播放| 欧美国产一级片| 亚洲精品suv精品一区二区| 18videosex性欧美麻豆| 国产精品高潮呻吟久久av无限| 成人高潮a毛片免费观看网站| 在线电影看在线一区二区三区| 麻豆成人精品| 中文成人无字幕乱码精品区| 一区二区三区在线免费视频| 中文字幕一区二区三区免费看 | 无码熟妇人妻av| 午夜影院在线观看欧美| 国产高清精品软件丝瓜软件| 中文字幕欧美精品在线| 欧美黑人一区| 蜜桃精品久久久久久久免费影院 | 亚洲欧美经典视频| 一级淫片免费看| 中文字幕精品一区二区精品| 成人软件在线观看| 麻豆亚洲一区| 亚洲免费影院| 国精品无码人妻一区二区三区| 婷婷一区二区三区| 好吊视频一二三区| 欧美激情一区二区三区成人| 欧美9999| 男人添女荫道口女人有什么感觉| 国产精品性做久久久久久| 日韩在线观看视频一区二区| 制服丝袜国产精品| 二区三区四区高清视频在线观看| 成人免费xxxxx在线观看| 久久资源中文字幕| 手机av在线网站| 一区二区三区四区视频精品免费 | 免费欧美一级视频| 91麻豆国产香蕉久久精品| 国产又爽又黄的视频| 国产婷婷成人久久av免费高清| 午夜影院在线播放| 久久av二区| 视频一区二区国产| 久久视频一区二区三区| 欧美日韩另类一区| 麻豆视频在线观看免费网站| 91在线无精精品一区二区| 牛夜精品久久久久久久99黑人| 亚洲精品一区二区18漫画 | 久久精品夜夜夜夜夜久久| 麻豆精品久久| 亚洲中文字幕无码专区| 久久精品水蜜桃av综合天堂| 中文区中文字幕免费看| 久久久久999| 高清日韩欧美| 国产福利一区视频| 国产精品国产三级国产普通话蜜臀| 国产美女三级无套内谢| 九九精品在线观看| 露出调教综合另类| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 欧美日韩精品一区二区| 在线看一级片| 久久精品成人一区二区三区蜜臀| 日本成人在线视频网站| 暗呦丨小u女国产精品| 亚洲成人av片在线观看| 久久精品女人天堂av免费观看 | 免费在线看一区| 国产精品老熟女一区二区| 日韩精品极品视频| 亚洲日韩中文字幕一区| 久艹视频在线免费观看| 国产欧美日韩精品一区| 精品国产一级片| 国产aaa精品| 欧美日韩国产欧| 中文字幕在线1| 日韩欧美国产精品一区| 国模套图日韩精品一区二区| 久久久久久久久久久久久国产| 91在线国产观看| 国产精品羞羞答答在线| 欧美在线视频观看| 欧美精品福利| 亚洲精品国产熟女久久久| 欧美mv日韩mv国产网站| 成人自拍视频网| 福利视频一二区| 亚洲人妖av一区二区|