<div dir="ltr">Hello Maxim,<div>Thanks for responding. My configuration to determine if I should inspect the body or not is not part of the location config since it's dynamic and I am receiving this config from an external app. The configuration is updated asynchronously. My module matches the requests against this external information and then enables the body filter. Not sure if I can use the location configuration as you suggested. Please suggest any modules using location config and doing something similar to my module. Thanks.</div><div><br></div><div>Regards,</div><div>Dk.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 10, 2021 at 6:19 AM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</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">Hello!<br>
<br>
On Mon, Aug 09, 2021 at 11:48:35AM -0700, Dk Jack wrote:<br>
<br>
> Hi,<br>
> In my module, I am inspecting the request body. My body filter init code is<br>
> shown below:<br>
> <br>
> int<br>
> module_body_filter_init(ngx_conf_t *cf)<br>
> {<br>
>   ngx_http_next_body_filter = ngx_http_top_request_body_filter;<br>
>   ngx_http_top_request_body_filter = nginx_module_inspect_body_filter;<br>
> <br>
>   return NGX_OK;<br>
> }<br>
> <br>
> Even though I have the above initialization, I do not want to inspect the<br>
> body for all requests. I figured the body filter would be invoked in the<br>
> content phase. Hence, I registered a handler in the NGX_HTTP_ACCESS_PHASE<br>
> to create my module context and set the flag to inspect the request body.<br>
> This works in some cases but is inconsistent. It looks like my<br>
> inspect_body_filter function is getting called before my access handler<br>
> function in some cases. I've now moved my handler to POST_READ_PHASE to get<br>
> consistent results. Is this the correct way to solve this problem? Are<br>
> there any other ways to accomplish this or are there any pitfalls to this<br>
> approach. Any help is appreciated. Thanks.<br>
<br>
Request body filters are called when the request body reading <br>
happens.  This can happen at any phase, especially when using <br>
other 3rd party modules, and it is generally incorrect to assume <br>
that some phase handler is called before reading the request body.  <br>
<br>
Note well that module contexts are cleared on internal <br>
redirections, and this might also be a problem for your approach.<br>
<br>
A better approach would be to depend on the location configuration <br>
instead.  And do appropriate checks in the request body filter <br>
itself if some run-time logic is needed.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" 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" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br>
</blockquote></div>