NGINX Reverse Proxy leitet HTTPS auf HTTP um

NGINX Reverse Proxy leitet HTTPS auf HTTP um

Ich richte einen Reverse-Proxy mit Nginx ein und muss Folgendes ermöglichen:

Reverse-Proxy-Struktur

Der Client greift auf meine URL (cron.mocxmonitoramento.com.br) zu und gelangt in meinen Reverse-Proxy. Dabei muss mein Proxy die Verbindung je nach Bedarf an die Server 1, 2 oder 3 weiterleiten. Eine solche Konfiguration funktioniert korrekt, wenn wir den HTTP-Zugriff vornehmen, aber wenn die HTTPS-Verbindung hergestellt wird, funktioniert die Umleitung nicht korrekt.

Auf den Servern 1, 2 und 3 wird eine Laravel 7-Anwendung ausgeführt. Auf allen Servern ist nginx installiert und konfiguriert.

Hier sind die Konfigurationen der Server 1, 2 und 3. (Sie sind identisch):

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;
}
}

Hier sind die Konfigurationen des 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;
    }
}

Wie Sie in der nginx-Konfigurationsdatei der Server 1, 2 und 3 sehen, hören sie nur auf Port 80 und haben kein SSL-Zertifikat. Der Reverse Proxy hingegen hört sowohl auf Port 80 als auch auf Port 443 und hat das Zertifikat normal installiert (ich verwende certbot).

Der Zugriff über Port 80 funktioniert normal, allerdings erhalte ich beim Zugriff auf https im Browser folgende Fehlermeldung:

Browserfehler: Diese Anforderung wurde blockiert; der Inhalt muss über HTTPS bereitgestellt werden.

Das heißt, der Browser hat eine HTTPS-Verbindung hergestellt, aber die Laravel-Anwendung versucht, Daten über eine nicht sichere Verbindung (HTTP) abzurufen, und der Browser blockiert das Laden. Ich habe im Internet mehrere Suchen durchgeführt, um eine Lösung für dieses Problem zu finden, konnte aber nichts finden, das mir helfen würde. Ich würde gerne wissen, ob jemand bereits etwas in diese Richtung getan hat, das mir helfen könnte.

Meine Nginx-Installation ist keine Standardinstallation. Ich habe sie durch Kompilieren des Nginx-Codes und Installieren desNginx Sticky-Moduloffene Bibliothek.

Ich habe es wie folgt installiert:

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

Danach gibt es einige grundlegende Konfigurationen von Dateien und Verzeichnissen von nginx, da es letztendlich in /usr/local/nginx von OS Ubuntu 20.04 installiert wird

Wie dem auch sei, ich würde gerne wissen, ob das schon mal jemand durchgemacht hat und mir helfen kann. Vielen Dank euch allen.

Antwort1

Höchstwahrscheinlich müssen Sie die Laravel-Stamm-URL richtig festlegen, um die httpsURL dort zu haben.

verwandte Informationen