serveurs:installation:web-srv:nginx

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveurs:installation:web-srv:nginx [2021/04/21 14:25] – [Ajouter le support des fichiers d'authentification HTTP] jpmilcentserveurs:installation:web-srv:nginx [2023/08/03 13:47] (Version actuelle) – [Ajouter le support de GeoIp] jpmilcent
Ligne 4: Ligne 4:
  
 ===== Installation ===== ===== Installation =====
-  * Installer //Nginx// et //Certbot// : ''sudo aptitude install supervisor nginx python3-certbot-nginx python3-certbot-dns-ovh ''+  * Installer //Nginx// et //Certbot// : ''sudo apt install nginx python3-certbot-nginx python3-certbot-dns-ovh ''
   * Activer le redémarrage automatique du service : ''systemctl enable nginx.service''   * Activer le redémarrage automatique du service : ''systemctl enable nginx.service''
-  * Activer le démarrage automatique du service Systemd lançant deux fois par jour ''certbot renew'' : ''systemctl enable certbot.timer''+  * Activer le démarrage automatique du service Systemd lançant deux fois par jour ''certbot renew'' avec : ''systemctl enable certbot.timer''
     * Vérifier le status et démarrer le service si nécessaire : ''systemctl status certbot.timer''     * Vérifier le status et démarrer le service si nécessaire : ''systemctl status certbot.timer''
  
Ligne 45: Ligne 45:
 ===== Modification du format des logs ===== ===== Modification du format des logs =====
 Modifier les logs d'accès (ajout d'infos) pour Telegraf et GoAccess :  Modifier les logs d'accès (ajout d'infos) pour Telegraf et GoAccess : 
-  * Éditer la conf de Nginx ''vi /etc/nginx/nginx.conf'' et remplacer la section Log contenant :<code nginx>+  * Éditer la conf de Nginx ''vi /etc/nginx/nginx.conf'' et remplacer dans la section ''http {...}'' contenant :<code nginx>
       access_log /var/log/nginx/access.log;       access_log /var/log/nginx/access.log;
-      error_log /var/log/nginx/error.log; 
 </code> </code>
     * Par le contenu suivant : <code nginx>     * Par le contenu suivant : <code nginx>
 # Enabling request time # Enabling request time
-log_format enhanced-fmt '$remote_addr $remote_user [$time_local] '+log_format enhanced-fmt '$remote_addr $host $remote_user [$time_local] '
     '"$request" $status $body_bytes_sent '     '"$request" $status $body_bytes_sent '
     '"$http_referer" "$http_user_agent" '     '"$http_referer" "$http_user_agent" '
Ligne 58: Ligne 57:
  
 access_log /var/log/nginx/access.log enhanced-fmt; access_log /var/log/nginx/access.log enhanced-fmt;
-error_log /var/log/nginx/error.log; 
 </code> </code>
 +**ATTENTION** : vérifier la présence du nom de domaine de l'hôte virtuel (''$host'') dans les logs d’accès.
 ===== Configuration de la compression ===== ===== Configuration de la compression =====
 Activer la compression Gzip du contenu renvoyé par Nginx pour tous les types Mime (JS, CSS...) :  Activer la compression Gzip du contenu renvoyé par Nginx pour tous les types Mime (JS, CSS...) : 
Ligne 109: Ligne 107:
     text/x-cross-domain-policy;     text/x-cross-domain-policy;
 </code> </code>
 +
 +===== Configuration de la taille maximum des fichiers téléverssables =====
 +  * Il est nécessaire d'ajouter la ligne suivante soit au niveau du fichier de configuration globale (''vi /etc/nginx/nginx.conf'') soit dans la section ''server'' du fichier de configuration d'un domaine : <code nginx>
 +    client_max_body_size 12M;
 +</code>
 +  * Indiquer la taille maximum des fichiers téléverssables en Méga Octets. Dans l'exemple ci-dessus, 12Mo.
 +
 ===== Ajouter le support de GeoIp ===== ===== Ajouter le support de GeoIp =====
   * Vérifier le support de GeoIp par Ngninx : ''nginx -V 2>&1 | grep -o with-http_geoip_module''   * Vérifier le support de GeoIp par Ngninx : ''nginx -V 2>&1 | grep -o with-http_geoip_module''
