Atlantic.Net Blog

How to Setup Nginx Cache on a LAMP Server

Hitesh Jethva
by Atlantic.Net (273 posts) under VPS Hosting
0 Comments

Apache is one of the most reliable and powerful web servers available. Apache is open-source, highly customizable, and comes with many modules that allow you to add additional functionality. It is known for its power and is specially designed for small-to-medium-sized websites.

Using Apache in parallel with Nginx and FastCGI Cache allows you to get the best of both worlds. This setup will improve your web server performance using the strengths of both web server applications. Nginx FastCGI cache works by storing copies of files in a cache so that they can be accessed more quickly.

In this tutorial, we will show you how to setup Nginx FastCGI cache with LAMP Server on Ubuntu 18.04. We will configure Apache as a backend server and Nginx as a frontend server with FastCGI Cache.

Prerequisites

  • A fresh Ubuntu 18.04 VPS on the Atlantic.Net Cloud Platform
  • A root password configured on your server

Step 1 – Create Atlantic.Net Cloud Server

First, log in to your Atlantic.Net Cloud Server. Create a new server, choosing Ubuntu 18.04 as the operating system with at least 1GB RAM. Connect to your Cloud Server via SSH and log in using the credentials highlighted at the top of the page.

Once you are logged in to your Ubuntu 18.04 server, run the following command to update your base system with the latest available packages.

apt-get update -y

Step 2 – Install LAMP Server

First, install the Apache web server, PHP, PHP-FPM and other modules with the following command:

apt-get install apache2 php php-fpm libapache2-mod-php7.2 libapache2-mod-fcgid -y

Once all the packages are installed, you will need to enable some required Apache modules so that Apache can work with PHP-FPM.

You can enable them with the following command:

a2enmod actions fcgid alias proxy_fcgi

Next, restart the Apache service to apply the changes.

systemctl restart apache2

Step 3 – Create a Sample Website

First, create a directory for your website with the following command:

mkdir /var/www/html/example.com

Next, create a sample info.php file inside your website directory:

nano /var/www/html/example.com/info.php

Add the following lines:

<?php phpinfo(); ?>

Save and close the file, then change the ownership of your website to www-data user:

chown -R www-data:www-data /var/www/html/example.com
chmod -R 755 /var/www/html/example.com

Once you are finished, you can proceed to the next step.

Step 4 – Configure Apache Web Server

By default, the Apache web server listens on port 80. Here, we will use Apache as a backend server, so change the Apache default port from 80 to 8088.

nano /etc/apache2/ports.conf

Change the line from “Listen 80” to “Listen 8088”:

Listen 8088

Save and close the file when you are finished, then disable the Apache default virtual host file with the following command:

a2dissite 000-default.conf

Next, restart the Apache web server to implement the changes.

systemctl restart apache2

Next, create a new virtual host configuration file to serve your website:

nano /etc/apache2/sites-available/example.com.conf

Add the following content:

<VirtualHost 127.0.0.1:8088>
ServerName 127.0.0.1
ServerAdmin [email protected]
DocumentRoot /var/www/html/example.com
DirectoryIndex info.php

<FilesMatch \.php$>
# 2.4.10+ can proxy to unix socket
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>

<Directory /var/www/html/>
Options FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog /var/log/apache2/access.log combined
ErrorLog /var/log/apache2/error.log
</VirtualHost>

Save and close the file when you are finished, then enable the Apache virtual host configuration file with the following command:

a2ensite example.com.conf

Next, restart the Apache service to apply the changes:

systemctl restart apache2

At this point, the Apache web server is configured and listening on localhost on port 8088.

Step 5 – Configure Nginx as a Reverse Proxy with FastCGI Cache

In this section, we will configure Nginx as a reverse proxy for Apache web server and enable FastCGI Cache.

First, install the Nginx web server with the following command:

apt-get install nginx -y

Once installed, create a new Nginx virtual host configuration file:

nano /etc/nginx/sites-available/example.com.conf

Add the following content:

# Enable FastCGI Support
proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=nginxcache:100m max_size=1g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;

server {
listen 80;
server_name example.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location = /favicon.ico { access_log off; log_not_found off; }
set $skip_cache 0;

#Disable caching for login session, user cookie, POST request, query string, site map and feeds
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}

# Enable caching for your website.
location / {
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_buffering on;
proxy_cache nginxcache;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 
http_503 http_504;
proxy_cache_valid 200 301 302 60m;
proxy_cache_min_uses 1;
proxy_cache_lock on;

}
}

Save and close the file when you are finished, then enable the Nginx virtual host file with the following command:

ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Next, restart the Nginx service to apply the changes:

systemctl restart nginx

Step 6 – Test Nginx FastCGI Cache

At this point, Nginx is installed and configured as a reverse proxy for Apache with FastCGI Cache support. It’s time to verify whether the caching is working or not.

Open your web browser and access your Nginx web server using the URL http://example.com and reload the page for a few times.

Next, open your terminal and run the following command to fetch the http response header.

curl -I http://example.com

You should get the following output:

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 24 Apr 2020 17:01:42 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Cache: HIT

From the above output, X-Cache: HIT indicates that the response was served from the cache.

Conclusion

In the above guide, we have installed and configured the Apache web server as a backend server and Nginx as a frontend server with FastCGI caching. Hopefully, this setup will dramatically improve the performance of your webserver. Get started with FastCGI caching on your LAMP server with VPS hosting from Atlantic.Net today!

Get A Free To Use Cloud VPS

Free Tier Includes:
G3.2GB Cloud VPS Free to Use for One Year
50 GB of Block Storage Free to Use for One Year
50 GB of Snapshots Free to Use for One Year


Looking for a Hosting Solution?

We Provide Cloud, Dedicated, & Colocation.

  • Seven Global Data Center Locations.
  • Flexible Private, Public, & Hybrid Hosting.
  • 24x7x365 Security, Support, & Monitoring.
Contact Us Now! Med Tech Award FTC
SOC Audit HIPAA Audit HITECH Audit

Recent Posts

Get started with 12 months of free cloud VPS hosting

Free Tier includes:
G3.2GB Cloud VPS Server Free to Use for One Year
50 GB of Block Storage Free to Use for One Year
50 GB of Snapshots Free to Use for One Year


New York, NY

100 Delawanna Ave, Suite 1

Clifton, NJ 07014

United States

San Francisco, CA

2820 Northwestern Pkwy,

Santa Clara, CA 95051

United States

Dallas, TX

2323 Bryan Street,

Dallas, Texas 75201

United States

Ashburn, VA

1807 Michael Faraday Ct,

Reston, VA 20190

United States

Orlando, FL

440 W Kennedy Blvd, Suite 3

Orlando, FL 32810

United States

Toronto, Canada

20 Pullman Ct, Scarborough,

Ontario M1X 1E4

Canada

London, UK

14 Liverpool Road, Slough,

Berkshire SL1 4QZ

United Kingdom

Resources