Как переписать запрос Nginx GET в POST? - PullRequest
0 голосов
/ 13 декабря 2018

Мой пример использования: у меня есть электронное письмо со ссылкой «подтвердить ваш адрес электронной почты».Когда пользователь щелкает эту ссылку, пользовательский агент выполняет запрос GET, например:

GET http://widgetwerkz.example.com/confirm_email?challenge=LSXGMRUQMEBO

Сервер будет выполнять эту операцию как POST (поскольку это побочная операция).У меня нет доступа к коду сервера вообще.Запрос назначения должен быть:

POST http://widgetwerkz.example.com/rpc/verify

{ "challenge": "LSXGMRUQMEBO" }

Какую перезапись Nginx я могу выполнить для достижения этой цели?

Редактировать : решение в контексте

http {
    server {
        # ... 
        location /confirm_email {
            set $temp $arg_challenge;
            proxy_method POST;
            proxy_set_body '{ "challenge": "$temp" }';
            proxy_pass http://127.0.0.1/rpc/verify;
            set $args '';
        }
    }
}

Это делает все это вместе:

  • Преобразует запрос из GET в POST
  • Перезаписывает местоположение с /confirm_email на /rpc/verify
  • Удаляет строку запросаиз запроса (например, полученный URL-адрес просто /rpc/verify, без ?challenge=LSXGMRUQMEBO)
  • Добавляет тело в формате JSON: { "challenge": "LSXGMRUQMEBO" }

Спасибо Ивану за то, что он поставил меняправильный путь!

1 Ответ

0 голосов
/ 13 декабря 2018

Вам нужно что-то вроде этого:

location /confirm_email {
    proxy_method POST;
    proxy_set_body '{ "challenge": "$arg_challenge" }';
    # your proxy_set_headers and other parameters here
    proxy_pass <your_backend>/rpc/verify;
}
...