Installing and configuring Nginx + PHP-fpm in Debian

by Nataliya Oteir
Installing and configuring Nginx + PHP-fpm in Debian
star 5
0
Read 6 min.

Nginx is a web server that was released in 2004. This server is easy to use, but despite this, it handles a lot of connections perfectly. This feature is due to its internal architecture. Initially, it was created as a server running static content (so-called caching server). Unlike Apache, Nginx does not have a built-in interpreter to handle dynamic content requests.

This requires further interaction between the web server and the application. The PHP-FPM process manager (FastCGI) successfully solves this problem. The important point is that in working with PHP, the Nginx + PHP-FPM binder shows itself to be less productive than Apache + php_mod.

So if your server has high-performance requirements for PHP, it is better to look at the bundle apache + php_mod. Another important point is that Nginx requires more effort to configure than Apache.

This article deals with the installation and simple configuration of the Nginx server in conjunction with the PHP-FPM process manager in Debian 8. All operations are performed under the root user privileges.

First, you need to update:

apt-get update

Next, we install Nginx:

apt-get -y install nginx

After installation, we will test the server. To do this, just open the web browser address of our server. The following contents shall be open:

This is the standard plug-in page for Nginx. The next step is to install php5-fpm. It’s very simple:

apt-get -y install php5-fpm

Next, you need to do the setup. First, configure Nginx server. The configuration file is in the /etc/nginx/nginx.conf.

Open this file. We use the vi text editor, but you can use any other one that suits you.

vi  /etc/nginx/nginx.conf

Let’s understand a little bit about the structure of the file itself. The whole file is somewhat similar to the program code. It has directives. They are divided into two types:

  • Simple - a string with operators ending with the symbol «;». For example: pid /run/nginx.pid;
  • Block - a directive containing additional parameters placed in curly brackets {}.

Other directives can be set inside braces. In this case, it will be called context, and all directives that are in the configuration file but are not in any curly brackets are in the global context or the so-called main context.

Strings marked with the # symbol are comments and are not considered in the configuration.

As you can see in the file there is a directive:

include /etc/nginx/sites-enabled/*;

This directive says that this configuration file includes all configuration files from the /etc/nginx/sites-enabled/directory. This directory essentially contains symbolic links to the configuration of virtual hosts (essentially the sites served on the server).

Now we need to configure a virtual host that will be responsible for our simplest resource (let it be test.net). First, we’ll create a directory for him. Let’s make it a command:

mkdir -p /var/www/test.net/html

Now let’s create an index.html file in this directory with the following content:

<html>
   <head>
      <title>Hello World</title>
   </head>
   <body>
      <h>This is a test page.</h>
   </body>
</html>

Now we have the content of the site, let and one page of everything. For this site, you need to create a virtual host. Copy the default file for the virtual host:

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/test.net

Next, open it for editing. The listen directive has options for default_server. Only one block can be set with this value, which means that this block will serve queries for which nothing more suitable is found. Therefore the lines

listen 80 default_server;
listen [::]:80 default_server;

you must remove it from this file. Next, you must configure the root directory that contains the contents of our site. To do this, we write the root directive as follows:

root /var/www/test.net/html;

The following index directive defines the files to be used as index files. The order in which files are checked corresponds to the order in the configuration file. This directive is written as follows:

index index.html index.htm index.nginx-debian.html;

The following server_name directive specifies the server name. As values, we specify the domain name and alias when the domain name is specified with the www prefix.

server_name test.net www.test.net;

Next, you need only specify a location directive that sets the site configuration based on the URI name specified in the request. In our case, it will look simple:

location / {
   try_files $uri $uri/ =404;
}

This means that first files will be checked, then directories will be checked, and if nothing suitable will be found, Not Found (404) will be returned.

This is all with the configuration file. Its final content is as follows:

#cat /etc/nginx/sites-available/test.net
server {
     root /var/www/test.net/html;
     index index.html index.htm index.nginx-debian.html;
     server_name test.net www.test.net;
     location / {
           try_files $uri $uri/ =404;
     }
}

All other directives and their values can be read in the official Nginx documentation, which is here http://nginx.org/en/docs/.

Now we have the content of the site and its configuration file. It remains to include it. To do this, create a symbolic link:

ln -s /etc/nginx/sites-available/test.net /etc/nginx/sites-enabled/

Restart the server to make the changes effective:

/etc/init.d/nginx restart

Let’s check the work of the created resource.

To open a page, you may need to add a line to the hosts file on the computer you are checking from:

xxx.xxx.xxx.xxx test.net

Где xxx.xxx.xxx.xxx – это IP-адрес сервера с установленным Nginx. Файл hosts, находится:

  • C:\Windows\System32\drivers\etc (в Win7);
  • /etc/hosts (в Debian).

We have installed Nginx and php5-fpm as well as made the simplest site. The next step is to configure PHP and apply it with Nginx.

First, we will create a page with PHP code on our virtual host. Let’s make the /var/www/test.net/html/info.php file as follows:

<?php
phpinfo();
?>

Now open this page in the browser http://test.net/info.php

But what about the execution of PHP code? A PHP code we did not execute because the interpreter PHP is not configured in Nginx. Let’s do this.

Open our configuration file /etc/nginx/sites-available/test.net. Add the following block directive:

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

This directive describes the parameters for processing queries going to PHP files. I will not describe each parameter and its value. This information can be found in the official documentation here http://nginx.org/en/docs/dirindex.html

Now our configuration file is as follows:

server {
root /var/www/test.net/html;
index index.html index.htm index.nginx-debian.html;
server_name test.net www.test.net;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Save the changes to the file and restart our Nginx server.

/etc/init.d/nginx restart

Now let’s try again to open http://test.net/info.php. The result should be as follows:

I marked the information in the screenshot that indicates the use of the FPM manager.

In fact, the simplest configuration of Nginx + PHP-FPM server is complete. The simplest site is created and configured to work with PHP.

See the following article about configuring PHP-FPM.

New posts

VAT

  • Other

    Other

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    %
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • Other
  • canada
  • poland
  • european-union
  • france
  • germany
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria