Перенаправление 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" не получают указания.

Может кто-нибудь помочь мне указать, что не так с регулярным выражением?

0
задан 23 November 2018 в 20:08
1 ответ

Проблема здесь в том, что местоположение соответствует только компоненту пути URL-адреса. Итак, как написано, ваше регулярное выражение соответствует гораздо большему количеству URL-адресов, чем вы ожидаете. Например, он соответствует / re , / redwood , / regular , а также / reg . Но он не помещает строку запроса в захват, потому что строка запроса не является частью компонента пути.

К счастью, вам вообще не нужно регулярное выражение, да и не нужно захватить строку запроса, поскольку nginx уже отслеживает ее. Рассмотрим:

location /reg {
    proxy_pass http://localhost:8080/some_dir/reg$is_args$args;
}

Здесь мы избавляемся от всех лишних совпадений и сопоставляем только пути URL, начинающиеся с / reg . Вы можете сделать его более конкретным, используя вместо этого location = / reg . Затем мы явно передаем аргументы.

1
ответ дан 4 December 2019 в 15:48

Теги

Похожие вопросы