V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
yimaneilicj
V2EX  ›  NGINX

nginx 如何配置 https 强制跳 http

  •  
  •   yimaneilicj · 2018-05-10 16:19:11 +08:00 · 5067 次点击
    这是一个创建于 2395 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为业务需求,必须实现 https 跳到 http。。 求教。

    29 条回复    2018-05-11 14:13:49 +08:00
    qcloud
        1
    qcloud  
       2018-05-10 16:30:23 +08:00 via iPhone
    不跳 https 不就行了
    yimaneilicj
        2
    yimaneilicj  
    OP
       2018-05-10 16:32:06 +08:00
    在 Safari 中有的时候会莫名其妙的加上··· 在 http 协议下下加载了 https 协议的资源是不是就会自动加上?
    @qcloud
    misaka19000
        3
    misaka19000  
       2018-05-10 16:32:12 +08:00
    做个重定向不就行了
    qcloud
        4
    qcloud  
       2018-05-10 16:34:18 +08:00 via iPhone
    @yimaneilicj 不会,如果 https 协议中有 http 链接会报错
    rayc9223
        5
    rayc9223  
       2018-05-10 16:34:21 +08:00   ❤️ 1
    listen 443 ssl;
    rewrite ^ http://$http_host$request_uri? permanent;
    laudukang
        6
    laudukang  
       2018-05-10 16:42:41 +08:00
    一页 50 条帖子,完全可以自行 Google 的问题占了其中一条
    yongjing
        7
    yongjing  
       2018-05-10 16:43:13 +08:00
    server {
    ...
    return 301 http://example.com$request_uri;
    }
    yimaneilicj
        8
    yimaneilicj  
    OP
       2018-05-10 16:44:23 +08:00
    @laudukang 自行股沟了一番,最后没有找到合适的解决办法才来询问大家的。
    yimaneilicj
        9
    yimaneilicj  
    OP
       2018-05-10 16:46:24 +08:00
    @yongjing
    @rayc9223
    @qcloud
    @misaka19000
    很感谢回复,我再去试试,对 nginx 还不是很在行
    yhxx
        10
    yhxx  
       2018-05-10 16:47:32 +08:00
    直接 return 一个 301 试试?
    pexcn
        11
    pexcn  
       2018-05-10 17:19:11 +08:00
    301 重定向

    ```
    server {
    listen 80;
    server_name <domain_name>;
    return 301 https://$server_name$request_uri;
    }

    server {
    listen 443 ssl http2;
    server_name <domain_name>;

    # ......
    }
    ```
    pexcn
        12
    pexcn  
       2018-05-10 17:20:41 +08:00
    看错了,应该是

    ```
    server {
    listen 443 ssl http2;
    server_name <domain_name>;

    # ......

    return 301 http://$server_name$request_uri;
    }

    server {
    listen 80;
    server_name <domain_name>;

    # ......
    }
    ```
    cpdyj
        13
    cpdyj  
       2018-05-10 17:22:44 +08:00 via Android   ❤️ 1
    你的 HTTPS 是不是开了 HSTS ?
    zjb861107
        14
    zjb861107  
       2018-05-10 17:23:04 +08:00   ❤️ 1
    推荐可以参考这个: https://imququ.com/post/my-nginx-conf.html
    yimaneilicj
        15
    yimaneilicj  
    OP
       2018-05-10 18:13:42 +08:00
    @zjb861107 好的,多谢指点!
    chinvo
        16
    chinvo  
       2018-05-10 18:22:08 +08:00 via iPhone
    什么业务需求这么奇葩
    riyoukakan
        17
    riyoukakan  
       2018-05-10 18:32:44 +08:00
    if ($server_port ~ 443){
    rewrite ^(/.*)$ http://$host$1 permanent;
    }
    yimaneilicj
        18
    yimaneilicj  
    OP
       2018-05-10 18:50:51 +08:00
    @cpdyj 一语点醒梦中人。。。就是 nginx 在配置的时候加了 [add_header Strict-Transport-Security max-age=15768000;] 导致。。Safari 每次输入域名都会跳到 https 的协议,注释掉就好了。那么问题来了,之前带着这个 header 访问过 https 协议的浏览器中应该是存有这个 header 信息的吧,那么怎么清理掉呢?
    sean328
        19
    sean328  
       2018-05-10 19:14:27 +08:00
    做一个永久的 rewrite 就行,这个问题百度就可以解决吧
    MonoLogueChi
        20
    MonoLogueChi  
       2018-05-10 19:28:14 +08:00 via Android
    @yimaneilicj 这个应该无解,等过期吧
    paranoiagu
        21
    paranoiagu  
       2018-05-10 19:37:30 +08:00 via Android
    @yimaneilicj 清客户端缓存即可。
    oh
        22
    oh  
       2018-05-10 19:57:21 +08:00 via iPhone   ❤️ 2
    @yimaneilicj 加个 Strict-Transport-Security max-age=0 看看能不能覆盖掉
    yimaneilicj
        23
    yimaneilicj  
    OP
       2018-05-10 20:15:07 +08:00 via iPhone
    @paranoiagu
    @oh
    @MonoLogueChi
    @sean328
    感谢楼上的几位大哥的回复,十分感谢!

    @oh 回去试一下这个方案是否行得通,然后回来告诉您。
    yimaneilicj
        24
    yimaneilicj  
    OP
       2018-05-10 20:16:06 +08:00 via iPhone
    @chinvo 前端人员说 https 和 http 两种协议下,在 local 什么的本地存储中数据不能共用。
    chinvo
        25
    chinvo  
       2018-05-10 20:20:17 +08:00 via iPhone   ❤️ 1
    @yimaneilicj #24 那全跳去 https 啊
    owt5008137
        26
    owt5008137  
       2018-05-10 21:34:18 +08:00 via Android
    if ($scheme = https) {
    return 301 http://$server_name$request_uri;
    }
    pandago
        27
    pandago  
       2018-05-10 21:34:25 +08:00 via iPhone
    @yimaneilicj localstorage 跨域
    IvanLi127
        28
    IvanLi127  
       2018-05-11 12:50:58 +08:00 via Android
    @yimaneilicj 凉了 叫访问过的人都清理下浏览器吧。。。
    zhuweiyou
        29
    zhuweiyou  
       2018-05-11 14:13:49 +08:00
    开了 HSTS ?凉了。换域名吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 00:30 · PVG 08:30 · LAX 16:30 · JFK 19:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.