Как избежать "?" в nginx переписать вывод правил - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь реверсировать прокси в nginx, переписывая интерфейсную страницу, например "/a/b?page=2", в бэкэнд-запрос в "/a/b%3fpage=2"

Я не могу понять, как заставить nginx делать запросы обратного прокси, которые включают "%3f".

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

rewrite ^/one$ /a%3fb;
rewrite ^/two$ /a?b;
rewrite ^/three$ /a\?b;
  • /one делает бэкэнд-запрос вроде GET /a%253fb HTTP/1.0
  • /two делает бэкэнд-запрос как GET /a?b HTTP/1.0
  • /three делает бэкэнд-запрос вроде GET /a\?b HTTP/1.0

Как получить бэкэнд-запрос, например GET /a%3fb HTTP/1.0?

1 Ответ

1 голос
/ 03 апреля 2019

Благодаря комментарию @Richard Smith я смог исправить это для моего конкретного случая с помощью следующего кода:

location / {

  set $backend_uri $request_uri;
  if ($args ~* "page=(\d+)") {
    set $page $1;
    set $backend_uri $uri%3fpage=$1;
  }

  proxy_pass http://example.com$backend_uri;
}

Я думаю, что я мог бы также сделать что-то более общее сlua директива перезаписи, но мне не удалось установить mod-lua на машину Amazon Linux 2, см. https://serverfault.com/questions/961337/how-to-install-nginx-mod-lua-on-amazon-linux-2

...