#nginx #proxypass
Вопрос:
Добрый вечер. у меня есть вопрос относительно nginx, и он связан с директивой о местоположении. в настоящее время у меня есть эта конфигурация в nginx
server {
server_name ~^(?<account>. ).domain.com$;
root /var/www/html/folder-frontend/;
index index.html;
error_log /var/log/nginx/$account-access.log;
access_log /var/log/nginx/$account-access.log;
location / {
try_files $uri /index.html;
}
location /$account-backend/ {
proxy_pass http://service-backend/;
proxy_set_header HOST $account-backend.domain.co;
proxy_http_version 1.1;
}
}
это означает, что у меня есть несколько доменов с окончанием tenant.domain.com(app1.domain.com, app2.domain.com). с помощью выражения (?. ) я получаю часть строки в интересующем меня URL-адресе, а затем в директиве location использую ее для создания прокси-адреса и перенаправления запросов. но это не работает, я знаю, потому что, когда я помещаю в местоположение то, что меня интересует (в данном случае это будет местоположение /app1-серверная часть/), если перенаправляет на серверную службу, которую я прослушиваю в другом nginx.
Я сомневаюсь, могу ли я использовать переменную в директиве location nginx? Я попробовал именно так, как указано, и это не работает.
Ответ №1:
Нет, вы не можете использовать переменную в качестве location
аргумента директивы, даже в соответствующих регулярных выражениях. Вы можете попробовать обходной путь, например
server {
server_name ~^(?<account>. ).domain.com$;
root /var/www/html/folder-frontend/;
index index.html;
error_log /var/log/nginx/$account-access.log;
access_log /var/log/nginx/$account-access.log;
location / {
try_files $uri /index.html;
}
location ~ ^/(?<prefix>[^.] )-backend(?<suffix>/.*) {
if ($prefix != $account) {
return 404;
}
proxy_pass http://service-backend$suffix$is_args$args;
proxy_set_header HOST $prefix-backend.domain.co;
proxy_http_version 1.1;
}
}