Les directives de la section http du fichier nginx.conf
Dans la leçon précédente, nous avons vu quelques directives du fichier nginx.conf.
Nous allons maintenant, nous concentrer sur les directives de la section « http ».
Section : http
Pour commencer, nous allons créer la section « http ».
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
}
Directive : sendfile (http)
Cette directive est intéressante, car elle nous informe de quelle façon les fichiers doivent être transférés du serveur vers le client.
Si « sendfile » est activé, les fichiers sont transférés du disque dur au client. Sinon si cette directive est désactivée, le transfert de fichier passe par la mémoire vive avant d’arriver vers le navigateur du client.
Par défaut, Nginx active cette directive et c’est ce que nous allons faire.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
}
Directive : tcp_nopush (http)
Très simplement, la directive « tcp_nopush », lorsqu’elle est activée, essaye de regrouper plusieurs paquets de données dans un seul paquet.
En général et dans la plupart des situations, cela améliore les performances.
Nous allons activer la directive.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
}
MIME et extension
Avant de poursuivre, il faut bien comprendre deux expressions ainsi que la relation qu’ils ont l’un avec l’autre.
C’est le « MIME » (Multipurpose Internet Mail Extension) et les « extensions » de fichiers.
Le « MIME » est un format standard utilisé pour identifier le type d’un fichier. L’« extension » du fichier fait partie du nom du fichier et il se trouve à la fin. Ce suffixe indique également le type de fichier.
Le « MIME » est utilisé dans les en-têtes de requête et de réponse HTTP pour identifier le type d’un fichier. Ensuite, Nginx fait la correspondance entre le « MIME » et l’« extension » du fichier.
Directive : types_hash_max_size (http)
Cette directive spécifie la taille maximale de la table de hachage utilisée pour stocker les types de fichiers MIME et les extensions.
Cela permet de faire la correspondance rapide entre le MIME et l’extension.
Cette table est remplie avec les informations que l’on retrouve dans le fichier mime.types (voir sous-titre correspondant).
Garder juste à l’esprit que cette table doit être suffisamment grande pour améliorer les performances de Nginx.
La valeur 2048 est celle par défaut. Nous allons enregistrer également cette valeur.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
}
Directive : include (http)
Vous allez retrouver cette directive plusieurs fois dans le fichier de configuration nginx.conf.
En effet, elle est très importante. Elle permet d’inclure un autre fichier dans la configuration. Cela permet de bien organiser le contenu du fichier nginx.conf en séparant certaines informations dans d’autres fichiers.
Le schéma ci-dessous illustre bien ce que nous venons de dire.
include /etc/nginx/mime.types;
Nous allons tout de suite utiliser « include ».
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
}
Nous avons inclus un fichier qui se trouve à l’emplacement suivant /etc/nginx/mime.types
.
Cela permet d’indiquer à Nginx une liste des types de fichiers MIME associés aux extensions de fichiers.
La table de hachage récoltera les informations (MIME ➝ extension) à partir du contenu de ce fichier.
Vérifier le contenu du fichier mime.types
Nous allons ouvrir le fichier mime.types
.
Pour cela, tapez les commandes suivantes dans un autre onglet de votre terminal de votre serveur.
cd /etc/nginx/
cd cat mime.types
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
image/svg+xml svg svgz;
image/webp webp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.wap.wmlc wmlc;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
Par conséquent, si vous avez bien compris ce que nous avons expliqué plus haut, vous comprenez que le contenu affiché (le bloc types {}) sera inclus (grâce à « include ») dans le fichier nginx.conf.
Directive : default_type (http)
La directive « default_type » indique le type de contenu par défaut d’un fichier qui n’a pas d’extension.
Nous allons utiliser le type par défaut suivant : text/html. Vous pouvez changer cette valeur si vous le souhaitez selon ce que votre serveur transmettra comme fichier.
Cependant, je vous encourage à spécifier une extension sur chaque fichier que vous déposerez dans votre serveur. Ainsi Nginx sera quoi faire avec ce fichier et le « default_type » ne sera jamais utilisé.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type text/html;
}
Directive : ssl_protocols (http)
La directive « ssl_protocols » indique les protocoles de sécurité SSL/TLS activés pour les connexions HTTPS.
Il est généralement recommandé d’activer les protocoles les plus récents et les plus sécurisés.
C’est ce que nous allons faire.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type text/html;
ssl_protocols TLSv1.2 TLSv1.3;
}
Si vous craignez un problème de comptabilité, remplacez la directive par les valeurs : ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
.
Directive : ssl_prefer_server_ciphers (http)
La valeur de la directive « ssl_prefer_server_ciphers » par défaut dans le fichier nginx.cong est à « on ».
Mais que signifie cette directive 🧐 ?
La directive « ssl_prefer_server_ciphers » est utilisée pour indiquer au serveur SSL/TLS se servir des algorithmes de chiffrement du serveur (Nginx) et non ceux du client (navigateur) lorsqu’il est nécessaire d’établir une connexion SSL/TLS.
La liste des algorithmes est décrite dans une autre directive.
Cette directive se nomme « ssl_ciphers » et nous en parlerons juste après.
De notre côté, nous allons laisser la valeur par défaut.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type text/html;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
}
Directive : ssl_ciphers (http)
La directive « ssl_ciphers » indique la liste des algorithmes de chiffrement qui sont utilisés pour sécuriser les communications entre le client et le serveur.
Il est fortement recommandé de configurer cette directive avec une liste de chiffrement compatible avec les clients (les navigateurs web). Sinon, il pourrait y avoir un risque d’incompatibilité avec les clients. Par conséquent, la communication entre le client et le serveur serait impossible 😞.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type text/html;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;
}
Bien souvent, la directive « ssl_ciphers » est indiquée dans un autre fichier de configuration (dans le dossier sites-enabled
) et dans une autre section (server{}
).
Le mieux, pour ne pas se tromper dans les algorithmes, est d’utiliser un outil qui configurera la mise en place d’une connexion HTTPS. Par exemple, il y a Certbot qu’il est possible d’utiliser sur Nginx.
Directive : access_log (http)
Cette directive (access_log) indique le chemin du fichier qui contiendra la journalisation des accès dans Nginx.
La journalisation garde une trace de toutes les demandes d’accès qui ont été effectuées sur le serveur. Par exemple, ce fichier contiendra les pages web visitées, les fichiers téléchargés, les erreurs rencontrées, les informations de connexion…
Généralement, ce fichier se trouve dans le dossier /var/log/nginx/
et le fichier s’appelle access.log
.
Nous allons compléter le fichier nginx.conf.
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type text/html;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;
access_log /var/log/nginx/access.log;
}
Directive : error_log (http)
Afin d’enregistrer les éventuelles erreurs de notre serveur Nginx, des fichiers d’erreurs sont créés.
Par défaut, Nginx utilise un seul fichier d’erreur (error_log /var/log/nginx/error.log;
). Mais nous, nous allons procéder d’une manière différente. Nous allons séparer les messages d’erreurs dans 4 fichiers selon leurs gravités.
Allons-y 😓 !
user www.data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type text/html;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/notice.log notice;
error_log /var/log/nginx/warn.log warn;
error_log /var/log/nginx/error.log error;
error_log /var/log/nginx/crit.log crit;
}
La suite dans la leçon suivante
Nous allons nous arrêter avec cette dernière directive. Mais les choses ne sont pas terminées et l’écriture du fichier « nginx.conf » n’est pas finie.
Nous allons continuer dans la leçon suivante.