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:bkp-srv:docker-nginx-proxy [2023/09/27 12:49] – [Forcer la demande d'un certificat] jpmilcentserveurs:installation:bkp-srv:docker-nginx-proxy [2025/10/15 08:28] (Version actuelle) – [Partager les logs Nginx avec l'hôte] jpmilcent
Ligne 10: Ligne 10:
     * Note : plusieurs domaines ou sous-domaines peuvent être indiqué en les séparant par une virgule. Le premier sera le principal.     * Note : plusieurs domaines ou sous-domaines peuvent être indiqué en les séparant par une virgule. Le premier sera le principal.
     * ATTENTION : les domaines avec wildcard "*" ne sont pas encore supporté.     * ATTENTION : les domaines avec wildcard "*" ne sont pas encore supporté.
 +
 +===== Partager les logs Nginx avec l'hôte =====
 +
 +<note tip>Une amélioration possible serait de créer un utilisateur ''nginx'' ou ''www-data'' sur l'hôte puis d'utiliser les identifiant de cet utilisateur dans le container nginx-proxy. Cela permettrait d'avoir des droits cohérents entre le container et l'hôte pour les fichiers de logs.</note>
 +
 +  * Pourquoi ?
 +    * Afin de pouvoir faire fonctionner correctement le service Fail2ban de l'hôte qui se base sur les logs Nginx
 +  * Problèmes :
 +    * transférer les IP des clients dans le container Nginx et éviter de voir dans les logs Nginx l'IP de la Gateway du réseau Docker
 +    * activer correctement Logrotate pour que Nginx présent dans le container gère correctement la création de nouveaux fichiers de log : propriété correcte et écriture des logs dans le nouveau fichier.
 +  
 +  * Sur l'hôte : 
 +    * Créer un dossier ''/var/log/nginx/'' avec : <code bash>mkdir /var/log/nginx/</code>
 +      * Donner les bons droits : <code bash>chown root:adm /var/log/nginx/ ; chmod 640 /var/log/nginx/</code>
 +    * Créer les fichiers par défaut avec : <code bash>touch /var/log/nginx/access.log /var/log/nginx/error.log</code>
 +      * Donner les bons droits aux fichiers de base. C'est important car nous utilisons ''copytruncate'' dans la conf Logrotate: 
 +        * Se connecter au service nginx-proxy : <code bash>docker exec -it nginx-proxy bash</code>
 +        * Regarder l'id de l'utilisateur Nginx avec la commande ''id''.
 +        * Puis modifier la propriété des fichiers de log : <code bash>chown 101:adm *.log</code>
 +    * Ajouter le paquet ''logrotate'' avec : <code bash>apt install logrotate</code>
 +    * Créer un nouveau fichier de conf logrotate : <code bash> touch /etc/logrotate.d/nginx</code>
 +      * Y placer le contenu suivant (vérifier les chemins utilisés !) : <code bash>
 +/var/log/nginx/*.log {
 +    daily
 +    missingok
 +    rotate 400
 +    compress
 +    delaycompress
 +    notifempty
 +    su root adm
 +    # User "nginx" in container has an id of 101
 +    #create 0640 101 adm
 +    # To avoid permission issues with directory and files shared between host and container: see copytruncate
 +    copytruncate
 +    dateext
 +    dateyesterday
 +    dateformat .%Y-%m-%d
 +    sharedscripts
 +    postrotate
 +        cd /home/admin/docker/proxy/ \
 +        && /usr/bin/docker compose kill -s USR1 nginx-proxy
 +    endscript
 +}
 +</code>
 +    * Modifier le fichier ''docker-compose.yml'' de la stack ''proxy'' dans ''/home/admin/docker/'' en tant qu'utilisateur ''admin'' :
 +      * le service ''nginx-proxy'' doit contenir :<code yaml>network_mode: "host"</code>
 +        * Le mode "hôte" permet d'obtenir les IP réelles des clients dans les logs Nginx avec la variable ''$remote_addr''
 +      * commenter la section ''ports:'' sinon l'erreur ''! nginx-proxy Published ports are discarded when using host network mode'' apparaîtra.
 +      * Ajouter dans la section ''volumes:'' l'entrée suivante :<code yaml>
 +volumes:
 +  - /var/log/nginx/:/var/log/nginx/
 +</code>
 +    * Modifier le fichier ''nginx.conf'' avec : <code nginx>
 +http {
 +    # Enabling request time
 +    log_format enhanced-fmt '$remote_addr $host $remote_user [$time_local] '
 +        '"$request" $status $body_bytes_sent '
 +        '"$http_referer" "$http_user_agent" '
 +        'rt="$request_time" uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time" '
 +        'gzr="$gzip_ratio" ';
 +    access_log /var/log/nginx/access.log enhanced-fmt;
 +    error_log /var/log/nginx/error.log;
 +}
 +</code> 
 +  * Relancer la stack ''proxy'' avec : <code bash>docker compose down && docker compose up -d</code>
 +  * Vérifier que les logs sont écris dans le fichier ''/var/log/nginx/access.log''
 +  * Tester la config Logrotate avec : <code bash>logrotate -f /etc/logrotate.d/nginx</code>
  • serveurs/installation/bkp-srv/docker-nginx-proxy.1695818964.txt.gz
  • Dernière modification : 2023/09/27 12:49
  • de jpmilcent