Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Nginx sur RaspBerry Pi : 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.