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.

Activer ou désactiver sendfile dans nginx.conf

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.

Correspondance MIME et extension

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.

Attribut include dans nginx.conf

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.