FastCGI Micro Cache in NGINX
Introduction
FastCGI Micro Cache is a caching mechanism that caches dynamic content in front of a web server with NGINX. It is the most efficient way to implement a dynamic cache mechanism. In this article, we will discuss how to configure FastCGI Micro Cache in NGINX.
Configuration
- Edit the NGINX main configuration file to add the following lines in the
http
context:
http {
# Configure microcache (fastcgi)
fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=ZONE_1:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;
- Edit the virtual host configuration file in which caching is to be enabled.
- Add the following content to the
server
context:
server {
# Cache by default
set $no_cache 0;
# Check for cache bypass
if ($arg_skipcache = 1) {
set $no_cache 1;
}
location / {
try_files $uri $uri/ =404;
}
location ~\.php$ {
# Pass php requests to the php-fpm service (fastcgi)
include fastcgi.conf;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
# Enable cache
fastcgi_cache ZONE_1;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
}
}
Here’s a brief explanation of the code:
The
server
block is the top-level configuration context for NGINX. It defines the settings for a virtual server.The
set
directive is used to set a variable to a value. In this case,$no_cache
is set to0
by default.The
if
directive is used to execute a block of code if a certain condition is met. In this case, it checks if the query parameterskipcache
is set to1
. If it is,$no_cache
is set to1
.The
location
directive is used to define how NGINX should handle requests for a specific URL pattern.The first
location
block defines how NGINX should handle requests for the root URL (/
). It uses thetry_files
directive to check if the requested file exists and serve it if it does. If it doesn’t exist, it returns a 404 error.The second
location
block defines how NGINX should handle requests for PHP files (files ending in.php
). It includes thefastcgi.conf
file, which contains common FastCGI configuration settings. It then passes the request to the PHP-FPM service using thefastcgi_pass
directive.The
fastcgi_cache
directive enables caching for FastCGI requests. In this case, it uses the cache zone namedZONE_1
.The
fastcgi_cache_valid
directive sets how long cached content should be considered valid. In this case, it sets it to 60 minutes for responses with a status code of 200.The
fastcgi_cache_bypass
andfastcgi_no_cache
directives are used to control when cached content should not be used. In this case, they use the$no_cache
variable that was set earlier.
Apply your configuration changes.
Test out FastCGI Micro Cache using Apache Bench, etc.
Conclusion
FastCGI Micro Cache is an efficient way to implement a dynamic cache mechanism in front of a web server with NGINX. It can help improve website performance and reduce server load. By following the steps outlined in this article, you can easily configure FastCGI Micro Cache in NGINX.
References
How to Setup FastCGI Caching with Nginx on your VPS | DigitalOcean
NGINX Fundamentals: High Performance Servers from Scratch | Udemy
Cache your Web Site with NGINX and FastCGI in CentOS 7 - PHP-FPM (ryadel.com)
Subscribe to my newsletter
Read articles from Melvin C Varghese (melvincv) directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Melvin C Varghese (melvincv)
Melvin C Varghese (melvincv)
I am a DevOps Consultant. 3 years experience with Cloud technologies. 9 years total IT experience in the Linux, Networking and Data Visualization domains. Love listening to music and playing older PC games.