背景
常常遇到用户的web服务配置了多个节点的情况下,配置无法访问,根本原因是用户没有理解http(https)的工作原理
问题说明
多个用户遇到配置好了Web服务,但是访问的时候提示400错误
简述http(s)工作原理
https抓包概览
https的工作原理网上资料比较多,这里就不赘述,本文通过抓取网络包的方式,介绍交互过程
http交互细节
发送的请求包中包含Host字段,用于匹配web服务器中(nginx为例)的server_name字段,同时也带了request相关参数、用户使用的客户端等信息
http跳转https
http请求跳转到https时,会回复一个302的包,并带上Location字段说明需要跳转到的地址,http之上携带具体的页面内容。
收到跳转地址后,会跟新地址进行一轮
https客户端发送Client Hello
https无法像http一样携带一个明文的Host,因此需要增加扩展SNI,标识访问的域名,用于web服务器选择对应的server_name
完成https交互后,就开始数据的请求和返回。
如果需要完成Web服务的配置,需要理解访问过程中域名的发送方式
Web服务器配置
服务器接收客户端发送过来的Host或者SNI的server_name字段,选择不同的服务器
常见架构及配置
架构
以下按照常见链路,对配置做说明
CDN配置
1、源站地址可以填IP或者域名,如果填域名,也会直接解析成IP,不做其他作用,示例中的地址是下一级(WAF)配置完成后的CNAME,见下一章节。
2、回源域名:对应源站Web服务的server_name字段,如果是WAF,则是配置的域名
注意:
①如果有多个节点,每个节点的回源域名,都需要统一,这个也是用户配置过程中出错较多的
②CDN要增加WAF功能,可以使用SCDN,见链接https://console.cloud.tencent.com/cdn/scdn,这里不再赘述
WAF
WAF配置的时候会强制要求输入域名,回源原理与CDN相似,如果接入代理,需要勾选代理情况为是
CLB
CLB需要创建监听器,然后添加转发规则,转发规则域名写waftest.xxx.com
API网关
API网关需要配置自定义域名
COS
cos可以在cdn直接配置回源,也可以自定义,本次案例中使用自定义
cos可以如果需要通过域名访问,需要自定义源站域名,操作如上图
高防包/高防IP
高防包可以直接选择绑定WAF
高防IP的配置原理相同,不再赘述。
总结
其实配置Web服务,理解了http需要发送Host或者server_name,配置的时候区分好回源地址和域名,基本上所有常见的Web服务配置都大同小异。