Hi Maxim, Sorry for asking too many questions.
I did looked at he mirror module and i couldn't find the code which reads the body (from what i understand i need a ngx_chain_t type of value to build the request body from buffer) https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_mirror_module.c I'm going with point 1. I know it will break proxying but it's more simpler and i can think of doing 2. later on. Thank you, Zaihan On Thu, Dec 21, 2023 at 8:59 AM Maxim Dounin <mdou...@mdounin.ru> wrote: > > Hello! > > On Tue, Dec 19, 2023 at 10:11:04PM +0800, Muhammad Nuzaihan wrote: > > > Thanks Maxim, Vasility, > > > > The problem i was going to solve is to i needed to run my specific > > function that takes the data of request URL path, Headers and request > > body and determine and validate that all that data is correct before > > sending upstream, or else i would deny the request with 4xx code > > errors. > > > > Handlers can only handle (from what i know) URL path and headers. > > > > Request body requires a request chain (ngx_chain_t)) to piece out the > > request body and handlers doesn't seem to have t ngx_chain_t unlike > > request body filters. > > > > Or maybe i am wrong in this case? > > It looks like you are trying to do something which simply cannot > be done. For example, consider a configuration with > "proxy_request_buffering off;" - in such a configuration request > body is being read _after_ the request is passed to the upstream > server, and you simply cannot validate request body before passing > request headers to the upstream server. > > As long as you have to examine both request body and request > headers, I think there can be two possible solutions: > > 1. Install a phase handler, in which read the request body > yourself, and check both request headers and request body once > it's read. See the mirror module as an example on how to read the > body in a phase handler and properly resume processing after it. > This will break proxying without request buffering, though might > be good enough for your particular task. > > 2. Install a phase handler to check request headers, and a request > body filter to check the request body. Do checking in both > places, and abort request processing when you see that data aren't > correct. This will work with proxying without request buffering, > but will be generally more complex to implement. And, obviously, > this in case of proxying without request buffering this won't let > you to validate request body before the request headers are sent > to upstream server. > > Hope this helps. > > -- > Maxim Dounin > http://mdounin.ru/ > _______________________________________________ > nginx-devel mailing list > nginx-devel@nginx.org > https://mailman.nginx.org/mailman/listinfo/nginx-devel _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel