我已经将 nginx 配置为 TCP(非 http)流的反向代理。我想对特定源 IP 地址应用不同的路由 - 可以这样做吗?如何做?我知道使用 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”指令在这里不允许’,因为它不适用于流模块——还有其他功能可以帮助我实现类似的结果吗?
答案1
你可以使用指令map
来实现这个行为。类似这样。
stream {
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;
}
server {
listen 8000;
proxy_pass $upstream;
}
}