Aide mémoire Nginx
Petit mémo pour récapituler quelques points de config pour nginx
1. Reverse proxy avec Nginx
Exemple de configuration dans /etc/nginx/sites_available/default
:
server {
listen 192 default_server ssl;
ssl_certificate /etc/ssl/www/certificat.crt;
ssl_certificate_key /etc/ssl/www/certificat.key;
error_page 497 =301 https://$host:$server_port$request_uri/;
location / {
proxy_pass https://192.168.1.202;
}
location /extranet/ {
proxy_set_header Host extranet.mon-site.com;
proxy_pass https://192.168.1.202/;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
1.1. Contexte
Dans un container docker, je fais tourner un serveur apache possédant deux interfaces, une privée en 150.10.0.202 et une publique en 192.168.1.202 (simulant un serveur avec un intranet et un extranet). Or je ne peux pas accéder à mon container sous windows par son adresse IP, mais seulement par localhost ou 127.0.0.1. Pour faire fonctionner mon site, je passe donc par un reverse proxy avec Nginx qui redirige mes ports sur mes interfaces, et mes répertoires vers mes noms de domaines. Pour faire court :
- localhost:192 : pointe vers mon interface publique en 192.168.1.202
- localhost:150 : pointe vers mon interface privée en 150.10.0.202
- / : retourne ma page d’accueil
- /extranet : retourne mon extranet
- /admin : retourne mon intranet
- Exemple : https://localhost:150/admin/ renvoie ma page d’admin accessible depuis mon interface privée (https://localhost:192/admin/ renvoie 404 not found car l’intranet n’est accessible que depuis mon réseau privé), et https://localhost:192/extranet/ renvoie ma page extranet.
1.2. Explications
(ce fichier de config ne montre que la moitié de l’exemple, à savoir la gestion des requêtes pour accéder à l’interface publique)
listen 192 default_server ssl;
: Nginx écoute en ssl sur le port 192, et c’est mon server par défautssl_certificate
etssl_certificate_key
: Mes fichiers pour ma connexion sécuriséeerror_page 497 =301 https://$host:$server_port$request_uri;
: Ligne très intéressante, permettant de forcer la redirection en https dans le cas ou on n’a qu’un seul port d’écoute en https (dans mon exemple, si j’essaye de me connecter en HTTP sur mon port ssl 192, nginx renverra un code 497 qui va entraîner une redirection 301 vers ma page en https).location /
: à la racine de mon siteproxy_pass https://192.168.1.202;
: Je redirige vers la patte publiquelocation /extranet/
: Très important ne pas oublier le / à la fin !!! Si je demande la page /extranet il me redirigera automatiquement vers /extranet/ ce qui évitera des soucis avec le proxy…proxy_set_header Host extranet.mon-site.com;
: J’envoie dans mes header mon host pour qu’apache me renvoie le contenu de mon vhost extranet.mon-site.comproxy_pass https://192.168.1.202/;
: Je redirige vers la pate publique. Attention, le / est très important à la fin !! En effet :- Si j’ai https://192.168.1.202/, l’url https://localhost:192/sous-dossier/tralala/ pointera vers https://192.168.1.202/tralala/
- Si j’ai https://192.168.1.202, l’url https://localhost:192/sous-dossier/tralala/ pointera vers https://192.168.1.202/sous-dossier/tralala/
error_log
etaccess_log
: Les lignes pour donner les fichiers où écrire les logs d’erreur et d’accès.