Loading... ### 起因 由于Let's encrypt的证书过期了,而自动续签功能坏了于是我手动再申请了一个泛域名证书。不料导入进Nginx的时候出了问题,似乎是之前配置CDN的时候就没有怎么理解CDN的过程,这里配置的时候就把CDN搞坏了,导致CDN回源的结果异常(具体是抓取了我其他服务的页面),于是我研究了一下CDN的回源过程。 ### 探讨 CDN的运作流程是这样的: > 输入域名——解析出 CNAME记录(CDN服务商提供的)——解析出地理位置最近的缓存服务器的IP地址——解析出真实主机的IP地址(主机商提供的)——向主机发起数据请求——得到数据并存储到缓存服务器上 我们这里探讨回源的设置。 --- 又拍云的回源管理界面有`源站设置`和`回源Host`两项设置。 #### 源站设置 在源站设置是这样的:  提示也说了这里填的是<u>**源站实际可访问的网络地址**</u>,在我的理解来看,这个源站其实并不是指的网站,而是部署网站的服务器的地址,填的是IP地址那就直接是IP地址,填的是域名那就其实对应于域名解析后的结果,跟网站没有直接的关系。 #### 回源Host 回源Host的设置其实才是跟网站有联系的配置。首先看一下我服务器的Nginx配置:  假设我服务器的IP为`123.123.123.123`,那么我们可以在源站设置中填写回源地址为`123.123.123.123`,端口就填的是Nginx设置中的`listener port`对应的端口号。重点来了,那回源Host是什么呢?其实回源Host对应的就是这里的server_name。因为一台服务器上可能部署了不同的网站(服务),因此需要CDN一个标识符来区别开不同的服务,这里用的就是回源Host。当回源Host缺省时默认就为用户浏览器提供的域名。 #### 回源过程 因此一次完整的回源过程可以看为: > 通过回源地址找到服务器对应的服务器->用回源Host的地址+端口访问源站并抓取数据到缓存服务器 所以在Nginx里设置serer_name为`123.123.123.123`是不对的,CDN在服务器上根本找不到这样的一个网站,因此抓取的数据也是错误的。 ### 解决 修改server_name为网站的实际域名。 最后修改:2023 年 03 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