Question on Empty GIF module
Maxim Dounin
mdounin at mdounin.ru
Fri Apr 25 12:46:45 MSD 2008
Hello!
On Thu, Apr 24, 2008 at 09:16:53AM -0700, Rt Ibmer wrote:
>>IMHO, post_action will be much better here. Something like:
>>location / {
>> empty_gif;
>> post_action /post;
>>}
>
>>location = /post {
>> internal;
>> proxy_pass http://my_upstream_servers;
>>}
>
>Thank you Denis and Maxim! Maxium can you elaborate on what the
>flow would actually be like with the above scenario, and what
>advantages it may have over the approach posted by Maxium?
You mean "posted by Denis"?
>I am trying to understand how the above actually works from the
>browser's perspective that originates the request...
>
>For instance, with the above, will the browser's request be
>fulfilled by the first location blocked and then immediately
>closed (this is what I am hoping for)? Or does the browser need
>to wait while nginx executes the post_action?
In sort: post_action registers callback that will be called after request
will be processed by usual handlers (in this case - by empty_gif
module). It evaluates after response has been sent to client,
so client sees no delay in request processing.
The only disadvantage of post_action as of current implementation
is that it blocks connection, i.e. following keep-alive request
won't be processed until post_action terminates.
Anyway, it's much better for your task then using X-Accel-Redirect.
And of course really best way do things is to write logs and just
process them as needed.
>I could not find any docs on post_action so I don't know how it
>works or what it does exactly. I came across this:
Docs for post_action doesn't exist (yet). There are some relevant
russian mailing list posts, but I can't recall anything in
English.
> post_action does not block new connections, but it blocks
>current connection.
> nginx handles post_action in context of request and connection,
>so it
> does not close connection to a client before going to
>post_action. So again this makes me wonder whether nginx will
>immediately serve the gif back to the browser and close that
>connection for the speed improvement I am hoping for.
Closing connection isn't really needed since empty_gif returns
response with Content-Length set, and even HTTP/1.0 browsers will
see response before connection will be closed. This will block
subsequent requests within keep-alive connection though, see
above.
>Assuming the above works how I would like, do I still need to
>return any gif or other such response from my app? Or can I just
>close the connection without upsetting nginx or making nginx think
>the backend is down?
You have to return any valid response. Simple "204 No content"
will do. Alternatively, you may tune nginx to ignore
errors from backend server, but I don't recommend this way.
Maxim Dounin
More information about the nginx
mailing list