• Home
  • About Us
  • Contact
  • Privacy Policy

LinuxAdmin.io

  • Home
  • Tutorials
    • System Administration
    • Linux Tutorials
    • Web Hosting
    • WordPress
    • Virtualization
    • Troubleshooting
    • OpenStack

Nginx Caching for WordPress using fastcgi_cache

Fastcgi_cache Nginx

Caching PHP requests can dramatically reduce server resources per request and make the pages load time decrease substantially.  In this tutorial we are going to utilize the fastcgi_cache functions in nginx  to cache PHP requests making it.

This tutorial assumes you have the following already completed on your server:
Nginx installed, if you do not please follow – Nginx Compile From Source On CentOS
The ngx_cache_purge module already installed –  How to install the ngx_cache_purge module in Ningx
FastCGI setup and running – PHP-FPM Installation

It also assumes you already have a WordPress installation as this will just cover setting up the fastcgi_cache to work with WordPress.

Nginx fastcgi_cache Configuration

First make a directory in /var/run , this is where the fastcgi_cache will store the files in memory

mkdir /var/run/nginx-cache

You will then need to edit the Nginx configuration

nano /etc/nginx/nginx.conf

You will want to add the following lines in the http{} block before the  server{} configuration

 fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
 fastcgi_cache_key "$scheme$request_method$host$request_uri";
 fastcgi_cache_use_stale error timeout invalid_header http_500;
 fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

The above lines set the caching directory, cache levels and keys_zone. The fastcgi_cache_use_stale option will try to use cached files even if PHP-FPM has crashed or has been shutdown.

You will then want to add the following to the server{} configuration:

add_header X-Cache $upstream_cache_status;

What this does is allows you to see if Nginx is caching a request later on

 if ($request_method = POST) {
 set $skip_cache 1;
 }

 if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml") {
 set $skip_cache 1;
 }

 if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
 set $skip_cache 1;
 }

The above statements allow you to bypass the cache when you are logged into the administrative interface etc.

Add the following to location ~ \.php$ {} block that sends the PHP requests to PHP-FPM

 fastcgi_cache_bypass $skip_cache;
 fastcgi_no_cache $skip_cache;
 fastcgi_cache WORDPRESS;
 fastcgi_cache_valid 200 302 60m;
 fastcgi_cache_valid 301 1h;
 fastcgi_cache_valid any 1m;

The above block fast_cache_valid entries specify which type of requests to cache and for how long.

And finally add a purge folder to in the server{} configuration:

location ~ /purge(/.*) {
 allow 127.0.0.1;
 deny all;
 fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
 }

Once all of that has been completed, you can go ahead and restart nginx.

/etc/init.d/nginx restart

Nginx Helper Plugin Configuration

You will then want to cd to the wp-content/plugins directory and get the Nginx Helper plugin

wget https://downloads.wordpress.org/plugin/nginx-helper.1.9.10.zip

Uncompress the zip file

unzip nginx-helper.1.9.10.zip

Activate the plugin in WordPress and select the following options:
Under Purging Options select:

Enable Cache

Under Caching Method select:

Nginx FastCGI cache

Under Purge Method select:

Using a GET request to PURGE/url(Default option)

And click save to save the configuration.

To test you should now try a curl to check the headers to ensure a HIT  for the X-Cache header We set earlier.

# Curl -Is http://domain.com |grep X-Cache
 X-Cache: MISS

If this is the first request to that page since the cache has been active that is expected. A MISS means the page has not been cached yet.

On subsequent requests you should see

# Curl -Is http://domain.com |grep X-Cache
 X-Cache: HIT

If you do get a X-Cache: BYPASS one of the rules we set earlier is causing the cache to be ignored.  Try testing your site in one of the various speed test programs such as https://tools.pingdom.com you should notice a much improved load time over a non-cached WordPress install.

 

May 29, 2017LinuxAdmin.io
0 0 votes
Article Rating
Install The ngx_cache_purge Module In NginxBlocking Bad UserAgents with ModSecurity and Fail2ban
You Might Also Like
 
Compiling PHP from source on CentOS
 
Block Countries With Nginx and GeoIP
Subscribe
Notify of
guest

guest

0 Comments
Inline Feedbacks
View all comments
8 years ago Linux Tutorials, Nginx, Web Hosting, Wordpress centos, linux, Linux Performance Tuning3,192
Recent Posts
  • Configuring Firewalld to Work Seamlessly with Docker on CentOS
  • Mastering NGINX Tuning: Optimizing Web Server Performance
  • Exploring eBPF: Revolutionizing Network and System Monitoring
  • Kubernetes: Installation and Overview on CentOS 8
  • Install Docker on Centos 8
Most Commented
Hot Clone Linux Server with Rsync
Hot Clone A CentOS Server With Rsync
14 Comments
ngx_cache_purge module
Install The ngx_cache_purge Module In Nginx
8 Comments
piwik-nginx
Piwik Analytics on Nginx
8 Comments
Tags
linuxcentosLinux Performance Tuningsysadminkvmnetworkingmemcachedanalyticssystemd
About

We love Linux and are dedicated to creating Linux administration tutorials for System Administrators since 2016.

Most Viewed
Default Gateway
How To Configure A Default Gateway on CentOS
76,218 views
Zend Opcache
Setup and Optimize Zend OpCache
47,112 views
Install ffmpeg
FFMpeg Install On CentOS 7
21,686 views
Archives
Email subscription

Sign up for our newsletter to receive the latest news and event postings.

2018 © LinuxAdmin.io
wpDiscuz