簡體   English   中英

基於源IP的Nginx TCP流路由

[英]Nginx TCP stream routing based on source IP

我已將 nginx 配置為 TCP(非 http)流的反向代理。 我想為特定的源 IP 地址應用不同的路由 - 這可以完成嗎,如何完成? 我知道使用if指令對 http 模塊的推薦,但這似乎不適用於這些流。

現有配置:

stream {
  server {
    listen 8000;
    proxy_pass staging;
  }
}

upstream staging {
    server 1.2.3.4:8000;
}

所需的配置(不工作):

stream {
  server {
    listen 8000;
    proxy_pass staging1;
    if ( $remote_addr ~* 4.5.6.7 ) {
        proxy_pass staging2;
    }
  }
}

upstream staging1 {
    server 1.2.3.4:8000;
}
upstream staging2 {
    server 1.2.3.44:8000;
}

這會產生錯誤“24314#24314:此處不允許使用“if”指令”,因為它不適用於流模塊 - 是否還有其他功能可以實現此結果?

如果有些人仍然想知道您可以使用地圖來實現這一點:

stream {
  upstream staging1 {
    server 1.2.3.4:8000;
  }

  upstream staging2 {
    server 1.2.3.44:8000;
  }

  map $remote_addr $backend_svr {
    4.5.6.7 "staging2";
    default "staging1";
  }
  server {
    listen 8000;
    proxy_pass $backend_svr;
  }
}

參考

暫無
暫無

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

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