@adminkg

Nginx: не работает rewrite c proxy_pass?

Настроен nginx в качестве реверсивного прокси сервера.
Стоит задача в get запросе заменить substr по вхождению.

URL вида:
myserver.domain/request/server/load.php?a=HELLO&b=...


Здесь мне надо заменить все вхождения "HELLO" на "NO", чтобы дальше передать URL вида:
myserver.domain/request/server/load.php?a=NO&b=BYE...


Пробовал так:

location /server/load.php {
rewrite (.*)HELLO(.*) $1NO$2 last;
proxy_pass localhost:88;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
}


К сожалению такая конструкция не срабатывает.
ЧЯДНТ?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@dodo512
Если там максимум 2 вхождения "HELLO".
map $args $replace {
volatile;
default  $args;
~^(.*)HELLO(.*)  "$1NO$2";
}


server {
    location /server/load.php {
        rewrite ^ $uri?$replace?;
        rewrite ^ $uri?$replace? break;
        
        proxy_pass localhost:88;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы