<div dir="ltr">Hello Maxim,<div>could you please respond to my previous message. Thanks.</div><div><br></div><div>Dk.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 13, 2021 at 9:28 PM Dk Jack <<a href="mailto:dnj0496@gmail.com">dnj0496@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hello Maxim,</div><div>Thanks for responding. Can I get some clarification on what you mean by the statement below:<br><br></div><div>"More flexibility can be achieved by reading the request body</div>earlier - for example, you can do this from your own module, or<br>with embedded scripting such as perl or njs."<div><br></div><div>Are you suggesting that I use <span style="color:rgb(0,0,0)">ngx_http_read_client_request_body api in my module?</span></div><div><br></div><div><a href="http://nginx.org/en/docs/dev/development_guide.html#http_request_body" target="_blank">http://nginx.org/en/docs/dev/development_guide.html#http_request_body</a></div><div><br></div><div>I had similar trouble using that API with redirection. Are there some tricks to getting</div><div>it to work when using that API? Are there any reference implementations doing</div><div>redirection after inspecting the request body?</div><div>Thanks for your help!</div><div><br></div><div>Dk.</div><div><br></div><div><div>> Hello!<br>> It is generally too late to do any actions like "change the<br>> upstream/location etc" based on the body content, as the request<br>> body is usually read only when the location is already known and<br>> the upstream name is already obtained. Also consider<br>> "proxy_request_buffering off;" - reading the request body implies<br>> that nginx is sending the request body to the backend as well.<br>> That is, you can't really do more than modifying the request body<br>> or rejecting the request completely.<br>><br>> You may, however, provide some variables from your body request<br>> body filter - and, if it's possible in your particular<br>> configuration, use these variables to do some conditional<br>> processing.<br>><br>> Note thought that conditional processing needs to happen after the<br>> request body is read. As such, it is usually quite limited,<br>> especially when using standard modules, since the request body is<br>> usually read last.<br>><br>> For example, with proxy the request body is read after the<br>> variables in the "proxy_pass" directive are evaluated, so even<br>> with "proxy_request_buffering on;" (the default) you cannot use<br>> the variables from your request body filter module to change the<br>> upstream. You can, however, use it to control headers in the<br>> upstream request by using "proxy_set_header" with appropriate<br>> variables (again, assuming buffered request body reading - for<br>> obvious reasons this won't work with "proxy_request_buffering<br>> off;").<br>><br>> More flexibility can be achieved by reading the request body<br>> earlier - for example, you can do this from your own module, or<br>> with embedded scripting such as perl or njs.<br>><br>> --<br>> Maxim Dounin<br>> <a href="http://mdounin.ru/" target="_blank">http://mdounin.ru/</a><br>> _______________________________________________<br>> nginx-devel mailing list<br>> <a href="mailto:nginx-devel@nginx.org" target="_blank">nginx-devel@nginx.org</a><br>> <a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br>><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 12, 2021 at 12:47 PM Dk Jack <<a href="mailto:dnj0496@gmail.com" target="_blank">dnj0496@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<div>In my module, I am trying to take actions based on the content of the body. To accomplish this, I am capturing the body using body file as shown in the example below:</div><div><br></div><div><a href="http://mdounin.ru/hg/ngx_http_catch_body_filter_module/file/tip/ngx_http_catch_body_filter_module.c" target="_blank">http://mdounin.ru/hg/ngx_http_catch_body_filter_module/file/tip/ngx_http_catch_body_filter_module.c</a><br></div><div><br></div><div>This is working well. I can inspect the contents of the body and take different actions like rejecting requests etc. However, one of the actions I want to do is redirect the request based on the body content i.e if the content contains some string etc, then redirect the request i.e change the upstream/location etc. My question is, is it even possible to redirect a request in the body filter stage? Is there another way to do body capture/filter and still be able to redirect the request after inspecting the body? Any help, suggestions or sample code is appreciated. Thanks.</div><div><br></div><div>Dk.</div><div><br></div><div><br></div></div>
</blockquote></div></div></div>
</blockquote></div>