Outils pour utilisateurs

Outils du site


sysadmin:docker: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édentesRévision précédente
Prochaine révision
Révision précédente
sysadmin:docker:nginx [2021/02/13 12:29] 77.192.232.26sysadmin:docker:nginx [2021/02/28 18:30] (Version actuelle) 77.192.232.26
Ligne 16: Ligne 16:
  
 ===== Modifier la configuration ===== ===== Modifier la configuration =====
 + 
 Il est possible d'extraire le fichier de configuration par défaut du container, de le modifier et de relancer un conteneur avec la nouvelle configuration: Il est possible d'extraire le fichier de configuration par défaut du container, de le modifier et de relancer un conteneur avec la nouvelle configuration:
  
Ligne 37: Ligne 37:
 </code> </code>
  
-Une fois le fichier de configuration modifié, il également être intégré à une image personnalisée via un Dockerfile:+On peut faire également faire le choix d'ouvrir un terminal interactif et de modifier le fichier de configuration depuis l’intérieur conteneur car celui-ci contient un système minimal Alpine Linux et un shell:
  
 +<code bash>
 +docker exec --tty --interactive container_name /bin/sh
 +</code>
 +
 +Une fois dans le conteneur, on modifie le fichier **/etc/nginx/conf.d/default.conf**
 +
 +Pour charger la nouvelle configuration:
 +
 +<code bash>
 +# demander au processus en cours d’exécution de recharger la conf modifiée
 +nginx -s reload
 +</code>
 +
 +Une fois le fichier de configuration souhaité obtenu, on pourra l'extraire du conteneur avec la commande **docker cp** puis l'utiliser pour générer une image personnalisée via un Dockerfile:
 +
 +<code bash>
 +# copier le fichier du conteneur dans le répertoire courant
 +docker cp container_name:/etc/nginx/conf.d/default.conf .
 +</code>
 +
 +Le Dockerfile ci-dessous utilisera la nouvelle configuration valide:
 <file> <file>
-FROM nginx+FROM nginx:stable-alpine
 COPY default.conf /etc/nginx/conf.d/default.conf COPY default.conf /etc/nginx/conf.d/default.conf
 ... ...
Ligne 129: Ligne 150:
 Modifier le fichier /etc/hosts ou la configuration du DNS pour résoudre correctement www.example.com. Modifier le fichier /etc/hosts ou la configuration du DNS pour résoudre correctement www.example.com.
 Le site en https est accessible à l'URL https://www.example.com. Le site en https est accessible à l'URL https://www.example.com.
 +
 +===== Execution de scripts shell =====
 +
 +**fcgiwrap** permet d’exécuter des scripts shell. Utiliser le gestionnaire de paquetage propre à la distribution pour l'installer.
 +
 +<code bash>
 +apk add fcgiwrap spawn-fcgi
 +</code>
 +
 +<code bash>
 +spawn-fcgi -u fcgiwrap -g www-data -S -s /run/fcgiwrap/fcgiwrap.socket -P /run/fcgiwrap/fcgiwrap.pid -- /usr/bin/fcgiwrap
 +</code>
 +
 +==== Troubleshooting ====
 +
 +Lors de l’exécution d'un script CGI une page d'erreur est affichée (502), les logs indiquent:
 +
 +<file>
 +2021/02/27 17:19:22 [error] 21#21: *1 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: 172.21.0.2, server: red.labinfo.mairie.local, request: "GET /cgi HTTP/1.1", upstream: "fastcgi://unix:/run/fcgiwrap/fcgiwrap.socket:", host: "red.labinfo.mairie.local"
 +</file>
 +
 +Cette erreur s'est produite lorsque:
 +  - La configuration de la localisation sous nginx ne mentionnait pas le répertoire contenant les script via la directive **root**;
 +  - Le script CGI ne commençait pas sa réponse avec un header minimal Content-type suivi de 2 retours à la ligne;
 +
 +<file>
 +
 +server {
 +  # ...
 +  
 +  location /info {
 +    gzip off;
 +    root /srv/fcgiwrap;
 +    access_log on;           # pour ne pas logger les accès 
 +    autoindex off;           # empeche l'indexation et affichage des dossier du serveur
 +    # include fastcgi_params;  # contient les noms des variables CGI /etc/nginx/fastcgi_params;
 +    fastcgi_param SCRIPT_FILENAME /srv/fcgiwrap/service_info.sh;
 +    fastcgi_pass unix:/run/fcgiwrap.sock;
 +    }
 +
 +  # ...
 +
 +}
 +</file>
 +
 +Le script shell doit commencer par retourner le header minimal
 +<code bash>
 +#!/bin/sh
 +echo "Content-type: text/html"
 +echo ""
 +echo ""
 +
 +...
 +</code>
  
 ===== Références ===== ===== Références =====
Ligne 134: Ligne 209:
   * https://hub.docker.com/_/nginx   * https://hub.docker.com/_/nginx
   * http://nginx.org/en/docs/beginners_guide.html#conf_structure   * http://nginx.org/en/docs/beginners_guide.html#conf_structure
 +  * https://www.stechies.com/upstream-prematurely-closed-fastcgi-stdout-while-reading-re/
 +  * https://blog.behrouze.com/cgi-shell-nginx/
 +  * https://linuxconfig.org/simple-cgi-and-apache-examples-on-ubuntu-linux
 +  * http://chriswu.me/blog/writing-hello-world-in-fcgi-with-c-plus-plus/
 +  * https://serverfault.com/questions/474215/serve-a-fastcgi-through-nginx
 +
sysadmin/docker/nginx.1613219348.txt.gz · Dernière modification : 2021/02/13 12:29 de 77.192.232.26