Nginx ReverseProxy LXC Alpine Linux
Installation d'un reverse proxy NGINX avec Certbot. Le container servira de point d'entrée pour les requêtes HTTP (port:80) et HTTPS (port:443) pour les rediriger sur les serveurs idoines en HTTPS uniquement. Certbot permettra de créer des certificat SSL reconnu par les navigateurs comme sécurisé.
Installation
On installe les paquets de base :
# apk update && apk upgrade # apk add nginx certbot certbot-nginx
On modifie la configuration de NGINX pour la rapprocher du standard des grandes distributions
# mkdir /etc/nginx/sites-available && mkdir /etc/nginx/sites-enabled
On modifie le fichier de configuration de NGINX en ajoutant la ligne suivante :
# vi /etc/nginx/nginx.conf
- Alpine Linux 3.12 :
...
# Includes virtual hosts configs.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
...
- Alpine Linux 3.13 :
...
# Includes virtual hosts configs.
include /etc/nginx/http.d/*.conf;
include /etc/nginx/sites-enabled/*;
...
On supprime le site par défaut :
- Alpine Linux 3.12 :
# rm /etc/nginx/conf.d/default.conf
- Alpine Linux 3.13 :
# rm /etc/nginx/http.d/default.conf
On active le serveur :
# rc-update add nginx default # service nginx start
Création d'un "vhost" sécurisé
Création du certificat
# certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email moncourriel@exemple.net -d site.exemple.net
Création du vhost
On crée le fichier de configuration dans "/etc/nginx/site-availables"
# vi /etc/nginx/sites-available/exemple.conf
server {
listen 80;
listen [::]:80;
server_name site.exemple.net;
# return 404;
return 301 https://$host$request_uri;
}
server {
server_name site.exemple.net;
error_page 403 https://site.exemple.net;
location / {
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 https;
proxy_set_header X-Forwarded-Port 443;
proxy_pass http://IP_SERVEUR_WEB:PORT;
# proxy_pass https://IP_SERVEUR_WEB:PORT; #Alternatif pour redirection sur https
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/site.exemple.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.exemple.net/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
ssl_trusted_certificate /etc/letsencrypt/live/site.exemple.net/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
}
Test et activation
On crée un lien symbolique du fichier de configuration dans le répertoire des site actifs :
# ln -s /etc/nginx/sites-available/exemple.conf /etc/nginx/sites-enabled/
On test la configuration :
# nginx -t
On recharge la configuration pour activation :
# service nginx reload