Fiddler-подобный хост и переназначение портов с помощью nginx в Linux
Я пытаюсь настроить переназначение хоста и порта в Linux, используя nginx в качестве обратного прокси.
Пока что у меня есть работающее решение по взлому гетто с использованием if
директива, которая является злом.
Есть ли лучшее решение без использования if
?
Что я пробовал - конфигурация nginx
/etc/nginx/nginx.conf (или какой-нибудь файл /etc/nginx/conf.d/*.conf):
server {
listen 3000;
server_name dev.example.com test.example.com prod.example.com
location / {
if ($http_host ~ dev.example.com) {
proxy_pass 127.0.0.1:13000;
}
if ($http_host ~ test.example.com) {
proxy_pass 127.0.0.1:23000;
}
if ($http_host ~ prod.example.com) {
proxy_pass 127.0.0.1:33000;
}
}
}
/ etc / hosts:
127.0.0.1 dev.example.com
127.0.0.1 test.example.com
127.0.0.1 prod.example.com
Что я хотел бы сделать - конфигурация Fiddler HOSTS
Для тех, кто знаком с Fiddler, я пытаюсь подражать этой конфигурации HOSTS:
localhost:13000 dev.example.com:3000
localhost:23000 test.example.com:3000
localhost:33000 prod.example.com:3000
2 ответа
Используйте отдельный server
блоки:
server {
server_name dev.example.com;
listen 3000;
proxy_pass http://127.0.0.1:13000;
}
server {
server_name test.example.com;
listen 3000;
proxy_pass http://127.0.0.1:23000;
}
И еще один для prod.example.com
,
Если эти конфигурации сайта содержат общие элементы, включите их в другой файл и используйте include
Директива применять эти элементы к каждому виртуальному серверу.
Используйте модуль карты:
http
контекст:
map $http_host $proxy_target {
"dev.example.com" "127.0.0.1:13000";
"test.example.com" "127.0.0.1:23000";
"prod.example.com" "127.0.0.1:33000";
}
server
контекст:
proxy_pass $proxy_target;
Кроме того, вы можете попытаться дифференцировать только порт и использовать что-то вроде
proxy_pass 127.0.0.1:$proxy_port;
но я не уверен, сработает ли так.