duplicating or forking incoming requests

Maxim Dounin mdounin at mdounin.ru
Fri Jul 12 20:04:54 UTC 2013


Hello!

On Fri, Jul 12, 2013 at 12:47:02PM -0700, Gary Foster wrote:

[...]

> Here's the configuration snippets I'm currently using:
> 
>   location = /events {
>     access_log events_access.log events_format;
>     expires 1s;
>     try_files @proxy @proxy;
>     # try_files @proxy /empty.html;
>     # try_files @proxy =200;

You are trying to use try_files incorrectly.  Please read docs at 
http://nginx.org/r/try_files.

>   }
> 
>   location @proxy {
>     proxy_pass http://127.0.0.1:8887;
>     proxy_intercept_errors on;
>     access_log events_access.log events_format;
>     error_page 502 =200 /empty.html;
>     proxy_set_header X-Real-IP $remote_addr;
>   }
> 
> Basically, what I want is that if it logs every incoming request 
> normally.  If it can forward the request to the upstream proxy, 
> it does so after logging it, and if it can't, it simply logs it 
> and returns a 200.
> 
> Is this possible and if so how?

I would recommend something like this:

    location = /events {
        access_log events_access.log events_format;
        error_page 502 504 = /empty;
        proxy_pass ...;
    }

    location = /empty {
        access_log events_access.log events_format;
        return 200 "";
    }

Note the above configuration snippet doesn't try to intercept 
errors returned by upstream servers, but only handles cases when 
nginx can't reach them and/or an invalid response is returned.  If 
upstream servers are expected to return various errors, 
proxy_intercept_errors should be used, as well as additional codes 
in error_page.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx mailing list