====== Nginx ====== ===== Installation ===== Pour Debian, installez les paquets de base : sudo apt install nginx-full Pour PHP : sudo apt install php php-gd php-imagick php-curl php-intl php-fpm Ces paquets installent les autres dépendances utiles. Pour php, les modules complémentaires sont ceux qui nous sont utiles sur Khaganat, mais suivant les CMS ils peuvent être inutiles, ou avoir besoin d'être complétés. ===== Aperçu de Nginx ===== La configuration de Nginx et des sites se trouve dans ''/etc/nginx''. nginx ├── conf.d ├── custom │ ├── acme_http-01.conf │ ├── apache_compat.conf │ ├── headers.conf │ ├── headers_nocsp.conf │ └── tls.conf ├── fastcgi.conf ├── fastcgi_params ├── koi-utf ├── koi-win ├── mime.types ├── modules-available ├── modules-enabled │ ├── 50-mod-http-auth-pam.conf -> /usr/share/nginx/modules-available/mod-http-auth-pam.conf │ ├── 50-mod-http-dav-ext.conf -> /usr/share/nginx/modules-available/mod-http-dav-ext.conf │ ├── 50-mod-http-echo.conf -> /usr/share/nginx/modules-available/mod-http-echo.conf │ ├── 50-mod-http-geoip.conf -> /usr/share/nginx/modules-available/mod-http-geoip.conf │ ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf │ ├── 50-mod-http-subs-filter.conf -> /usr/share/nginx/modules-available/mod-http-subs-filter.conf │ ├── 50-mod-http-upstream-fair.conf -> /usr/share/nginx/modules-available/mod-http-upstream-fair.conf │ ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf │ ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf │ └── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf ├── nginx.conf ├── proxy_params ├── scgi_params ├── sites-available │ ├── default │ └── test.conf ├── sites-enabled │ └── test.conf -> ../sites-available/test.conf ├── snippets │ ├── fastcgi-php.conf │ └── snakeoil.conf ├── uwsgi_params └── win-utf Le fichier principal de configuration est ''nginx.conf'', il fixe les paramètres globaux et il y a donc assez peu de raisons de le modifier. Tout comme pour [[fr:lamp|Apache]], le dossier ''sites-enabled'' contient les liens symboliques vers les fichiers de configuration des différents sites situés dans ''sites-available''. Ces autres fichiers de configuration sont inclus depuis le fichier de configuration principal nginx.conf grâce à la directive ''include''. La spécificité de Khaganat est la création du dossier ''custom'' qui contient des fichiers de configuration destinés à être inclus au cas par cas dans la configuration de chaque site. Les fichiers de ''custom'' sont les suivants : * ''acme_http-01.conf'' : Configuration nécessaire pour la résolution du challenge HTTP-01 lors d'un renouvellement de certificat initié par [[fr:acmed|ACMEd]]. * ''apache_compat.conf'' : Interdit l'accès aux fichiers dont le nom commence par ''.ht'' (notamment ''.htaccess'' et ''.htpasswd'') afin de ne pas faire fuiter les éventuels résidus de fichiers de configuration spécifiques à Apache. * ''headers.conf'' : Ajoute tous les headers HTTP classiques dont un site a normalement besoin. :!: Attention, ceci inclut des CSP très sévères. * ''headers_nocsp.conf'' : Identique à ''headers.conf'' mais n'inclut aucune CSP afin de laisser la libre configuration de ces dernières. * ''tls.conf'' : Configuration TLS. ===== Ajouter un domaine ou sous-domaine ===== Créez un fichier de configuration pour votre nom de domaine dans ''/etc/nginx/sites-available/monsite.conf''. Un exemple de fichier est disponible dans ''/etc/nginx/sites-available/default''. Copiez-le, adaptez-le, puis enregistrez-le avec un nom compréhensible. Vous pouvez vérifier que vous n'avez pas fait d'erreur de syntaxe avec la commande suivante : nginx -t Ou vous pouvez voir la configuration lue par nginx (en plus de la tester) avec cette commande : nginx -T | less Activez ensuite le site en créant un lien symbolique dans ''/etc/nginx/sites-enabled/'' : cd /etc/nginx/sites-enabled/ sudo ln -s ../sites-available/monsite.conf Puis dites à nginx de prendre en compte la nouvelle configuration en le redémarrant : sudo service nginx restart ===== Exemple de configuration ===== ==== Notre proxy ===== Exemple simple: server { listen ip.du.pro.xy:80; server_name exemple.khaganat.net; location / { proxy_pass http://IP.DE.LA.VMàjoindre; include /etc/nginx/proxy.conf; } } Création d'une conf commune : nano /etc/nginx/proxy.conf proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 512k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; Exemple plus complet: server { listen 192.168.20.10:80; server_name "exemple.khagouille.net"; return 301 https://exemple.khaganat.net$request_uri; } server { listen 192.168.20.10:443 ssl http2; server_name "exemple.khaganat.net"; ssl_certificate /etc/letsencrypt/live/exemple.khaganat.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/exemple.khaganat.net/privkey.pem; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_pass http://IP.DE.LA.VMàjoindre/; } } D'autres exemples (ajouter des liens vers les autres tuto) :\\ *[[fr:kloud#nginx|Nextcloud]] *[[fr:dokuwiki_farm#nginx|Dokuwiki]] ==== Demander un certificat let'encrypt ==== Voir [[fr:https_ssl#sur_nginx]]. ===== Sources et liens ===== * [[https://doc.ubuntu-fr.org/nginx|Documentation Ubuntu sur Nginx]] En cas de besoin, la documentation d'nginx est très complète. La lecture des articles suivants est recommandée : * [[https://www.nginx.com/resources/wiki/start/|Getting Started]] * [[https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/|Pitfalls and Common Mistakes]] * [[https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/|NGINX Reverse Proxy]] * [[https://nginx.org/en/docs/http/server_names.html|Server names]] * [[https://nginx.org/en/docs/http/ngx_http_core_module.html|Module ngx_http_core_module]] * [[https://nginx.org/en/docs/http/ngx_http_proxy_module.html|Module ngx_http_proxy_module]] {{tag>brouillon sysadmin web}}