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 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 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) :
Demander un certificat let'encrypt
Voir sur_nginx.
Sources et liens
En cas de besoin, la documentation d'nginx est très complète. La lecture des articles suivants est recommandée :