我正在使用 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 文件和目录的基本配置,因为它最终安装在 OS ubuntu 20.04 的 /usr/local/nginx 中
无论如何,我想知道是否有人经历过这种情况,以及他们是否可以帮助我。谢谢大家。
答案1
最有可能的是,您需要正确设置 Laravel 根 URL 才能https
在那里获得该 URL。