Nginx нечувствителен к регистру proxy_pass

У меня есть сайт http://example.com с запущенным приложением, доступ к которому можно получить по адресу http://example.com/app1. Приложение app1 находится за обратным прокси-сервером nginx, например:

location /app1/ {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Добавление завершающей косой черты к полю proxy_pass позволяет мне «удалить» часть /app1/ URL-адреса, по крайней мере, в отношении приложения. Таким образом, app1 считает, что получает запросы к корневому URL-адресу (например, у меня есть маршрут в app1, который находится на '/', а не '/app1').

Однако я бы хотел, чтобы nginx не учитывал регистр. Итак, перехожу ли я к http://example.com/App1 или http://example.com/APP1, он все равно должен просто перенаправить запрос в app1, и удалить часть /app1/ URL-адреса.

Когда я пытаюсь использовать нечувствительные к регистру правила nginx, он не позволяет перенаправить остальную часть URI в app1.

location ~* /app1/ {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Это дает мне ошибку конфигурации nginx.

Мои цели двояки:

  • Сопоставьте /app1/ без учета регистра
  • Удалите часть /app1/ URL-адреса при «передаче» URL-адреса в приложение.

Я попытался переписать URL-адрес, но он не позволил мне добавить остальную часть URI в proxy_pass.

Любая помощь будет оценена по достоинству!


person JonLuca    schedule 07.10.2017    source источник


Ответы (1)


Вы должны захватить остальную часть URL-адреса, а затем использовать его.

location ~* /app1/(.*) {
    proxy_pass http://localhost:8080/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
person Tarun Lalwani    schedule 07.10.2017
comment
Я получаю плохой шлюз 502, когда пытаюсь это сделать. - person JonLuca; 08.10.2017
comment
На самом деле это была моя проблема, ошибки nginx показывали *502 no resolver defined to resolve localhost, client:. Я изменил локальный хост на 127.0.0.1, и это сработало. Спасибо! - person JonLuca; 08.10.2017