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

Перенаправление URL-адресов NGINX

В nginx мы пытались перенаправить URL-адрес следующим образом: Клиент обращается к URL-адресу: https://new.domain.com/reg?account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222

и nginx должен направить запрос внутреннему tomcat.

http: // localhost: 8000 / some_dir / reg? account.name = ABC & accountID.number = 1234 & OrderNumber = 11111111 & Code = 2222.

конфигурация сервера следующая:

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 вместо. Затем мы явно передаем аргументы.