Reescreva o pedido de POST para GET com nginx

1

Eu tenho um servidor de back-end que, por vários motivos, processa somente solicitações GET. Este servidor está localizado atrás do proxy nginx (ou seja, todo o acesso é feito ao nginx, que o envia ao backend com proxy_pass ). É possível fazer o nginx reescrever solicitações POST em solicitações GET, ou seja, para que POST /foo com o tipo de conteúdo do corpo application/x-www-form-urlencoded e corpo foo=bar seja colocado em proxy para GET /foo?foo=bar ?

    
por StasM 10.09.2015 / 23:05

1 resposta

3

O pequeno exemplo está trabalhando para mim com o nginx 1.10.x no Ubuntu 16.04 com nginx-extras (contém lua). Ele não respeita os argumentos de consulta da solicitação, para mesclá-los com o corpo da postagem.

server {
    ...
    server_name ...;

    client_max_body_size 4k; # prevent too long post bodies

    location / {
            if ($request_method = POST ) {
                access_by_lua '
                        ngx.req.read_body()
                        local data = ngx.req.get_body_data()
                        ngx.req.set_uri_args(data)
                ';                
            }

            proxy_pass http://yourupstreamdestination;
            proxy_method GET;                    # change method
            include /etc/nginx/proxy_params.inc; # include some params
    }
}
    
por 03.03.2017 / 18:22