В 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"
не получают указания.
Может ли кто-нибудь помочь мне указать, что не так с регулярным выражением?
Проблема здесь в том, что location
соответствует только компоненту пути URL-адреса. Итак, как написано, ваше регулярное выражение соответствует гораздо большему количеству URL-адресов, чем вы ожидаете. Например, он соответствует /re
, /redwood
, /regular
так же как /reg
. Но это не поместите строку запроса в захват, потому что строка запроса не является частью компонента пути.
К счастью, вам вообще не нужно регулярное выражение, и вам не нужно захватывать строку запроса, поскольку nginx уже отслеживает ее. Рассматривать:
location /reg {
proxy_pass http://localhost:8080/some_dir/reg$is_args$args;
}
Здесь мы избавляемся от всех посторонних совпадений и сопоставляем только пути URL, начинающиеся с /reg
. Вы можете сделать его более конкретным, используя location = /reg
вместо. Затем мы явно передаем аргументы.