开发者社区> 问答> 正文

SLB如何强制使用https,如果用户http进来的,如何也强制变成https呢

SLB如何强制使用https,如果用户http进来的,如何也强制变成https呢

原来在单独的ecs服务器上自己配置的话,tomcat是有这个功能的,但是到了SLB感觉什么都不会啊


展开
收起
zjyjason 2015-05-30 15:14:10 38587 0
10 条回答
写回答
取消 提交回答
  • ReSLB如何强制使用https,如果用户http进来的,如何也强制变成https呢
    (1)在SLB中配置2个监听;
    HTTPS : 443 -> HTTP : 80,打开健康检查,健康检查中,要采用域名方式,而不是默认的ip方式;
    HTTP : 80 -> HTTP : 8000,关闭健康检查;




    (2)配置后端ECS上的nginx;
    # 直接使用ip访问的流量,会跳转
       server {
    listen 80 default_server;
            server_name _;
            # 301跳转
            rewrite ^/(.*)$ https://www.abc.com/$1 permanent;
        }
        
        server {
            listen 8000;
    # 301跳转
            rewrite ^/(.*)$ https://www.abc.com/$1 permanent;
        }

        server {
            listen 80;
            server_name abc.com www.abc.com;
            root /usr/local/webapps/abc/ROOT;
            ....................
        }


    (3)测试跳转效果;


    假设123.123.123.123是你的slb的ip地址,确保你的web目录下有aa.html;请测试以下6个地址,如果nginx配置正确,他们都应该跳转到"https://www.abc.com/aa.html";

    123.123.123.123/aa.html
    https://123.123.123.123/aa.html

    abc.com/aa.html
    https://abc.com/aa.html

    www.abc.com/aa.html
    https://www.abc.com/aa.html

    2017-09-22 10:45:30
    赞同 展开评论 打赏
  • ReSLB如何强制使用https,如果用户http进来的,如何也强制变成https呢
    顶楼主
    2017-03-26 15:40:42
    赞同 展开评论 打赏
  • ReSLB如何强制使用https,如果用户http进来的,如何也强制变成https呢

    按照你的最后设置,提示如下错误,该如何解决,谢谢

    “此页面不能正确地重定向

    Firefox 检测到该服务器正在将此地址的请求循环重定向。
    2016-08-27 22:59:55
    赞同 展开评论 打赏
  • ReSLB如何强制使用https,如果用户http进来的,如何也强制变成https呢
    感谢5楼的帖子。
    针对 Apache 后端,如下配置成功。


    一、后端 Apache:
    开 2 个虚拟主机,一个是 80 端口,一个是 4430。Apache 不必配置 SSL。

    1. 修改 httpd.conf ,添加端口:
    NameVirtualHost *:80
    Listen 80
    NameVirtualHost *:4430
    Listen 4430


    2. 虚拟主机配置文件内容如下(一个文件中设置了两个 VirtualHost):
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
     RewriteEngine on
     RewriteRule ^/(.*)$ https://www.domain.com%{REQUEST_URI} [L,R=301]    
     ……
    <VirtualHost>

    <VirtualHost *:4430>
            ……
    <VirtualHost>



    二、SLB配置(证书要配好):
    80端口监听后端80端口。注意:在设置的第二步,【不要】开启健康检查!否则会报错,认为后端80端口不正常,从而无法正常使用。
    443端口监听后端4430端口。(可以开启健康检查。)

    这样用户访问的流程是这样的:
    1.如果是 https 的请求直接由 443 端口转到后端我的真实网站 4430 端口获取内容,SSL 数据加密的任务交给 SLB 处理。
    2.如果是 http 的请求从SLB的 80 端口转至后端的 80 端口,由 Apache 重写成 https URL,转至 SLB 的 443 端口,对应流程1。
    这样不管用户用 http还是 https 最终的请求都是 https 的请求。

    三、防火墙把 4430 端口打开即可。



    2015-12-27 17:01:28
    赞同 展开评论 打赏
  • 回4楼大荒芜的帖子
    请教下,我rewrite 到 HTTPS带域名  这样的话,又会进入到SLB,那么可能自动负载到另一台机子上去,这样session 就掉了,请问如何处理?
    2015-11-05 10:35:39
    赞同 展开评论 打赏
  • ReSLB如何强制使用https,如果用户http进来的,如何也强制变成https呢
    我的方案是这样的
    后端系统架构为:nginx + php + php-fpm + mysql

    后端nginx:
    配置server端口为 :8123,不用配置SSL,将SSL证书交给SLB处理,这是我真正的网站内容。
    配置server端口为:8080,所有http的请求都rewrite为https请求,返回给SLB处理

    SLB配置(证书要配好):
    80端口监听后端8080端口
    443端口监听后端8123端口

    这样用户访问的流程是这样的:
    1.如果是https的请求直接由443端口转到后端我的真实网站8123端口获取内容,SSL数据加密的任务交给SLB处理。
    2.如果是http的请求从SLB的80端口转至后端的8080端口,由8080端口重写成https请求,转至SLB的443端口,对应流程1。
    这样不管用户用http还是https最终的请求都是https的请求。

    当然最关键的一点是要让SLB的IP能够访问你后端nginx的端口,否则SLB会检测端口异常,配好防火墙是关键。
    2015-07-28 09:30:12
    赞同 展开评论 打赏
  • 回3楼epub360的帖子
    SLB 80-》nginx 80 nginx将请求rewrite到https
    SLB 443-》 nginx 8443 -》 反向代理到应用
    我现在是这么处理的
    2015-06-30 10:27:58
    赞同 展开评论 打赏
  • 回2楼tanliquang的帖子
    nginx 一般的做法是将访问80端口的请求 全部rewrite 到https

    但通过SLB 访问的https到后台 应该都是80吧? 请问无法端口判断的话,  如何判断?
    2015-06-19 15:52:58
    赞同 展开评论 打赏
  • 阿里云高级产品专家,长期从事虚拟网络、Devops、大数据等领域相关工作
    引用第1楼云目录于2015-05-31 01:45发表的  :
    通过SLB配置了https后,可以在ECS上面配置301,这样就自动跳转到了https [url=http://bbs.aliyun.com/job.php?action=topost&tid=245630&pid=659918][/url]

    恩 可以自己在WEB上针对HTTP过来的请求进行转发下
    2015-06-10 14:34:23
    赞同 展开评论 打赏
  • 通过SLB配置了https后,可以在ECS上面配置301,这样就自动跳转到了https
    2015-05-31 01:45:47
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
架构分析、数据整合、负载均衡,梦想旅行解析云上实践 立即下载
双十一技术揭秘 负载均衡性能优化演进之路 立即下载
负载均衡是如何支撑几亿手机微博用户访问的高性能负载均衡研发 立即下载