#nginx #reverse-proxy #nginx-reverse-proxy
Вопрос:
У меня довольно простой вопрос, у меня есть среда, в которой у меня часто меняются поддомены, но некоторые из них также существуют, теперь я хочу переслать api.example.com кому 1.2.3.4:8080
и все другие входящие запросы на 2.3.4.5:9090
. Моя настройка до сих пор заключается в том, что я пересылаю все запросы от поддоменов api на 1.2.3.4:8080
:
server {
listen 80;
listen [::]:80;
server_name api.example.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass http://1.2.3.4:8080;
}
}
Теперь мне нужен способ указать на все остальные поддомены 2.3.4.5:9090
.
Ответ №1:
Используйте default_server
в listen
. Смотрите Документы.
server {
listen 80;
listen [::]:80;
server_name api.example.com;
location / {
proxy_pass http://1.2.3.4:8080;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
proxy_pass http://2.3.4.5:9090;
}
}
Комментарии:
1. И даже
server_name _;
может быть опущен для второго серверного блока 🙂
Ответ №2:
Все, что вам нужно, это динамически разрешать ваши поддомены. следующая конфигурация позаботится о вашей ситуации.
server {
listen 80;
listen [::]:80;
server_name ~^(?<subdomain>. ).example.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
if ($subdomain = "api") {
proxy_pass http://1.2.3.4:8080;
}
proxy_pass http://2.3.4.5:9090;
}
}