У нас есть несколько локаций с настройкой обратных прокси. Наша текущая конфигурация:
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 для прохождения восходящего потока.
Видеть этот документ для подробностей.