1、问题描述

       开发了一个web后台系统,nginx配置了证书,开启443端口,支持https请求;但是后台系统中使用了相对路径的重定向,导致登陆重定向报错;

        备注:nginx配置了证书,支持443,但是不支持80端口;后端只处理http请求;

2、配置项

nginx.conf

    server {
        # 监听8080端口
        listen 8080;#不要占用 即将转发的80端口 。或者直接干掉这个server
        location / {
        }
    }

https 转 http

server {
        listen       443 ssl;
        # 域名配置 https://xx.cn
        server_name  xxx.com;
        ssl on;
        ssl_session_timeout 10m;        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置        
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 
        # 证书位置
        ssl_certificate  ssl/server.crt;#配我们生成的 nginx-1.14.0/https/xx.cn/server.pem;
        ssl_certificate_key ssl/server.key;#配我们生成的 ngin1.14.0/https/xx.cn/privkey.pem;
        location / {
            proxy_pass http://xxx.com;#这里的xxx.com是我们需要转发的,配合修改hosts文件 
                            //127.0.0.1  xxc.com
        }
    }

后端代码的写法:

 /**
     * 拦截处理
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {
        // do something
        //这里使用了相对路径
        response.sendRedirect("/index/index");
        return true;
    }

3、解决办法

1、直接修改后端代码,重定向改为绝对路径;

2、nignx添加重定向设置,把后端重定向的回文改成http改成https交给浏览器重新请求

proxy_redirect http:// $scheme://;

参考:

详解NGINX访问https跳转到http的解决方法_运维笔录 美玲的技术博客_51CTO博客

用 Nginx 实现 https 转 http_栗少的博客-CSDN博客_nginx配置https转http

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