We have nginx proxying to a bunch of django upstreams.
When those upstreams throw an error, we use proxy_intercept_errors to
show a custom page. The problem is that this causes those 500s to be
logged into the global access_log, rather than the access_log specified
for that location. Here is a (reduced) example:
# at the server
access_log /logs/nginx/access.log accesslogformat;
proxy_intercept_errors on;
location ~ ^/oauth.*$ {
proxy_pass http://appservers;
access_log /logs/nginx/app.log applogformat;
}
Is there a way to get errors to log to the app.log in this case, even
with proxy_intercept_errors to on? Right now we get all the 500s in the
access.log.
Is there a way to get errors to log to the app.log in this case, even
with proxy_intercept_errors to on? Right now we get all the 500s in the
access.log.
Requests are logged in context of a location where their
processing ends. This means that after error_page redirection
they will logged in the location where error_pages are processed.
If you want them to be logged to the same app.log, you need to
define location for errors with the same logging. To avoid mixing
logs with normal errors, you may want to define separate
error_page’s for your apps. Something like this should work: