关于 CF 的疑惑, https 强制要不要打开

2021-04-24 18:27:55 +08:00
 zijian
我的 CF 端对端加密选择的是 full,源站开了 http 强制转 https,那么 cf 这边还需要开“始终使用 HTTPS”与“自动 HTTPS 重写”这两个功能吗?我试着关了,好像也不影响正常访问,但是疑问来了,我关了这两个功能,端对端的全流程加密不就失效了吗?用户发起的 http 请求不就直接发到 cf 的 cdn 服务器上了?
7209 次点击
所在节点    Cloudflare
18 条回复
ruixue
2021-04-24 18:33:22 +08:00
“始终使用 HTTPS”和直接在源站上配置 http 到 https 的 301 跳转效果是一样的
“自动 HTTPS 重写”是把网页中的 http 链接自动替换成 https 的
如果全站的 https 配置没问题,建议都打开就行了
zijian
2021-04-24 18:36:16 +08:00
@ruixue 好快的回复!但是“始终使用 HTTPS”这个功能是作用于哪个环节呢?
ruixue
2021-04-24 18:39:57 +08:00
@zijian 就是用户通过 http 访问你的网站时,cloudflare 不管你的源站是怎么配置的,直接返回跳转到 https 的 301 状态码
zijian
2021-04-24 18:45:16 +08:00
@ruixue ok,但是我的源站就有 https,那这样不就是造成了用户访问时间的延迟,毕竟中间经过了二次执行,而且我看 CloudFlare Help Center 有提到不建议源站做 https 强制,这可怎么好,我的源站必须要做,因为国内是直接访问,cf 这条线是给境外用户使用的
ruixue
2021-04-24 18:50:51 +08:00
@zijian 打开“始终使用 HTTPS”后,用户通过 http 访问你的网站时,cloudflare 不会建立和源站的连接而是直接返回 301 到 https,然后用户再使用 https 访问你的网站时,根据你的回源配置,cloudflare 才会建立和源站的反向代理连接,如果是“灵活”那就是 http 回源,如果是“完全”那就是 https 回源
不建议源站做 https 强制,是因为如果使用的是“灵活”配置,那么 cloudflare 只会发起和源站之间的 http 连接,然而你的源站做了 https 强制跳转,会导致无法成功建立连接,使用的“完全”配置则无需担心这个问题
zijian
2021-04-24 20:02:49 +08:00
@ruixue 如果我选择关闭“始终使用 HTTPS”这个功能,说明用户可以通过 http 申请访问我的网站,此时 cf 会带着 http 向源站发起请求,源站将 http 转成 https 进行回应,又转回 cf,cf 带着 https 反馈给用户,是这样么?

但是这个流程和我当前选择的 full 模式好像是不一致的吧,full 模式是不是要求这一个来回都是 https 加密的?
zijian
2021-04-24 20:03:57 +08:00
我一直以为选择 full 模式要求“始终使用 HTTPS”这一项必须得开着呢
zijian
2021-04-24 20:11:47 +08:00
可不可以这样理解,full 模式只是对 用户到 cf,或者 cf 到源站之间的证书安全进行控制,而 https 又是另外一回事了,https 大于 cert 这个概念
opengps
2021-04-24 22:44:10 +08:00
就近从 CF 处吧 http 转为 https 省事很多,这样你源站只需要开启一个端口就够用。甚至说为了有些提速,你在 CF 以外用 https (含 http 跳转 https ),CF 到源站用 http
chinvo
2021-04-24 23:14:47 +08:00
full 是用户到 cf cf 到源站 都 https

hsts 和 http 的 301 是用户到 cf
dzdh
2021-04-24 23:39:52 +08:00
cf 跳转和你的服务器自己跳转是两回事。

我觉得用 CF 有一个『隐藏服务器 IP 』的目的在。

其次,你怎么做到用 CF 的同时能让 HTTP 和 HTTPS 走两条线路的?
ruixue
2021-04-25 00:14:56 +08:00
@zijian 并不是,full 模式就是 https 回源,即使用户使用 http 和 cf 建立连接,cf 也会通过 https 回源

也就是说:

flexible+关闭“始终使用 HTTPS”,那么用户可以和 cf 使用 http 或 https 连接,而 cf 和源站使用 http 连接

flexible+打开“始终使用 HTTPS”,那么用户只和 cf 使用 https 连接,而 cf 和源站使用 http 连接

full+关闭“始终使用 HTTPS”,那么用户可以和 cf 使用 http 或 https 连接,而 cf 和源站使用 https 连接

full+打开“始终使用 HTTPS”,那么用户只和 cf 使用 https 连接,cf 和源站使用 https 连接

简而言之,flexible 、full 是控制 cf 回源用的协议,“始终使用 HTTPS”是控制是否强制用户使用 https 访问 cf

我之前可能有一点没有说清楚,“始终使用 HTTPS”和直接在源站上配置 http 到 https 的 301 跳转效果是一样的,后面半句话的背景是用户直接访问你的源站,获得了 301 跳转状态码。如果你希望访问 cf 的用户都能自动跳转 https,那么就需要把“始终使用 HTTPS”打开
oott123
2021-04-25 01:23:44 +08:00
楼上说得不对,不管你用如何设置,用户 http 访问就是 http 回源,除非 CF 或者你把用户跳到了 https 上

flexible 和 full 只决定用户用 https 时,走 http 回源还是走 https 回源
alexkkaa
2021-04-25 08:15:50 +08:00
必须啊 cf 现在已经全局 http3 了 前两年 chrome 就已经把非 https 的网站红标警告了,你是用的国产浏览器还是老版本 chrome ?
zijian
2021-04-25 09:12:43 +08:00
@ruixue 好的,我明白您的意思了,感谢🙏
ruixue
2021-04-25 09:45:05 +08:00
@oott123 试了下确实如此,是我之前说错了,谢谢指正

@zijian 抱歉,前面我说的不对,full 模式并不是强制 https 回源,而是在用户使用 https 时,保证回源也使用 https 。也就是说如果关闭“始终使用 HTTPS”,那么设置为 full 时,用户和 cf 使用 http 连接,cf 和源站也使用 http 连接,用户和 cf 使用 https 连接,cf 和源站也使用 https 连接
zmsky
2021-04-26 13:51:35 +08:00
想问一下如何做到国内直接访问,不同的域名么?
humxman
2021-04-26 18:12:54 +08:00
如果想用户只输入域名在不经过跳转的情况下直接访问 HTTPS,你需要加入 HSTS 头部信息。并且在下面的网站添加自己的域名到预加载例表。
https://hstspreload.org/

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

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

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

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

© 2021 V2EX