V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
trepwq
V2EX  ›  问与答

nginx 怎么配置某个页面不跳转 https

  •  
  •   trepwq · 2017-12-14 15:55:25 +08:00 · 3751 次点击
    这是一个创建于 2555 天前的主题,其中的信息可能已经有所发展或是发生改变。

    全站默认跳转 https,但是想使用 http 访问 /wifi.hmtl 这个页面
    使用 if 多重判断写的,感觉不够好。还有什么办法吗?
    set $wifi 0;
    if ($request_uri != "/wifi.html") {
    set $wifi "${wifi}1";
    }
    if ($http_x_forwarded_proto = "http") {
    set $wifi "${wifi}1";
    }
    if ($wifi = "011") {
    return 301 https://$host$request_uri;
    }

    第 1 条附言  ·  2017-12-15 10:18:56 +08:00
    这个 nginx 在负载均衡后面,只开了 80 端口,写在一个配置文件里面还有什么办法吗
    9 条回复    2017-12-15 10:14:49 +08:00
    isCyan
        1
    isCyan  
       2017-12-14 16:22:55 +08:00 via Android
    搜索 nginx if is evil 了解 if 的坑
    用 location
    一个 location / return 301 https
    另外一个 location = /wifi.html 没有跳转
    试试行不行
    trepwq
        2
    trepwq  
    OP
       2017-12-14 17:14:54 +08:00
    @isCyan location / return 301 https 会死循环吧。。。而且我还有其他根的 location
    isCyan
        3
    isCyan  
       2017-12-14 17:41:44 +08:00 via Android
    @trepwq 80 443 两个端口 两个 server block 不要把 http 和 https 放同一个 server
    kiwi95
        4
    kiwi95  
       2017-12-14 17:55:04 +08:00 via iPhone
    if is evil in nginx config
    stabc
        5
    stabc  
       2017-12-14 18:10:54 +08:00
    1L 说的解决方法非常好了
    yingfengi
        6
    yingfengi  
       2017-12-14 18:13:07 +08:00 via Android
    3 楼不错
    mooncakejs
        7
    mooncakejs  
       2017-12-14 18:14:30 +08:00
    @isCyan 求大佬介绍个 前面有负载均衡 proto 放在 http_x_forwarded_proto 怎么避免 if 的方案
    isCyan
        8
    isCyan  
       2017-12-14 18:55:49 +08:00 via Android
    @mooncakejs 我也不知道有什么不用 if 的办法。
    如果负载均衡仅仅用 HTTPS 回源,然后带一个客户端请求协议的 proto 变量的话,
    用 if 条件判断,但是里面只能用 rewrite 指令。
    比如
    https://www.nginx.com/blog/creating-nginx-rewrite-rules/
    Example – Forcing all Requests to Use SSL/TLS
    里面有个 NOT RECOMMENDED 的实例(并不是不能用)。

    所以,如果仅仅是想强制使用 HTTPS 的话,你可以在负载均衡服务器设置跳转。这是最佳选择。

    或者,HTTP 请求使用 HTTP 回源,HTTPS 请求使用 HTTPS 回源,这样分开。但是如果不是内网的话,HTTP 回源容易被劫持,也要小心。
    mooncakejs
        9
    mooncakejs  
       2017-12-15 10:14:49 +08:00 via iPhone
    @isCyan 就是内网,不是全站,全站就简单了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:55 · PVG 15:55 · LAX 23:55 · JFK 02:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.