NGINX 反向代理將 HTTPS 重定向到 HTTP

NGINX 反向代理將 HTTPS 重定向到 HTTP

我正在使用 nginx 設定反向代理,我需要它按如下方式工作:

反向代理結構

客戶端將存取我的 url (cron.mocxmonitoramento.com.br),它將落入我的反向代理中。這樣,我的代理程式必須根據需要將連接定向到伺服器 1、2 或 3。當我們進行 HTTP 存取時,這樣的配置可以正常運作,但是當進行 HTTPS 連線時,重新導向無法正常運作。

伺服器 1、2 和 3 運行 Laravel 7 應用程式。所有伺服器都安裝並設定了 nginx。

以下是伺服器 1、2 和 3 的配置。

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

以下是反向代理的配置:

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

如您所看到的,在伺服器1、2和3的nginx設定檔中,它們僅監聽80埠並且沒有SSL憑證。另一方面,反向代理監聽連接埠 80 和連接埠 443,並且它正常安裝了憑證(我使用 certbot)。

透過80連接埠存取正常,但是當我造訪https時,瀏覽器中出現以下錯誤:

瀏覽器錯誤:該請求已被封鎖;內容必須透過 HTTPS 提供。

也就是說,瀏覽器建立了 HTTPS 連接,但 laravel 應用程式嘗試透過非安全連接 (HTTP) 獲取數據,並且瀏覽器阻止其載入。我在互聯網上進行了多次搜索以找到此問題的解決方案,但找不到任何對我有幫助的資訊。我想知道是否有人已經在這個方向上做了一些可以幫助我的事情。

我的nginx安裝不是標準安裝,我是透過編譯nginx程式碼並安裝Nginx 黏性模組打開庫。

我安裝它如下:

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

之後,對nginx的檔案和目錄進行一些基本配置,因為它最終安裝在作業系統ubuntu 20.04的/usr/local/nginx中

無論如何,我想知道是否有人經歷過這件事以及他們是否可以幫助我。謝謝你們。

答案1

最有可能的是,您需要正確設定 Laravel 根 URL 才能https在其中包含 URL。

相關內容