Как настроить proxy_pass для передачи query параметра в nginx?

Как настроить nginx для проксирования на другой URL, изменяя его параметры: получить значение query параметра "redirect", заменить hostname на полученное значение, удалить query параметр "redirect" и настроить proxy_pass на измененный URL?
  • 18 марта 2024 г. 20:19
Ответы на вопрос 2
Для настройки proxy_pass в nginx для передачи query параметра можно использовать переменную $args, которая содержит все переданные query параметры. 

Пример настройки proxy_pass для передачи query параметра "redirect":

```nginx
server {
    ...
    location / {
        proxy_pass http://backend$request_uri;
    }
}
```

Если вам требуется изменить URL перед тем как произойдет проксирование, вы можете использовать директиву rewrite. 

Пример настройки nginx для изменения параметров URL:

```nginx
server {
    ...
    location / {
        if ($arg_redirect) {
            set $new_host $arg_redirect;
            rewrite ^(.*)$ $scheme://$new_host$1 redirect;
        }
        proxy_pass http://backend$request_uri;
    }
}
```

В этом примере, если присутствует query параметр "redirect", то значение этого параметра будет сохранено в переменную $new_host, затем произойдет rewrite URL с измененным hostname, удаленным query параметром "redirect" и проксирование на измененный URL с помощью proxy_pass.
map $args $_args {
~^redirect=[^&]*&?(.*)  $1;
~^(.*?)&redirect=[^&]*(&?.*) $1$2;
}

server {

    location = / {

        error_page 418 = @rewrite;

        if ($arg_redirect ~ '^(?<_url>https?://[\w.-]+)') {
            return 418;
        }
    }

    location @rewrite {

        rewrite ^ /?$_args? break;

        proxy_pass $_url;

        proxy_http_version 1.1;
        proxy_ssl_server_name on;

        resolver 8.8.8.8;
    }
Похожие вопросы