Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| sysadmin:docker:nginx [2021/02/12 13:25] – créée yoann | sysadmin:docker:nginx [2021/02/28 18:30] (Version actuelle) – 77.192.232.26 | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ====== Nginx avec Docker ====== | ====== Nginx avec Docker ====== | ||
| - | Test de l' | + | On peut facilement lancer |
| < | < | ||
| Ligne 13: | Ligne 13: | ||
| </ | </ | ||
| - | ===== Redéfinir la configuration ===== | + | Via le navigateur, le site par défaut en HTTP est accessible à l'URL http:// |
| - | I est possible d' | + | ===== Modifier la configuration ===== |
| + | |||
| + | Il est possible d' | ||
| <code bash> | <code bash> | ||
| Ligne 22: | Ligne 24: | ||
| docker run --rm --name tmp_nginx -d nginx: | docker run --rm --name tmp_nginx -d nginx: | ||
| - | # Extraire le fichier de configuration du conteneur dans le repertoire | + | # Extraire le fichier de configuration du conteneur dans le répertoire |
| - | docker cp tmp_nginx:/ | + | docker cp tmp_nginx:/ |
| - | # Arreter | + | # Arrêter |
| docker stop -f tmp_nginx | docker stop -f tmp_nginx | ||
| Ligne 31: | Ligne 33: | ||
| # sur le nouveau conteneur | # sur le nouveau conteneur | ||
| docker run --rm --name nginx -d -p 8088:80 \ | docker run --rm --name nginx -d -p 8088:80 \ | ||
| - | -v ./nginx.conf:/ | + | -v ./default.conf:/ |
| -d nginx: | -d nginx: | ||
| </ | </ | ||
| - | Une fois le fichier de configuration | + | On peut faire également faire le choix d' |
| + | <code bash> | ||
| + | docker exec --tty --interactive container_name /bin/sh | ||
| + | </ | ||
| + | |||
| + | Une fois dans le conteneur, on modifie le fichier **/ | ||
| + | |||
| + | Pour charger la nouvelle configuration: | ||
| + | |||
| + | <code bash> | ||
| + | # demander au processus en cours d’exécution de recharger la conf modifiée | ||
| + | nginx -s reload | ||
| + | </ | ||
| + | |||
| + | Une fois le fichier de configuration souhaité obtenu, on pourra l' | ||
| + | |||
| + | <code bash> | ||
| + | # copier le fichier du conteneur dans le répertoire courant | ||
| + | docker cp container_name:/ | ||
| + | </ | ||
| + | |||
| + | Le Dockerfile ci-dessous utilisera la nouvelle configuration valide: | ||
| < | < | ||
| - | FROM nginx | + | FROM nginx: |
| - | COPY nginx.conf /etc/nginx/nginx.conf | + | COPY default.conf /etc/nginx/conf.d/ |
| + | ... | ||
| </ | </ | ||
| ===== https ===== | ===== https ===== | ||
| + | Ici on modifie la configuration de nginx, il faudra fournir le certificat et la clé privée. | ||
| + | <file conf default.conf> | ||
| + | server { | ||
| + | listen | ||
| + | listen | ||
| + | listen | ||
| + | listen | ||
| + | keepalive_timeout | ||
| + | server_name | ||
| + | ssl_certificate | ||
| + | ssl_certificate_key www.example.com.key; | ||
| + | |||
| + | #charset koi8-r; | ||
| + | # | ||
| + | |||
| + | location / { | ||
| + | root / | ||
| + | index index.html index.htm; | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | # redirect server error pages to the static page /50x.html | ||
| + | # | ||
| + | error_page | ||
| + | location = /50x.html { | ||
| + | root / | ||
| + | } | ||
| + | |||
| + | # proxy the PHP scripts to Apache listening on 127.0.0.1: | ||
| + | # | ||
| + | #location ~ \.php$ { | ||
| + | # proxy_pass | ||
| + | #} | ||
| + | |||
| + | # pass the PHP scripts to FastCGI server listening on 127.0.0.1: | ||
| + | # | ||
| + | #location ~ \.php$ { | ||
| + | # root html; | ||
| + | # fastcgi_pass | ||
| + | # fastcgi_index | ||
| + | # fastcgi_param | ||
| + | # include | ||
| + | #} | ||
| + | |||
| + | # deny access to .htaccess files, if Apache' | ||
| + | # concurs with nginx' | ||
| + | # | ||
| + | #location ~ /\.ht { | ||
| + | # deny all; | ||
| + | #} | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Le répertoire courant contient: | ||
| + | * Le fichier de configuration de nginx: default.conf | ||
| + | * Le certificat du site (www.example.com.crt, | ||
| + | * La clé privée ici nommée d' | ||
| + | * Le Dockerfile présenté ci-dessous | ||
| + | |||
| + | <file txt Dockerfile> | ||
| + | FROM nginx: | ||
| + | COPY default.conf / | ||
| + | COPY www.example.com.crt /etc/nginx | ||
| + | COPY www.example.com.key /etc/nginx | ||
| + | |||
| + | EXPOSE 80/tcp | ||
| + | EXPOSE 443/tcp | ||
| + | </ | ||
| + | |||
| + | On peut lancer la construction de l' | ||
| <code bash> | <code bash> | ||
| Ligne 50: | Ligne 145: | ||
| # creation et execution du conteneur | # creation et execution du conteneur | ||
| - | docker container run --name | + | docker container run --detach |
| + | </ | ||
| + | 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:// | ||
| + | |||
| + | ===== Execution de scripts shell ===== | ||
| + | |||
| + | **fcgiwrap** permet d’exécuter des scripts shell. Utiliser le gestionnaire de paquetage propre à la distribution pour l' | ||
| + | |||
| + | <code bash> | ||
| + | apk add fcgiwrap spawn-fcgi | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | spawn-fcgi -u fcgiwrap -g www-data -S -s / | ||
| + | </ | ||
| + | |||
| + | ==== Troubleshooting ==== | ||
| + | |||
| + | Lors de l’exécution d'un script CGI une page d' | ||
| + | |||
| + | < | ||
| + | 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, | ||
| + | </ | ||
| + | |||
| + | 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; | ||
| + | |||
| + | < | ||
| + | |||
| + | server { | ||
| + | # ... | ||
| + | | ||
| + | location /info { | ||
| + | gzip off; | ||
| + | root / | ||
| + | access_log on; # pour ne pas logger les accès | ||
| + | autoindex off; # empeche l' | ||
| + | # include fastcgi_params; | ||
| + | fastcgi_param SCRIPT_FILENAME / | ||
| + | fastcgi_pass unix:/ | ||
| + | } | ||
| + | |||
| + | # ... | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | Le script shell doit commencer par retourner le header minimal | ||
| + | <code bash> | ||
| + | #!/bin/sh | ||
| + | echo " | ||
| + | echo "" | ||
| + | echo "" | ||
| + | |||
| + | ... | ||
| </ | </ | ||
| Ligne 58: | Ligne 209: | ||
| * https:// | * https:// | ||
| * http:// | * http:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * https:// | ||
| + | |||