Aller au contenu

13. Configuration des blocs serveur Nginx

Les blocs serveur Nginx (similaires aux hôtes virtuels d’Apache) vous permettent d’héberger plusieurs sites web sur un seul serveur. Chaque site web peut avoir sa propre configuration, son propre répertoire racine et son propre nom de domaine.

Un bloc serveur est défini dans la directive server { } des fichiers de configuration Nginx. Décortiquons les composants d’un bloc serveur en le construisant étape par étape :

Le bloc serveur le plus basique est simplement un bloc vide :

server {
# Les directives de configuration vont ici
}

Ensuite, nous spécifions sur quel port Nginx doit écouter (généralement le port 80 pour HTTP) :

server {
listen 80;
# Plus de directives de configuration
}

La directive server_name indique à Nginx quels noms de domaine doivent être gérés par ce bloc serveur :

server {
listen 80;
server_name example.com www.example.com;
# Plus de directives de configuration
}

La directive root définit l’emplacement des fichiers du site web :

server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
# Plus de directives de configuration
}

13.2.5. Définition du fichier d’index par défaut

Section intitulée « 13.2.5. Définition du fichier d’index par défaut »

La directive index spécifie quel fichier doit être servi lorsqu’un répertoire est demandé :

server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html index.htm;
# Plus de directives de configuration
}

Le bloc location / avec la directive try_files est crucial pour que WordPress gère les permaliens personnalisés :

server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# Plus de directives de configuration
}

Enfin, nous ajoutons un bloc location pour gérer les fichiers PHP et les transmettre à PHP-FPM :

server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}

13.3. Amélioration des blocs serveur avec des optimisations de performance

Section intitulée « 13.3. Amélioration des blocs serveur avec des optimisations de performance »

Un bloc serveur basique fonctionne bien, mais nous pouvons l’améliorer avec des optimisations de performance comme la journalisation, la mise en cache du navigateur et le réglage FastCGI.

13.3.1. Ajout de la configuration de journalisation

Section intitulée « 13.3.1. Ajout de la configuration de journalisation »

Pour une meilleure surveillance et un meilleur dépannage, ajoutez des journaux d’accès et d’erreur personnalisés pour chaque site :

server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
# Configuration de journalisation personnalisée
access_log /var/log/nginx/access_example.com.log combined buffer=256k flush=60m;
error_log /var/log/nginx/error_example.com.log;
}

Les paramètres buffer et flush optimisent les performances d’écriture des journaux en mettant les entrées en tampon en mémoire et en les écrivant périodiquement sur le disque.

13.3.2. Mise en place de la mise en cache du navigateur

Section intitulée « 13.3.2. Mise en place de la mise en cache du navigateur »

La mise en cache du navigateur améliore significativement les performances du site web en indiquant aux navigateurs de stocker les ressources statiques localement. Créez un fichier de configuration réutilisable pour la mise en cache du navigateur :

# Créer un répertoire pour les includes s'il n'existe pas
sudo mkdir -p /etc/nginx/includes/
# Créer le fichier de configuration de mise en cache du navigateur
sudo vim /etc/nginx/includes/browser_caching.conf

Ajoutez le contenu suivant au fichier :

# Mettre en cache les images et fichiers multimédias pendant 1 an
location ~* \.(webp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
access_log off;
}
# Mettre en cache les fichiers JavaScript pendant 30 jours
location ~* \.(js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}
# Mettre en cache les fichiers CSS pendant 30 jours
location ~* \.(css)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}
# Mettre en cache les polices web pendant 30 jours
location ~* \.(eot|svg|ttf|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}

FastCGI est le protocole utilisé pour communiquer entre Nginx et PHP-FPM. L’optimisation de ces paramètres peut améliorer les performances :

# Créer le fichier de configuration d'optimisation FastCGI
sudo vim /etc/nginx/includes/fastcgi_optimize.conf

Ajoutez le contenu suivant au fichier :

# Paramètres de délai de connexion
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
# Paramètres de tampon pour le traitement des réponses
fastcgi_buffer_size 512k;
fastcgi_buffers 512 16k;
fastcgi_busy_buffers_size 1m;
fastcgi_temp_file_write_size 4m;
fastcgi_max_temp_file_size 4m;
# Gestion des erreurs
fastcgi_intercept_errors on;

13.4. Création d’une configuration complète de bloc serveur

Section intitulée « 13.4. Création d’une configuration complète de bloc serveur »

Maintenant, rassemblons tout pour créer une configuration complète de bloc serveur pour un site WordPress :

# Créer un nouveau fichier de configuration de bloc serveur
sudo vim /etc/nginx/sites-available/example.com.conf

Ajoutez la configuration complète suivante :

server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php;
# Permaliens personnalisés WordPress
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# Traitement PHP avec paramètres FastCGI optimisés
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
include /etc/nginx/includes/fastcgi_optimize.conf;
}
# Inclure les règles de mise en cache du navigateur
include /etc/nginx/includes/browser_caching.conf;
# Journalisation personnalisée
access_log /var/log/nginx/access_example.com.log combined buffer=256k flush=60m;
error_log /var/log/nginx/error_example.com.log;
}

Après avoir créé la configuration du bloc serveur, vous devez l’activer en créant un lien symbolique dans le répertoire sites-enabled :

# Vérifier les sites existants
cd /etc/nginx/
ls sites-available/ sites-enabled/
# Créer un lien symbolique pour activer le site
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
# Vérifier que le lien a été créé
ls -l sites-enabled/

Avant de recharger Nginx, il est important de tester la configuration pour s’assurer qu’il n’y a pas d’erreurs de syntaxe :

# Tester la configuration Nginx
sudo nginx -t

Si le test est réussi, rechargez Nginx pour appliquer les modifications :

# Recharger Nginx
sudo systemctl reload nginx

Enfin, assurez-vous que le répertoire racine web existe et a les permissions correctes :

# Créer le répertoire racine web s'il n'existe pas
sudo mkdir -p /var/www/example.com/public_html
# Définir la propriété correcte (ajustez le nom d'utilisateur si nécessaire)
sudo chown -R www-data:www-data /var/www/example.com/public_html
# Définir les permissions correctes
sudo chmod -R 755 /var/www/example.com/public_html
# Vérifier le répertoire
ls -la /var/www/example.com/public_html/

Avec ces étapes terminées, votre serveur Nginx est maintenant configuré pour servir votre site WordPress. Dans la section suivante, nous verrons comment installer WordPress dans cet environnement préparé.