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

2017-12-14 15:55:25 +08:00
 trepwq

全站默认跳转 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;
}

3671 次点击
所在节点    问与答
9 条回复
isCyan
2017-12-14 16:22:55 +08:00
搜索 nginx if is evil 了解 if 的坑
用 location
一个 location / return 301 https
另外一个 location = /wifi.html 没有跳转
试试行不行
trepwq
2017-12-14 17:14:54 +08:00
@isCyan location / return 301 https 会死循环吧。。。而且我还有其他根的 location
isCyan
2017-12-14 17:41:44 +08:00
@trepwq 80 443 两个端口 两个 server block 不要把 http 和 https 放同一个 server
kiwi95
2017-12-14 17:55:04 +08:00
if is evil in nginx config
stabc
2017-12-14 18:10:54 +08:00
1L 说的解决方法非常好了
yingfengi
2017-12-14 18:13:07 +08:00
3 楼不错
mooncakejs
2017-12-14 18:14:30 +08:00
@isCyan 求大佬介绍个 前面有负载均衡 proto 放在 http_x_forwarded_proto 怎么避免 if 的方案
isCyan
2017-12-14 18:55:49 +08:00
@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
2017-12-15 10:14:49 +08:00
@isCyan 就是内网,不是全站,全站就简单了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/414741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX