基于源IP的Nginx TCP流路由

时间:2016-03-11 13:58:41

标签: nginx tcp

我已将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:"如果"这里不允许使用指令,因为它不适用于流模块 - 是否有任何其他功能可以实现此结果?

1 个答案:

答案 0 :(得分:1)

以防某些人仍然想知道您是否可以使用地图来实现这一目标:

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;
  }
}

ref