V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iugo
V2EX  ›  V2EX

V2EX 是怎样做 http 转 https 的?

  •  
  •   iugo · 2014-11-18 17:56:16 +08:00 · 3874 次点击
    这是一个创建于 3654 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://blog.csdn.net/wzy_1988/article/details/8549290 这里看到大概有三种方法:

    1. rewrite
    2. 497 状态码 (似乎不太友好)
    3. 进入页面后跳转 (似乎这样相当于加载了两次)

    想知道 V2EX 是怎样做的?

    另:
    页面中还有 <link rel="canonical" href="http://www.v2ex.com/" /> 这个需要改成 https 吗? 我的 Ghost 也是这样, 强制了 https, 但 canonical 还是 http. 有必要改吗?
    第 1 条附言  ·  2014-11-18 18:35:14 +08:00
    看来 301 转向是最佳方案. 谢谢大家的帮助. Nginx 的设置方法在楼下.
    14 条回复    2014-11-19 10:20:28 +08:00
    leassy
        1
    leassy  
       2014-11-18 17:58:47 +08:00
    80端口直接301到443端口即可
    我一直这样做
    tabris17
        2
    tabris17  
       2014-11-18 17:59:04 +08:00
    永久重定向
    iugo
        3
    iugo  
    OP
       2014-11-18 18:09:58 +08:00
    @leassy
    @tabris17

    具体该怎么做?

    我是这样的:

    server {
    listen 80;
    server_name example.org;
    return 301 https://example.org$request_uri;
    }

    可是之后出现了一个问题, 百度站内搜索失效. 之前还是警告页面包含非加密信息, 后来就直接失效了, 虽然也不会有提醒. 注: znsv.baidu.com 无法使用 https.
    tabris17
        4
    tabris17  
       2014-11-18 18:13:40 +08:00
    原链接失效搜索引擎当然也失效了。

    包含非加密信息是因为你引用图片脚本CSS使用了绝对地址吧
    iugo
        5
    iugo  
    OP
       2014-11-18 18:13:49 +08:00
    知道问题在哪儿了. 是 Chrome 屏蔽了该不安全脚本.
    iugo
        6
    iugo  
    OP
       2014-11-18 18:15:59 +08:00
    @tabris17 我引用的是百度

    <script type="text/javascript">document.write(unescape('%3Cdiv id="bdcs"%3E%3C/div%3E%3Cscript charset="utf-8" src="http://znsv.baidu.com/customer_search/api/js?sid=4316253844246803945') + '&plate_url=' + (encodeURIComponent(window.location.href)) + '&t=' + (Math.ceil(new Date()/3600000)) + unescape('"%3E%3C/script%3E'));</script>

    这样一行代码.

    刚开始测试的时候还正常显示, 后来被 Chrome 屏蔽了, 选择加载不安全代码后就正常了.

    虽然听说百度开始支持 https 了, 但 znsv.baidu.com 还是不支持.
    kslr
        7
    kslr  
       2014-11-18 18:40:51 +08:00
    497
    Showfom
        8
    Showfom  
       2014-11-18 18:40:58 +08:00 via iPhone
    v2ex 从来没有强制 https 啊 做跳转是因为你在自己的设置里设置了 那当然应该是用 python 判断咯
    cokebar
        9
    cokebar  
       2014-11-18 19:35:48 +08:00
    页面引用时候可以用省略了协议的url:
    //www.example.com/index.html
    这样根据情况浏览器会相应处理
    xoxo
        10
    xoxo  
       2014-11-18 19:39:09 +08:00
    将80重定向到443同时
    输出如下http header
    Strict-Transport-Security:max-age=31536000; includeSubDomains
    leassy
        11
    leassy  
       2014-11-19 08:57:10 +08:00
    @iugo
    server {
    listen 80;
    server_name xxx.com;
    rewrite ^/(.*)$ http://www.xxx.com/$1 permanent;
    leassy
        12
    leassy  
       2014-11-19 08:58:03 +08:00
    @iugo 刚才少了个括号
    server {
    listen 80;
    server_name w9z.net;
    rewrite ^/(.*)$ http://www.w9z.net/$1 permanent;
    }
    iugo
        13
    iugo  
    OP
       2014-11-19 10:19:23 +08:00
    @kslr 497 有什么好处呢?
    iugo
        14
    iugo  
    OP
       2014-11-19 10:20:28 +08:00
    @Showfom 嗯. 我在 Chrome 和 Firefox 看到是自动跳 https. 刚才又在 IE 11 中测试, 没有跳, 依旧是 http.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.