Skipping nginx PHP cache for certain areas of a site?

Posted by DisgruntledGoat on Server Fault See other posts from Server Fault or by DisgruntledGoat
Published on 2013-06-04T23:32:46Z Indexed on 2013/06/30 22:22 UTC
Read the original article Hit count: 160

Filed under:
|
|

I have just set up a new server with nginx (which I am new to) and PHP. On my site there are essentially 3 different types of files:

  • static content like CSS, JS, and some images (most images are on an external CDN)
  • main PHP/MySQL database-driven website which essentially acts like a static site
  • dynamic PHP/MySQL forum

It is my understanding from this question and this page that the static files need no special treatment and will be served as fast as possible.

I followed the answer from the above question to set up caching for PHP files and now I have a config like this:

location ~ \.php$ {
    try_files $uri =404;

    fastcgi_cache one;
    fastcgi_cache_key $scheme$host$request_uri;
    fastcgi_cache_valid  200 302 304 30m;
    fastcgi_cache_valid  301 1h;

    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /srv/www/example$fastcgi_script_name;
    fastcgi_param HTTPS off;
}

However, now I want to prevent caching on the forum (either for everyone or only for logged-in users - haven't checked if the latter is feasible with the forum software). I've heard that "if is evil" inside location blocks, so I am unsure how to proceed. With the if inside the location block I would probably add this in the middle:

if ($request_uri ~* "^/forum/") {
    fastcgi_cache_bypass 1;
}
# or possible this, if I'm able to cache pages for anonymous visitors
if ($request_uri ~* "^/forum/" && $http_cookie ~* "loggedincookie") {
    fastcgi_cache_bypass 1;
}

Will that work fine, or is there a better way to achieve this?

© Server Fault or respective owner

Related posts about php

Related posts about nginx