nginx 当 HTTPS 页面访问 HTTP 服务并触发重定向时,重定向的 URL 将是 HTTP 而不是 HTTPS 的问题

1.标题浏览器访问https服务,登录超时浏览器控制台报错如下

Mixed Content: The page at 'https://192.1.1.1/index#/poc/user' was loaded over HTTPS, but requested an insecure form action 'http://192.1.1.1/login?kickout=1'. This request has been blocked; the content must be served over HTTPS.

2.场景分析

服务部署架构为后台一个java的单体应用,上层通过nginx反向代理这个单体应用,浏览器访问https请求,请求先到nginx,nginx将https请求代理到java的http单体应用服务,当应用判断登录超时会响应一个http的301重定向到登录页,nginx反向代理返回给浏览器的也是http的重定向请求,浏览器因为安全原因不允许将https的访问重定向到http,导致登录超时跳转登陆页面失败。

3.解决方案

当使用 Nginx 作为反向代理服务器时,可以通过修改 Nginx 的配置文件来确保重定向 URL 是 HTTPS 的。示例如下:

假设你有一个 HTTP 服务运行在本地的 8080 端口上,而 Nginx 通过 HTTPS 监听在 443 端口上,并将请求代理到 HTTP 服务。你想要确保当 HTTP 服务返回重定向时,重定向的 URL 是 HTTPS 的。

首先,打开 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default,根据你的具体配置而定。

然后,在 Nginx 的配置文件中找到你的 HTTPS 服务器段(server block),在其中添加以下配置:

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

在这个配置中,关键的一点是确保 proxy_set_header X-Forwarded-Proto https;,它告诉后端服务器(HTTP 服务)请求是通过 HTTPS 发起的。这样,当 HTTP 服务返回重定向时,它会使用 HTTPS。

完成配置后,重新加载 Nginx 配置使其生效:

sudo nginx -s reload

现在,当 HTTPS 页面访问 HTTP 服务并触发重定向时,重定向的 URL 将是 HTTPS 的,而不是 HTTP 的,从而解决了浏览器报错的问题。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值