Назад | Перейти на главную страницу

Nginx отображает URL-адреса для proxy_pass в одной директиве местоположения

У меня есть несколько узловых веб-узлов, которые доступны через URL-адрес, соответствующий путям сокетов UNIX. Вместо дублирования директивы местоположения я хотел бы иметь что-то вроде списка URL-адресов, которые будут использоваться в качестве имени сокета. Использование регулярного выражения не работает, потому что мне нужен путь для имени сокета.

В настоящее время я использую это место:

location /application1/
{
   proxy_pass http://unix:/var/run/nodejs/application1;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
}

цель - получить что-то вроде:

$list = [app1, app2, app3];           #list of possible names
location /$list/   #match all names in the list
{
   proxy_pass http://unix:/var/run/nodejs/$list_matched;   #use matched name
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
}

По сути, каждый URL в списке должен быть перенаправлен на сокет с тем же именем.

Заранее благодарю за любую помощь :)

location ~* /(<regexp>)/ {
    proxy_pass http://unix:/var/run/nodejs/$1;   #use matched name
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Вам нужно использовать регулярное выражение. Что-то вроде этого должно работать, но вам придется вычислить регулярное выражение самостоятельно. Есть много руководств и сайты экспериментов с регулярными выражениями.

location ~ (app1|app2|app3)$ {