簡體   English   中英

將真實客戶端 IP 從 Nginx 轉發到 Haproxy

[英]Forward Real Client IP from Nginx to Haproxy

我的切入點是 Nginx。 對於所有 /api 請求,我已經設置了 haproxy。 當有人試圖點擊https://yourdomain.com/api/時,我想將客戶端 IP 地址從 nginx 發送到 haproxy。 我已經為 /api 定義了一個位置並定義了以下標題

location /api/ {
           proxy_pass https://MY-API-URL/;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass_request_headers      on;
}

當我獲得 X-Real-IP 的值時,它是客戶端 IP,但我希望這個客戶端 IP 存在於 Haproxy 中,因為我想根據客戶端 IP 設置速率限制。 請讓我知道什么是正確的做法。

當您從 NGginx 代理到 Haproxy 時,所有連接都來自同一 ip/machine (nginx)。 如果您想根據客戶端的 IP 進行代理,那么您必須告訴 HAProxy 根據您在 Nginx 中設置的 X-Real-IP 或 X-Forwarded-For 標頭進行平衡。

您的新 Nginx 配置將如下所示:

location /{
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ( if use X-Forwarded-For )
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Real-IP $remote_addr; ( if use X-Real-IP )
            proxy_pass_request_headers on;
            proxy_pass http://myip:myport;

}

如果您使用 X-Real-IP,您的新 HAProxy 配置將如下所示:

backend webapp
  balance hdr(X-Real-IP)
  hash-type consistent 
  mode http
  server server1 ip:port check port 8080
  server server2 ip:port check port 8080

如果您使用 X-Forwarded-For,您的新 HAProxy 配置將如下所示:

backend webapp
  balance hdr(X-Forwarded-For)
  hash-type consistent 
  mode http
  server server1 ip:port check port 8080
  server server2 ip:port check port 8080

這個配置對我來說很好用! 問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM