Table des matières

Nginx sur RaspBerry Pi : le serveur Web hautes performances (LEMP)

Voir Nginx : le serveur Web hautes performances (LEMP)

Pré-requis

Installation

Mettez à jour les sources :

  1. Mettez à jour les sources :

    pi@framboise:~ $ sudo apt update && sudo apt upgrade

  2. Installez Nginx sur le Raspberry :

    pi@framboise:~ $ sudo apt install nginx acl

  3. Démarrez Nginx, activez-le pour être lancé au démarrage et démarrez le service :

    pi@framboise:~ $ sudo nginx
    pi@framboise:~ $ sudo systemctl enable nginx

  4. Vérifiez que Nginx est bien démarré :

    pi@framboise:~ $ sudo systemctl is-active nginx
    active

  5. Vérifiez que tout fonctionne : sur votre PC, dans votre navigateur Internet, ouvrez votre serveur http://192.168.0.31 (ou http://framboise.local ; vous devriez tomber sur cette page :

Quand vous tapez l'adresse http://192.168.0.31, vous aboutissez dans le répertoire /<DISQUE>/srv/www/html.

L'utilisateur $USER (qui fait partie du groupe www-data) a lui aussi accès à ce répertoire.

N'oubliez pas de recharger la page du navigateur pour vider le cache, sinon c'est l'ancienne page qui s'affiche.

L'installation a créé l'arborescence :

pi@framboise:~ $ tree /etc/nginx/
/etc/nginx/
├── nginx.conf
├── conf.d
├── modules-available
├── modules-enabled
│   └── ...
├── sites-available
│   └── default
├── sites-enabled
│   └── default -> /etc/nginx/sites-available/default
├── snippets
│   └── ...
└── ...
  • Le dossier sites-available contient les fichiers de configuration des sites
  • Le dossier sites-enabled permet de les lancer en production.

Configuration

Le fichier de configuration de nginx est /etc/nginx/nginx.conf mais nous n'y toucherons pas pour ne pas perdre les réglages lors des mises à jour.

Au lieu de toucher au fichier /etc/nginx/nginx.conf, nous utiliserons certains dossiers :

  • configuration : des fichiers dans le répertoire /etc/nginx/conf.d.
  • hôtes virtuels : des fichiers dans le répertoire /etc/nginx/sites-available (le fichier default peut servir de modèle)
  • Le dossier /etc/nginx/sites-enabled permet de lancer les hôtes virtuels en production

Serveur par défaut

  1. Faites une copie du fichier /etc/nginx/sites-available/default :

    pi@framboise:~ $ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist|]]

    Pour info, en voici le contenu : Fichier /etc/nginx/sites-available/default Pour en savoir plus sur le fichier de configuration, voir Structure du fichier de configuration nginx.conf

  2. Éditez avec les droits d'administration le fichier /etc/nginx/sites-available/default pour le modifier comme ceci : :
    /etc/nginx/sites-available/default
    # Serveur par défaut
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        
        # Configuration SSL
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        
        # Note : Vous devez désactiver gzip pour le trafic SSL.
        # Voir : https://bugs.debian.org/773332
        
        # Renseignez-vous sur ssl_ciphers pour garantir une configuration sécurisée
        # Voir : https://bugs.debian.org/765782
        
        # Certificats auto-signés générés par le package ssl-cert
        # Ne les utilisez pas dans un serveur de production !
        include snippets/snakeoil.conf;
        
        server_name _;
        root /var/www/html;
        
        index index.php index.html index.htm index.nginx-debian.html;
        
        location / {
            # Essai de servir la demande comme fichier, puis comme répertoire, puis affichage d'un 404
            try_files $uri $uri/ =404;
        }
        
        # Passer les scripts PHP au serveur FastCGI
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
        
        # Refuser l'accès aux fichiers .htaccess si la racine du document d'Apache
        # concorde avec celle de nginx
        location ~ /\.ht {
            deny all;
        }
    }

Et voici le modèle pour un serveur virtuel :

example.com
# Modèle de configuration de l'hôte virtuel example.com
#    Placez ce code dans un fichier sites-available/example.com
#    et créez un lien symbolique vers sites-enabled/ pour l'activer.
server {
    listen 80;
    listen [::]:80;

    server_name example.com;
    root /var/www/example.com;

    index index.php index.html index.htm;

    # Certificats auto-signés générés par le package ssl-cert
    # Ne les utilisez pas dans un serveur de production !
    include snippets/snakeoil.conf;

    location / {
        try_files $uri $uri/ =404;
    }
	
    # Passer les scripts PHP au serveur FastCGI
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

    # Refuser l'accès aux fichiers .htaccess
    # si la racine du document d'Apache concorde avec celle de nginx
    location ~ /\.ht {
        deny all;
    }
}

Création d'un site

