Table des matières

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 :

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 :