2015-09-16 4 views
0

Я пытаюсь использовать NGINX для прокси-запроса, который должен сделать небольшую магию посередине. По сути, у меня есть клиент, который может отправлять только неавторизованный запрос GET, и мне нужно получить этот запрос, сделать POST, который будет подключаться к серверу с использованием статических учетных данных, хранящихся в конфигурации NGINX, и заменить тело ответа на перенаправление html. Это будет работать для моего сценария, потому что ответ POST будет содержать заголовок Set-Cookie с идентификатором сеанса, представляющим аутентифицированный сеанс. Я знаю, что могу использовать proxy_method, чтобы заставить NGINX сделать исходящий вызов через POST, и я могу использовать sub_filter, чтобы заменить ответ POST на перенаправление html. Мой вопрос в том, как я могу установить тело запроса, которое будет отправлено в запрос POST?Заменить тело запроса в прокси-сервере NGINX для POST

Любые идеи?

Ян

ответ

2

Я потратил много времени на изучение этого некоторое время назад, и, казалось, лучшим решением будет с помощью Lua. Это немного боль. Мне пришлось собрать NGINX с Lua. Я использовал OpenResty. Моему бланку требовалось маскировать конфиденциальные данные, отправленные через мой обратный прокси NGINX. Однако он определенно отличается от вашего, поскольку вы используете proxy_method для создания дополнительного POST, поэтому я не на 100%, это решит вашу проблему. Однако, я думаю, это стоит проверить. Вот небольшой фрагмент кода из моей конфигурации, если это помогает. Приятно вдаваться в подробности, если вам нужно.

location /login { 
    set $request_body_mask ""; 

     # mask client_secret in posts 
     access_by_lua ' 
      local req = ngx.req.get_body_data() 
     ngx.var.request_body_mask = ngx.re.gsub(req, "(client_secret=).{8}", "$1********") 
    '; 

    # mask client_secret in gets 
    set_by_lua $request_mask ' 
     local req = ngx.var.request_uri 
     return ngx.re.gsub(req, "(client_secret=).{8}", "$1********") 
    '; 
+0

Спасибо, очень полезно. Это в значительной степени то, что я тоже сделал. Вместо этого я мог бы написать модуль для этого. – IanG

Смежные вопросы