Как сделать proxy_pass на query параметр через nginx?
Всем привет, нужна помощь в решении задачи:
Необходимо в nginx сделать proxy_pass на сформированую урл:
1 - Нужно выдернуть значение query параметра redirect
2 - Заменить hostname текущего урл на то что мы выдернули
3 - Удалить query параметр redirect
4 - И сделать proxy_pass на то что получилось
Тоесть с Урлы https://sitea.com?token=123&redirect=https://siteb.com
должен сработать proxy_pass на https://siteb.com?token=123
Дополнительно:
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; } |
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; }
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для создания прокси-переадресации на основе query параметра через Nginx, вам необходимо использовать директиву proxy_pass внутри блока location. Прокси-переадресация позволяет перенаправлять запросы на другой сервер или приложение.
Вот пример конфигурации Nginx, который позволяет сделать прокси-переадресацию на основе query параметра:
```php
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server$request_uri;
}
}
```
В этом примере, все запросы, поступающие на ваш сервер example.com, будут переадресовываться на backend_server с сохранением query параметров. Например, если запрос приходит на example.com/api/user?id=123, он будет перенаправлен на backend_server/api/user?id=123.
Если вам нужно указать определенный query параметр для прокси-переадресации, вы можете использовать условия в блоке location. Например, если вы хотите перенаправить только запросы с параметром type=1, то конфигурация будет выглядеть следующим образом:
```php
server {
listen 80;
server_name example.com;
location / {
if ($arg_type = 1) {
proxy_pass http://backend_server$request_uri;
}
}
}
```
Таким образом, при запросе example.com/api/data?type=1 произойдет прокси-переадресация на backend_server/api/data?type=1, в то время как запросы с другим значением параметра type будут игнорироваться.
Убедитесь, что в вашем конфигурационном файле Nginx правильно установлены блоки server и location, и что все директивы заданы корректно. После внесения изменений не забудьте перезагрузить сервер Nginx для применения новой конфигурации.