Я настроил 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 здесь не разрешена», поскольку она не применяется к модулю потока - есть ли какие-либо другие функции, позволяющие достичь аналогичного результата?
Вы можете использовать директиву map
для этого поведения. Что-то вроде этого (непроверено).
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;
}
}