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