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

Расположение без учета регистра в Nginx и proxy_pass с учетом регистра

У нас есть несколько локаций с настройкой обратных прокси. Наша текущая конфигурация:

upstream backends {
    server Backend1;
    server Backend2;
}

server {
    ... other server config stuff here ...

    location /App1 {
        ... proxy header stuff ...

        proxy_pass http://backends/App1;
     }
}

Теперь то, что мы пытаемся сделать, - это настроить его так, чтобы бэкенды с учетом регистра (в данном случае Backend1 / 2 http: // backends / App1) может быть нечувствительным к регистру для публики, так что вы можете получить доступ http://example.com/app1 ИЛИ http://example.com/App1 (или любой вариант)

Наша новая конфигурация, которую мы пытаемся заставить работать, выглядит примерно так:

location ~* /App1 {
    proxy_pass http://backends/App1;
}

Но никаких кубиков при перезагрузке конфига. Мы видим ошибку:

«proxy_pass» не может иметь часть URI в местоположении, заданном регулярным выражением, или внутри именованного местоположения, или внутри оператора «if», или внутри «limit_except» ...

Любые мысли / идеи о том, как мы можем этого добиться?

Неявная перезапись, выполняемая proxy_pass не будет работать при наличии местоположения регулярного выражения. Видеть этот документ для большего.

Однако вы можете использовать rewrite ... break для выполнения той же функции.

location ~* /App1(?<stuff>.*)$ {
    rewrite ^ /App1$stuff break;
    proxy_pass http://backends;
}

Регулярное выражение расширяется именованным захватом, чтобы захватить оставшуюся часть URI, затем rewrite оператор создает новый URI для прохождения восходящего потока.

Видеть этот документ для подробностей.