Le plus simple est de partir de l'exemple /etc/nginx/sites-available/default fourni.

  1. Recopiez le fichier modèle :

    pi@framboise:~ $ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/monsite

  2. Éditez avec les droits d'administration le fichier /etc/nginx/sites-available/monsite :
    /etc/nginx/sites-available/monsite
    server {
        listen 80;
        listen [::]:80;	
        
        server_name monsite.fr;
        root /var/www/html/monsite;
    
        index index.php index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
    }
  3. Créez un dossier qui accueillera les fichiers de votre site :

    pi@framboise:~ $ sudo mkdir -p /var/www/html/monsite

  4. Créez le fichier /var/www/html/index.php :

    pi@framboise:/var/www/html/monsite $ sudo nano /var/www/html/monsite/index.php

    /var/www/html/monsite/index.php
    <?php
    class Application
    {
    	public function __construct()
    	{
    		phpinfo();
    	}
    }
    $application = new Application();
    ?>
  5. Activez votre site en créant un lien dans le dossier sites-enabled :

    pi@framboise:~ $ sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/monsite

  6. Testez la configuration :

    pi@framboise:~ $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

  7. Si tout est Ok, redémarrez nginx :

    pi@framboise:~ $ sudo systemctl restart nginx.service

Pour finir, sur le PC, allez sur votre serveur à l'aide de votre navigateur Internet. S'il affiche l'état de php, c'est bon !

Serveurs virtuels

Pour le PHP, vérifier le contenu du répertoire :

pi@framboise:~ $ ll /var/run/php/
total 4,0K
srw-rw---- 1 www-data www-data 0 juil. 20 10:46 php7.3-fpm.sock
-rw-r--r-- 1 root     root     5 juil. 20 10:46 php7.3-fpm.pid

Utilisation

Exemple sur framboise :

/etc/nginx/sites-available/framboise.parc
# Domaine framboise.parc

# hôte virtuel framboise.parc
server {
	listen 80;
	listen [::]:80;

    server_name framboise.parc;
    root /var/www/html/;

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

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

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
		#~ fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /\.ht {
		deny all;
	}
}

# doc.framboise.parc
server {
	listen 80;
	listen [::]:80;

    server_name doc.framboise.parc;
	root /var/www/html/doc;

	location / {
		index index.php index.html index.htm index.nginx-debian.html;
		try_files $uri $uri/ =404;
	}

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

	location ~ /(data|conf|bin|inc)/ {
		deny all;
	}
	
	location ~ /\.ht {
		deny all;
	}
}

# hôtes virtuels dokuwiki
server {
	listen 80;
	listen [::]:80;

    server_name  ~^(?P<sub>doc|perso|magie)\.framboise\.parc$;
    #server_name doc.framboise.parc;
	#root /var/www/html/doc;
	root /var/www/html/$sub;

	location / {
		index index.php index.html index.htm index.nginx-debian.html;
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		#~ fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /(data|conf|bin|inc)/ {
		deny all;
	}
	
	location ~ /\.ht {
		deny all;
	}
}

# hôte virtuel test.framboise.parc
server {
	listen 80;
	listen [::]:80;

	server_name test.framboise.parc;
	root /var/www/html/test;

	location / {
		index index.php index.html index.htm index.nginx-debian.html;
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
		#~ fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /(data|conf|bin|inc)/ {
		deny all;
	}
	
	location ~ /\.ht {
		deny all;
	}
}

#~ # hôte virtuel gestion.framboise.parc
server {
	listen 80;
	listen [::]:80;

	server_name gestion.framboise.parc;
	root /var/www/html/gestion/htdocs;

	location / {
		index index.php index.html index.htm index.nginx-debian.html;
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
		#~ fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /(data|conf|bin|inc)/ {
		deny all;
	}
	
	location ~ /\.ht {
		deny all;
	}
}

#~ # hôte virtuel perso.framboise.parc
server {
	listen 80;
	listen [::]:80;

	server_name perso.framboise.parc;
	root /var/www/html/perso;

	location / {
		index index.php index.html index.htm index.nginx-debian.html;
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
		#~ fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /(data|conf|bin|inc)/ {
		deny all;
	}
	
	location ~ /\.ht {
		deny all;
	}
}

# hôte virtuel *.framboise.parc
server {
	listen 80;
	listen [::]:80;

#	On récupère le sous-domaine dans la variable "sub".
    server_name  ~^(?P<sub>.+)\.framboise.parc$;
    root /var/www/html/$sub;

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

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

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
		#~ fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	location ~ /\.ht {
		deny all;
	}
}

Activer cet hôte :

pi@framboise:~ $ sudo ln -s /etc/nginx/sites-available/framboise.parc /etc/nginx/sites-enabled/

Désinstallation

Voir aussi


Basé sur « Article » par Auteur.