我正在使用 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。