Table des matières
Reverse proxy avec NGINX
Le reverse proxy n'est valable que si vous devez rediriger une URL vers un serveur interne. Pour une redirection simple du port 80 vers les ports 443, il ne faut pas passer par le reverse proxy mais par une redirection par virtualhost voir à la fin de ce post.
installer nginx
apt install nginx
installer openssl pour le reverse vers HTTPS et générer les certificats x509 auto signé qui seront déclarés dans la configuration du virtualhost pour le HTTPS.
créer un virtualhost
vi /etc/nginx/sites-available/reverse_proxy.conf
Redirection vers HTTP
Pour rediriger une URL vers un serveur interne sur le port 80 mettre:
server {
listen 80;
server_name test.beemoon.fr;
# Logs spécifiques pour ce site
access_log /var/log/nginx/test-access.log;
error_log /var/log/nginx/test-error.log;
location / {
proxy_pass http://192.168.1.100;
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;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
Redirection vers HTTPS.
Pour rediriger une URL vers un serveur interne sur le port 443 (HTTPS) mettre:
server {
listen 443 ssl;
server_name test2.beemoon.fr;
# Logs spécifiques pour ce site
access_log /var/log/nginx/test2-access.log;
error_log /var/log/nginx/test2-error.log;
ssl_certificate /etc/ssl/certs/selfsigned_pub.crt;
ssl_certificate_key /etc/ssl/private/selfsigned.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_ssl_server_name on;
proxy_pass https://192.168.1.200;
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;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
Redirection de HTTP vers HTTPS
Pour forcer la redirection du port 80 vers le 443 mettre (l'acces sur le 443 doit etre fonctionnel):
server {
listen 80;
server_name test2.beemoon.fr;
return 301 https://$host$request_uri;
}
Mettre en route le reverse proxy
Activer le virtualhost
ln -s //etc/nginx/sites-available/reverse_proxy.conf /etc/nginx/sites-enable/reverse_proxy.conf
verifier le fichier de configuration du reverse
nginx -t
Redémarrer NGINX
systemctl restart nginx
Bonus: rediriger le port 80 vers 443 en direct sans reverse proxy
sur Apache, votre site est fonctionnel sur HTTPS (ici https://192.168.2.100), créer un virtualhost sur le port 80 :
vi /etc/apache2/sites-available/monsite_http.conf
avec
<VirtualHost *:80> ServerName test3.serveur.local Redirect permanent / https://192.168.2.100 </VirtualHost>
activer le virtualhost
a2ensite monsite_http.conf systemctl reload apache2
https://args.tech/blog/17/setup-nginx-reverse-proxy-and-redirect-http-to-https
