В nginx мы пытались перенаправить URL-адрес следующим образом : Клиент попадает по URL-адресу: https://new.domain.com/reg?account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222
, и nginx должен направить запрос на сервер Tomcat.
конфигурация сервера выглядит следующим образом:
server {
listen 80;
listen [::]:80;
server_name localhost;
location ~ ^/reg?(.*) {
resolver x.x.x.x;
proxy_pass http://localhost:8000/some_dir/reg?$1;
}
С указанными выше настройками я смог чтобы увидеть, что запросы попадают в серверный tomcat при доступе из браузера. Но строки URI после "reg?" т.е.: "account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222"
не получают указания.
Может кто-нибудь помочь мне указать, что не так с регулярным выражением?
Проблема здесь в том, что местоположение
соответствует только компоненту пути URL-адреса. Итак, как написано, ваше регулярное выражение соответствует гораздо большему количеству URL-адресов, чем вы ожидаете. Например, он соответствует / re
, / redwood
, / regular
, а также / reg
. Но он не помещает строку запроса в захват, потому что строка запроса не является частью компонента пути.
К счастью, вам вообще не нужно регулярное выражение, да и не нужно захватить строку запроса, поскольку nginx уже отслеживает ее. Рассмотрим:
location /reg {
proxy_pass http://localhost:8080/some_dir/reg$is_args$args;
}
Здесь мы избавляемся от всех лишних совпадений и сопоставляем только пути URL, начинающиеся с / reg
. Вы можете сделать его более конкретным, используя вместо этого location = / reg
. Затем мы явно передаем аргументы.