个人的视频小站 www.koogle.cc 由于升级为 HTTPS 后,视频播放页由于第三方视频资源 为 HTTP, 导致浏览器地址红色提示
不得已必须要同时兼容 HTTP 和 HTTPS, 但是又不想网站退回到 HTTP, 所以在 NGINX 同时监听 80 和 433 端口,
但是但是其他地址除了播放页意外,如果是来自 HTTP 的请求,都要自动跳转到 HTTPS 协议进行访问
由于 NGINX 的条件判断 不直接支持 多条件联合,即不像 ruby 那样可以
if condition1 && condition2
# do something
end
所以在做 rewrite 的时候,需要将单条件输出,拼写到下一个条件的结果里面,如:我想要将所有 播放页 https://www.koogle.cc/show/T76YxailMzhd.html
转换为 HTTP,刚开始想到了用正则表达式
if ($request_uri ~ ^/show/(.*)$ ) {
rewrite ^/(.*)$ http://www.koogle.cc/$1 permanent;
}
重新部署重启后,页面提示有多重跳转,后来发现不论是 HTTP 和 HTTPS 都有符合这个条件,所有就会出错,
所以应该是指在 HTTPS 模式下才执行这个操作,所以还要加上对 HTTPS 作为条件去并行
if ($request_uri ~ ^/show/(.*)$ ) {
set $show "show";
}
if ($scheme = 'https') {
set $show "${show}https";
}
if ($show = "showhttps") {
rewrite ^/(.*)$ http://www.koogle.cc/$1 permanent;
}
完成了这一步以后,终于可以安心的观看视频,但是紧接着我又遇到一个烦恼的痛苦,因为这个页面除了播放以外,
还有其他页面链接,如登录,栏目,这些链接都 变成 http://www.koogle.cc, 这样跳转过去的链接又成了原来的 HTTP,必须得再做一步判断,条件刚好相反
if ($request_uri !~ ^/show/(.*)$) {
set $not_show "notshow";
}
if ($scheme = 'http') {
set $not_show "${not_show}http";
}
if ($not_show = "notshowhttp") {
rewrite ^/(.*)$ https://www.koogle.cc/$1 permanent;
}