access log control while maintaining internal redirection to WordPress

Maxim Dounin mdounin at mdounin.ru
Mon Sep 24 21:20:59 UTC 2012


Hello!

On Mon, Sep 24, 2012 at 11:11:21PM +0200, Jan-Philip Gehrcke wrote:

> Hello!
> 
> I created a WordPress page with permalink
> http://domain.tld/health_status for WordPress health monitoring.
> It's accessed frequently, so I don't want these requests to appear
> in my access log.
> 
> My basic "rewrite rule" for all WordPress pages is:
> 
> location / {
>     try_files $uri $uri/ /index.php?q=$args;
> }
> 
> Now, on the same level, I tried
> 
> location /health_status {
>     access_log off;
>     #try_files $uri $uri/ /index.php?q=$args;
>     }
> 
> From the nginx location documentation: "Literal strings match the
> beginning portion of the query - the most specific match will be
> used"
> 
> /health_status is more specific than /, so this block takes action
> when I request http://domain.tld/health_status.
> 
> With the `try_files` line commented out (as above), the request does
> not show up in the access log, hurray, but obviously I just get a
> 404 error, because nginx does not redirect this request to
> WordPress.
> 
> With the `try_files` line being active, an internal redirect to
> WordPress' index.php takes place and the /health_status WordPress
> page is shown in the browser. However, after the internal redirect
> the location /health_status block is not in action anymore and the
> request ends up in the access log.
> 
> How to solve this problem cleanly? Do I now have to add another
> block matching the actual /index.php?q=healthstatuswhatever request
> that takes place after the internal redirect?

Correct solution would be actually configure all you want to 
happen in location /health_status.  I.e. disable access log in it, 
_and_ properly handle request there as well.

If you are using fastcgi, something like this should work:

    location = /health_status {
        access_log off;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        ...
    }

Similar aproach applies to other backend protocols as well.

Maxim Dounin



More information about the nginx mailing list