Reading request_body before passing to backend server

I am trying to read if a specific value is set (passed) as a POST using
request_body.

What I am trying to do is:

server {

if ($request_body ~ “API-value-Iwanttocheck”) {
set $my_api “TRUE”;
}

And later on pass to the backend server:

location / {
proxy_pass http://backend:80;
}

However, that never seems to match. I even enabled logging and modified
my
log_format to have:

"
“POSTREQUEST:$request_body”
"

And I can see in the log when I don’t have the if statement. When I add
the
if statement, it doesn’t show up in the logs any more.

Anyone have any idea? Or a simple way to check if a value set via POST
is
actually there?

Posted at Nginx Forum:

Hello!

On Sat, May 11, 2013 at 09:53:47PM -0400, dktp1 wrote:

"
“POSTREQUEST:$request_body”
"

And I can see in the log when I don’t have the if statement. When I add the
if statement, it doesn’t show up in the logs any more.

Anyone have any idea? Or a simple way to check if a value set via POST is
actually there?

The $request_body variable isn’t available in rewrites as request
body isn’t yet read at this phase.

Request body can be read and examined using embedded perl module,
see here:

http://nginx.org/en/docs/http/ngx_http_perl_module.html


Maxim D.
http://nginx.org/en/donation.html