If you’ve decided to make the switch from Apache to NGINX, one of the questions you might find yourself asking is how to add support for the PHP Fast Process Manager (PHP-FPM). For those that might not know, PHP-FPM is a FastCGI handler for PHP scripts and apps, which makes it possible for a website to handle higher loads. PHP-FPM is much faster than traditional CGI-based multi-user PHP environments and also allows for the hosting of multiple applications using different versions of PHP.

I want to walk you through the process of installing PHP-FPM and then enabling it in your NGINX sites. It’s not quite as simple as it is with Apache, but it shouldn’t be much of a challenge for any IT pro.

SEE: Linux service control commands (TechRepublic Premium)

What you’ll need

The only things you’ll need for this are a running instance of NGINX and a user with sudo privileges. I’ll be demonstrating on my server of choice, Ubuntu 20.04, but this process can be modified to work on any platform that supports PHP and PHP-FPM.

How to install PHP-FPM

The first thing we must do is install PHP-FPM, and a few extras. Log in to your Ubuntu Server instance and, from the terminal window, issue the command:

sudo apt install php php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath -y

The above command will download and install all of the necessary dependencies.

Once PHP-FPM is installed, you need to then find out which version of PHP is installed. Do that with the command:

php --version

You can then check on the status of PHP-FPM with the command:

sudo systemctl status php7.X-fpm

Where X is the version number of PHP.

If you see that PHP-FPM isn’t running (it should be), start it with the command:

sudo systemctl start php7.X-fpm

Where X is the version number of PHP.

Finally, enable PHP-FPM with the command:

sudo systemctl enable php7.x-fpm

Again, where X is the version number of PHP.

How to configure PHP-FPM

Now we need to make a few configuration changes, so NGINX knows about PHP-FPM. The first is to edit the default NGINX configuration file. Open that file with the command:

sudo nano /etc/nginx/nginx.conf

In that file, look for the line:

#server_tokens off;

Uncomment that line so it looks like:

server_tokens off;

Save and close the file.

Next, we need to edit the default virtualhost configuration. Open that file with the command:

sudo nano /etc/nginx/sites-available/default

In that file, look for the section under:

# pass PHP scripts to FastCGI server

That section needs to look like:

location ~ .php$ {

include snippets/fastcgi-php.conf;


# # With php-fpm (or other unix sockets):

fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

# # With php-cgi (or other tcp sockets):

# fastcgi_pass;


In other words, uncomment (remove the # character) the lines:

  • location ~ .php$ {
  • include snippets/fastcgi-php.conf;
  • fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  • }

Save and close the file.

Restart NGINX with the command:

sudo systemctl restart nginx

How to test the installation

Create a test file with the command:

sudo nano /var/www/html/info.php

In that file, paste the following contents:

Save and close the file.

Open a web browser and point it to http://SERVER/info.php (where SERVER is the IP address of the hosting server). You should see, near the top of the PHP information page, FPM/FastCGI listed for the Server API and, under cgi-fcgi, that php-fpm is active (Figure A).

Figure A

PHP-FPM is installed and active for NGINX.

And that’s it, you’ve got NGINX up and running with PHP-FPM support. Remember, when you build your virtualhost configuration files, you’ll need to make sure to include PHP support in those. For that, you can use the /etc/nginx/sites-available/default file as an example.

Congratulations, enjoy that PHP/NGINX goodness.

Subscribe to TechRepublic’s How To Make Tech Work on YouTube for all the latest tech advice for business pros from Jack Wallen.

Image: NGINX