Nginx : sites virtuels
Un site virtuel est un bloc server : plusieurs sites peuvent partager un serveur et une adresse IP. Les exemples utilisent des noms génériques.
Site statique
Section intitulée « Site statique »/etc/nginx/sites-available/exemple.com :
server { listen 80; listen [::]:80; server_name exemple.com www.exemple.com;
root /var/www/exemple.com; index index.html;
location / { try_files $uri $uri/ =404; }}sudo ln -s /etc/nginx/sites-available/exemple.com /etc/nginx/sites-enabled/sudo nginx -t && sudo systemctl reload nginxPlusieurs sites sur le même serveur
Section intitulée « Plusieurs sites sur le même serveur »Un fichier par site, avec son propre server_name :
server { listen 80; server_name blog.exemple.com; root /var/www/blog;}
server { listen 80; server_name boutique.exemple.com; root /var/www/boutique;}Nginx choisit le site d’après l’en-tête Host de la requête. Les DNS de chaque nom doivent pointer vers le serveur.
Redirections
Section intitulée « Redirections »# www vers le domaine nuserver { listen 80; server_name www.exemple.com; return 301 http://exemple.com$request_uri;}
# Une ancienne page vers une nouvellelocation = /ancienne-page { return 301 /nouvelle-page;}
# Un dossier entierlocation /ancien/ { rewrite ^/ancien/(.*)$ /nouveau/$1 permanent;}| Code | Usage |
|---|---|
301 |
Redirection permanente (mise en cache par les navigateurs et moteurs de recherche) |
302 |
Redirection temporaire |
La redirection de HTTP vers HTTPS est décrite dans HTTPS et certificats.
Pages d’erreur personnalisées
Section intitulée « Pages d’erreur personnalisées »server { root /var/www/exemple.com;
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
location = /404.html { internal; # accessible seulement par redirection interne }}Le code de réponse reste 404 : bon pour le référencement.
Application monopage (SPA)
Section intitulée « Application monopage (SPA) »Renvoie index.html pour toutes les routes gérées côté navigateur :
server { root /var/www/application; index index.html;
location / { try_files $uri $uri/ /index.html; }
location /assets/ { try_files $uri =404; # les fichiers manquants restent des 404 }}Lister le contenu d’un dossier
Section intitulée « Lister le contenu d’un dossier »location /telechargements/ { alias /var/www/fichiers/; autoindex on; autoindex_exact_size off; # tailles lisibles (Ko, Mo) autoindex_localtime on;}Site PHP avec PHP-FPM
Section intitulée « Site PHP avec PHP-FPM »sudo apt install php-fpmls /run/php/ # nom du socket : php8.3-fpm.sock (24.04), php8.5-fpm.sock (26.04)server { root /var/www/exemple.com; index index.php index.html;
location / { try_files $uri $uri/ =404; }
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; # adapter à la version installée }
location ~ /\.ht { deny all; }}Le fragment snippets/fastcgi-php.conf est fourni par Ubuntu (paramètres FastCGI courants).
Serveur par défaut
Section intitulée « Serveur par défaut »Pour ne servir aucun contenu aux requêtes qui visent une adresse IP ou un nom inconnu :
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 444;}Retirer ou désactiver le site default livré avec Nginx (sudo rm /etc/nginx/sites-enabled/default) avant de déclarer son propre serveur par défaut.
Tester un site sans DNS
Section intitulée « Tester un site sans DNS »curl -I -H "Host: exemple.com" http://127.0.0.1/curl --resolve exemple.com:80:127.0.0.1 http://exemple.com/Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
| Le mauvais site s’affiche | server_name incorrect : le bloc default_server répond. sudo nginx -T | grep server_name |
conflicting server name … ignored |
Le même server_name est déclaré deux fois |
403 Forbidden |
Droits (www-data), absence d’index, ou autoindex off sur un dossier sans fichier d’index |
404 sur des routes d’application monopage |
Ajouter try_files … /index.html |
502 Bad Gateway avec PHP |
Mauvais nom de socket PHP-FPM, ou service arrêté (systemctl status php8.3-fpm) |
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Documentation : Server names
- Suite : Reverse proxy