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