Приветствую!
Proxy_pass
не понимает переменные, ни в качестве всего URI,
ни в качестве порта.
Пример:
map $http_host
$my_port {
game.rnd.example.com
8001;
admin.rnd.example.com
8081;
game.msk.example.com
8004;
admin.msk.example.com
8084;
game.test.example.com
8003;
admin.test.example.com
8083;
game.new.example.com
8002;
admin.new.example.com
8082;
}
location / {
if ($my_port) {
proxy_pass http://127.0.0.1:$my_port;
break;
}
}
Что не так?
Решил обойти проблему.
location / {
if ($http_host ~ rnd\.example\.com$) {
include /path/rnd.example.com/nginx.conf;
}
...
}
Так не работает, пишет, что include
не определен в if.
Попробовал через именованный локации, только не
знаю как их вызвать.
Вызвал через error_page, но только GET запросы попадают
через error_page на именованную
локацию, остальные ? ошибка 405.
location / {
if ($http_host ~ rnd\.example\.com$) {
error_page 404 = @rnd;
}
...
}
location @rnd {
include /path/rnd.example.com/nginx.conf;
}
?
В итоге написал в лоб, но решение мне не
нравится:
if ($http_host ~ ^game\.rnd\.example\.com$)
{
proxy_pass http://127.0.0.1:8001;
break;
}
if ($http_host ~
^admin\.rnd\.example\.com$) {
proxy_pass http://127.0.0.1:8081;
break;
}
?
if ($http_host ~
^game\.test\.example\.com$) {
proxy_pass http://127.0.0.1:8003;
break;
}
if ($http_host ~
^admin\.test\.example\.com$) {
proxy_pass http://127.0.0.1:8083;
break;
}
Плюс auth_basic использовать в if нельзя, т.е.
не получится сделать для каждого субдомена свою авторизацию, только общую.
Что посоветуете?