-  * GeoIP n'est plus maintenu => geoip2 dont le module et le support dans Nginx nécessite [[https://github.com/leev/ngx_http_geoip2_module#user-content-download-maxmind-geolite2-database-optional|la compilation du module]] +  * GeoIP n'est plus maintenu => geoip2 dont le module et le support dans Nginx nécessite [[https://github.com/leev/ngx_http_geoip2_module#user-content-download-maxmind-geolite2-database-optional|la compilation du module]] mais depuis Debian 11 un module ''GeoIP2'' existe dans [[https://packages.debian.org/bullseye/nginx-full| le paquet pour la version Debian 11 Bullseye]]. 
-    * À voir plus tard... +  * Debian 11+ : installer le module avec : ''apt install libnginx-mod-http-geoip2'' 
-  * Apparemment, un module ''GeoIP2'' existe dans [[https://packages.debian.org/bullseye/nginx-full| le paquet pour la version Debian 11 Bullseye]]. A voir lors de la mise à jour vers Debian 11+
  
 ===== Ajouter le support des fichiers d'authentification HTTP ===== ===== Ajouter le support des fichiers d'authentification HTTP =====
-  * Installer le paquet suivant : ''aptitude install apache2-utils''+  * Installer le paquet suivant : ''apt install apache2-utils''
   * Pour créer une fichier //.htpasswd// : ''htpasswd -c /etc/nginx/.htpasswd <user-name-1>''   * Pour créer une fichier //.htpasswd// : ''htpasswd -c /etc/nginx/.htpasswd <user-name-1>''
   * Ensuite, pour ajouter des utilisateurs (sans l'option ''-c'') : ''htpasswd /etc/nginx/.htpasswd <user-name-2>''   * Ensuite, pour ajouter des utilisateurs (sans l'option ''-c'') : ''htpasswd /etc/nginx/.htpasswd <user-name-2>''
Ligne 163: Ligne 168:
   * Vérifier la présence du texte //(overrided)// dans la description du service : '' systemctl status nginx ''   * Vérifier la présence du texte //(overrided)// dans la description du service : '' systemctl status nginx ''
   * Redémarrer la machine, attendre son redémarrage, s'y reconnecter et s'assurer que Nginx est bien démarré : '' systemctl status nginx ''   * Redémarrer la machine, attendre son redémarrage, s'y reconnecter et s'assurer que Nginx est bien démarré : '' systemctl status nginx ''
 +
 +===== Création d'un certificat SSL avec Certbot =====
 +D'une manière générale la démarche à suivre pour créer un certificat SSL chez Letsencrypt à l'aide de Certbot :
 +  * Installer un certificat SSL via Certbot (Letsencrypt) : ''<nowiki> certbot --nginx -d <domaine-principal> -d <alias-du-domaine-principal> </nowiki>''
 +    * Ex. pour PACA : ''<nowiki> certbot --nginx -d expert.silene.eu -d geonature.silene.eu </nowiki>''
 +  * Lors de la première utilisation de certbot sur un serveur, il est nécessaire d'indiquer l'email de l'utilisateur qui sera prévenu en cas de besoin de renouvellement d'un domaine :
 +    * Email à fournir : adminsys@<domaine-sinp>
 +    * Pour les 2 questions suivantes, répondre : A -> N
 +    * Lors de la demande de redirection du HTTP vers HTTPS, il est souhaitable de réponde 1 afin de le configurer manuellement comme indiqué ci-dessous. Dans le cas contraire, répondre 2.
 +      * Si vous avez répondu 2, vous pouvez tester immédiatement la redirection auto de HTTP vers HTTPS : <nowiki>http://<domaine-principal>/</nowiki> -> doit rediriger vers HTTPS automatiquement
 +  * Tester les configurations SSL : 
 +    * https://www.ssllabs.com/ssltest/analyze.html?d=<domaine-principal>
 +    * https://www.ssllabs.com/ssltest/analyze.html?d=<alias-du-domaine-principal>
 +  * Exemple de fichier de conf Nginx contenant la redirection HTTP vers HTTPS (en 302 afin d'éviter d'éventuel problème de mise en cache par les navigateurs toujours difficile à résoudre) et le HTTP2 : <code nginx>
 +server {
 +    listen 443 ssl http2;
 +    listen [::]:443 ssl http2;
 +
 +    server_name <domaine-principal>;
 +    root /chemine/vers/dossier/racine/html;
 +
 +    # Exemple pour une API Python utilisant Gunicorn
 +    location ^~ "/api/" {
 +        proxy_set_header X-Forwarded-Host $host:$server_port;
 +        proxy_set_header X-Forwarded-Server $host;
 +        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +        proxy_set_header X-Forwarded-Proto $scheme;
 +    
 +        # Set timeout like Gunicorn in API
 +        proxy_read_timeout 300s;
 +        proxy_connect_timeout 75s;
 +        proxy_pass http://127.0.0.1:8000/;# ATTENTION : bien mettre un slash final ! Sinon => 404
 +    }
 +
 +    ssl_certificate /etc/letsencrypt/live/<domaine-principal>/fullchain.pem; # managed by Certbot
 +    ssl_certificate_key /etc/letsencrypt/live/<domaine-principal>/privkey.pem; # managed by Certbot
 +    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
 +    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 +}
 +
 +server {
 +    listen 443 ssl http2;
 +    listen [::]:443 ssl http2;
 +    server_name <alias-domaine-principal>;
 +
 +    ssl_certificate /etc/letsencrypt/live/<domaine-principal>/fullchain.pem; # managed by Certbot
 +    ssl_certificate_key /etc/letsencrypt/live/<domaine-principal>/privkey.pem; # managed by Certbot
 +    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
 +    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 +
 +    return 302 https://<alias-domaine-principal>$request_uri;
 +}
 +
 +server {
 +    listen 80; 
 +    listen [::]:80;
 +    server_name <domaine-principal> <alias-domaine-principal>;
 +    return 302 https://<domaine-principal>$request_uri;
 +}
 +</code>
 +
 +===== Suppression d'un certificat SSL avec Certbot =====
 +Si vous souhaitez supprimer une certificat SSL créé par l'intermédiaire de Certbot, utiliser la commande : ''<nowiki> sudo certbot delete --cert-name <domaine>.<ext> </nowiki>''
 +
  • serveurs/installation/web-srv/nginx.1619015142.txt.gz
  • Dernière modification : 2021/04/21 14:25
  • de jpmilcent