标签 https 下的文章

因为阿里云和腾讯云调整了免费SSL证书政策从1年有效期改成90日。寻找替代方案,看到cloudflare提供15年的证书,但条件是要使用它们家的DNS/CDN服务。验证是在dns过程中接管的。

跟着别人分享的教程一步步操作下来,证书是申请好配置到位了。同时也出现了标题的问题。请求PHP的响应正确,但如果是静态资源 例如加载 js html css png之类浏览器就会报错 301 提示重定向次数过多。

网上搜了一圈基本在说的是 http强制绑定https,当用户访问http时自动重定向到https的情况,设置在nginx conf 的http的 server{} 部分。这显然和我的项目情况不同,我只配置了443 ssl服务。我并不需要约束http。也没有往nginx的方向去想。

以为是cloudflare这种形式的ssl的问题,一直在CF的设置上去研究。

最后实在被搞烦了...决定弃坑,部署个脚本在服务端每90日自动续签ssl。

发现还是一样的问题,php正常打开,html 提示重定向次数过多

脑子被轰了...回头检查 nginx 的 vhost 配置文件。在 443 server{} 的最底部发现这段东西


location / {
    return 301 https://$host$request_uri;
}

WTF?

搞什么飞机... 为什么lnmp会生成这样奇怪的配置。已经是443了还自己跳转给自己

注释之后...问题消除

是的你没看错,是从https切换回http。这个开倒车的奇怪需求是由于

腾讯云直播API生成 HLS拉流地址默认是 http (尽管文档声称支持 https 但依然会触发证书与域名的不匹配,显示更难看的红色警告标签,而且同样会导致资源加载失败)
QQ截图20200520092043.jpg

控制台报警:

已拦截跨源请求:同源策略禁止读取位于 https://XXXXXX.com/live/XXXXXX.m3u8 的远程资源。(原因:CORS 请求未能成功)。
无法加载视频文件,请检查网络,以及视频文件是否允许跨域请求访问,m3u8文件是否存在

而在https协议下调用http资源这种做法,主流浏览器是被拦截禁止的,可参考
Firefox浏览器的安全说明 与截图:

QQ截图20200520085519.jpg

  • 但是!目前在移动端(微信)下暂时还可以偷鸡这样搞,直播视频依然可以正常加载。

因此我需要:

判断当前用户是PC端浏览器访问且访问的是HTTPS时跳转到HTTP,回避所有的问题!

以下是简单实现方法:




- 阅读剩余部分 -

用frp转发http很长一段时间了,由于并不迫切也没有什么有安全要求的本地脚本,所以SSL的配置就一直拖着没弄。

今天拖延症回光返照,顺手搞了。
也并不麻烦,只是长久有个疑问https的时候到底 证书是部署在 FRPS端还是 FRPC端。

简单结论是在 FRPC端。 操作的流水在下文。


- 阅读剩余部分 -