我已将nginxconfiguration为TCP(非http)stream的反向代理。 我想对特定的源IP地址应用不同的路由 – 可以这样做,以及如何? 我知道使用if伪指令的http模块的推荐,但似乎不适用于这些stream。
现有configuration:
stream { server { listen 8000; proxy_pass staging; } } upstream staging { server 1.2.3.4:8000; }
期望的configuration(不工作):
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:”如果“指令不允许在这里”,因为它不适用于stream模块 – 是否有任何其他function,我怎么能达到类似的结果?
您可以使用指令map来执行此操作。 像这样(未经testing)。
upstream staging1 { server 1.2.3.4:8000; } upstream staging2 { server 1.2.3.44:8000; } map $remote_addr $upstream { 4.5.6.7 staging2; default staging1; } stream { server { listen 8000; proxy_pass $upstream; } }