Nginx配合CDN使用源站被暴露的问题

Nginx配合CDN使用源站被暴露的问题

前言

CDN 即内容分发网络,CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能,使用户就近获取所需的内容,降低网络阻塞,提高用户访问响应速度和命中率。 – 引用自《百度百科》

CDN不仅具有加速的效果,更重要的是,保护源站安全,隐藏真实的源站信息。

问题分析

在本博客部署之后,CDN 也用上了,然而出现了奇奇怪怪的问题。比如点击菜单栏的时候,自动跳转到源站域名去了,纳尼。这怎么能忍,于是敲开了 Chrome 的开发者工具(F12 打开)。 Network 选项卡查看到如下信息:

image-20200410170952004
从图中看得到的信息
1
request: https://sevth.com/music -> response: https://xxxxxx/music/
我们可以知道的一些事情

首先,排除掉是 CDN 网络返回该状态码,一般情况下,CDN响应的内容都是根据源站的内容来响应的,不会主动响应某些内容。

然后我登录到服务查看 Nginx 日志,发现大量的 301 重定向。

image-20200410214208446

这两条的记录区别就是,末尾带 / 的请求通过了,不带的被 301 重定向了,而且被重定向的地址还是绝对地址。

经过一番百度得知:

Nginx主动设置301 Moved Permanently状态码只有一种情况,当用户输入了一个url地址,最后的部分是一个文件目录。比如 http://www.test.com/index, Nginx在运行过程中没有找到index这个文件,但发现了index是个目录。于是本次访问的状态码就会被设置成301 Moved Permanently。

解决问题

知道了原因后,解决就简单了,让 Nginx 不返回绝对地址,返回相对地址不就行了呗。

1
2
3
4
5
server{
absolute_redirect off;

// 其它配置...
}

查看结果

image-20200410172154141

这样就完美的解决了问题。

参考链接: Nginx默认配置导致CDN源站泄露

评论


:D 一言句子获取中...