POST request body manipulation

Sandro Bordacchini sandro.bordacchini at nems.it
Thu Apr 23 16:52:00 UTC 2015


Hello everyone,

i have a problem in configuring Nginx.

I have a location that serves as a proxy for a well-specified url "/login".
This location can receive both GET and POST request.
GET request have no body and should be proxied to a default and 
well-know host.
POST request contains the host to be proxied to in their body 
(extractable by a regexp).

To avoid use of "if", i was using a map:

map $request_body $target_tenant_loginbody {
     ~*account=(.*)%40(?P<body_tenant>.*)&password.* $body_tenant;
     default          default.example.com;
}

        location /login {
                 echo_read_request_body;

                 proxy_pass http://$target_tenant_loginbody:9000;

                 # Debug
                 proxy_set_header X-Debug-Routing-Value 
$target_tenant_loginbody;

                 proxy_set_header          Host            $host;
                 proxy_set_header          X-Real-IP $remote_addr;
                 proxy_set_header          X-Forwarded-For 
$proxy_add_x_forwarded_for;
        }

This is not working (works with the GETs but not with the POSTs), seems 
that the map returns always the default value even if the regexp works 
(tested on regex101.com).
After a few tests, i understood that $request_body is empty or 
non-initialized. I tried also with $echo_request_body, that seems 
correctly initialized in location context but not in the map.

I read about a lot of issues and people having problem with empty 
$request_body.

Maybe is there another approach you could direct me to?

Thanks in advance,
Sandro.


---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
http://www.avast.com



More information about the nginx mailing list