1 votes

NGINX Reverse Proxy redirigeant HTTPS vers HTTP

Je suis en train de mettre en place un reverse proxy avec nginx et j'ai besoin qu'il fonctionne comme suit :

structure de procuration inversée

Le client accède à mon url (cron.mocxmonitoramento.com.br) et tombe dans mon reverse proxy. Mon proxy doit alors diriger la connexion vers les serveurs 1, 2 ou 3, selon les besoins. Cette configuration fonctionne correctement lors de l'accès HTTP, mais lors de la connexion HTTPS, la redirection ne fonctionne pas correctement.

Les serveurs 1, 2 et 3 exécutent une application Laravel 7. Tous les serveurs ont nginx installé et configuré.

Voici les configurations des serveurs 1, 2 et 3 (ils sont identiques) :

server {
listen 80 default_server;
listen [::]:80 default_server;

server_name _;

access_log /home/ubuntu/mocxmonitoramento.com.br/logs/access.log;
error_log /home/ubuntu/mocxmonitoramento.com.br/logs/error.log;

root /home/ubuntu/mocxmonitoramento.com.br/public/public/;
index index.php;

location / {
   try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}
}

Voici les configurations de Reverse Proxy :

upstream cron {
    server 10.0.1.30;
    server 10.0.1.31;
    server 10.0.1.32;
}
server {
    listen 443 ssl;

    server_name cron.mocxmonitoramento.com.br www.cron.mocxmonitoramento.com.br;

    ssl_certificate /etc/letsencrypt/live/cron.mocxmonitoramento.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cron.mocxmonitoramento.com.br/privkey.pem;

    error_page 502 /502.html;
    location = /502.html {
            root /usr/local/nginx/html;
            internal;
    }

    location / {
            proxy_set_header   X-Forwarded-For $remote_addr;
            proxy_pass http://cron;
            proxy_redirect default;
            proxy_redirect / $scheme://$http_host/xcharge/;

            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }

    location = /xcharge {
            return 301 $scheme://$http_host$uri/$is_args$args;
    }
}
server {
    listen 80;

    server_name cron.mocxmonitoramento.com.br www.cron.mocxmonitoramento.com.br;

    error_page 502 /502.html;
    location = /502.html {
            root /usr/local/nginx/html;
            internal;
    }

    location / {
            proxy_set_header   X-Forwarded-For $remote_addr;
            proxy_pass http://cron;
            proxy_redirect default;
            proxy_redirect / $scheme://$http_host/xcharge/;

            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }

    location = /xcharge {
            return 301 $scheme://$http_host$uri/$is_args$args;
    }
}

Comme vous pouvez le voir, dans le fichier de configuration nginx des serveurs 1, 2 et 3, ils n'écoutent que le port 80 et n'ont pas de certificat SSL. Le Reverse Proxy, quant à lui, écoute à la fois le port 80 et le port 443 et le certificat est installé normalement (j'utilise certbot).

L'accès via le port 80 fonctionne normalement, mais lorsque j'accède à https, j'obtiens l'erreur suivante dans le navigateur :

erreur de navigateur : Cette demande a été bloquée ; le contenu doit être transmis via HTTPS.

En d'autres termes, le navigateur a établi une connexion HTTPS, mais l'application Laravel tente de récupérer des données via une connexion non sécurisée (HTTP) et le navigateur bloque son chargement. J'ai fait plusieurs recherches sur internet pour trouver une solution à ce problème mais je n'ai rien trouvé qui puisse m'aider. J'aimerais savoir si quelqu'un a déjà mis quelque chose dans cette direction qui pourrait m'aider.

Mon installation de nginx n'est pas une installation standard, je l'ai faite en compilant le code de nginx et en installant le fichier Nginx Sticky Module open lib.

Je l'ai installé comme suit :

sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install libpcre3 libpcre3-dev -y
sudo apt install build-essential checkinstall zlib1g-dev -y

CertBot

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot -y
sudo ufw allow 80
sudo certbot certonly --standalone --preferred-challenges http -d {URL}
sudo certbot renew --dry-run

Github do modulo Styck
https://github.com/Refinitiv/nginx-sticky-module-ng
git clone https://github.com/Refinitiv/nginx-sticky-module-ng.git
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -xf openssl-1.1.1k.tar.gz

Instalando nginx com o modulo styck
Acesse e procure a versão do Nginx 1.22.1.
http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -xvzf nginx-1.22.1.tar.gz
cd nginx-1.22.1
./configure --with-http_ssl_module --add-module=/home/ubuntu/nginx-sticky-module-ng --with-openssl=/home/ubuntu/openssl-1.1.1k
make
sudo make install

Après cela, il y a quelques configurations de base des fichiers et des répertoires de nginx car il est installé dans /usr/local/nginx du système d'exploitation ubuntu 20.04.

Quoi qu'il en soit, j'aimerais savoir si quelqu'un est passé par là et s'il pourrait m'aider. Je vous remercie tous.

1voto

Tero Kilkanen Points 32968

Il est probable que vous deviez définir correctement l'URL racine de Laravel pour que l'option https URL ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X