• 欢迎访问好鸭博客网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入 QQ群
  • Git主题现已支持滚动公告栏功能,兼容其他浏览器,看到的就是咯,在后台最新消息那里用li标签添加即可。

基于宝塔Nginx反代CloudFlare自建CDN节点国内外访客分流访问的超详细图文教程

建站 haoduck 3年前 (2020-12-19) 3591次浏览 19个评论

惯例,先夸一下CloudFlare

CloudFlare是一家美国的服务商,大概是"最良心"的CDN服务商。它所提供的CDN免费套餐,通篇贯彻"免费"二字,没有友商的那些各种限制,免备案(海外节点)、免费不限量的SSL、免费不限量的流量/请求数、免费的页面规则、免费的IPV6支持,免费的WebSocket协议支持,免费的防DDOS/防CC。官方客服直言免费套餐和高级套餐的节点是一样的,只是权重侧重会有不同。嗷嗷我愿称其为全球21世纪最良心免费套餐。

那么,既然那么良心,为什么还要自己反代它呢?确实,CloudFlare免费套餐的节点对于国内的线路,实在是"不足为外人道"。是拥有再多的优点难以掩盖的问题,虽然它有"天价"的企业套餐,可以提供国内节点,但一来高昂的价格不在我们的预算之内,再者,想要使用国内节点也还需要ICP备案,很多草根站长用CloudFlare大概都是看中了它的免费免ICP备案

但现在我们就有一个,虽然没有国内节点那么好那么快,但是成本更低,也无需ICP备案的折中方法。也就是我们自己用线路相对好一点的VPS云服务器反代我们线路不好的源站服务器。

而在这里又有两个选择
一是我们用于反代服务器直接反代源站服务器
二是用反代服务器选择反代CloudFlareCloudFlare再回源到源站服务器

嗷嗷在本文中选择的是后者,一来是CloudFlare的线路在国外也算是比较稳定的,二来是CloudFlare会在靠近反代服务器的节点缓存一些诸如静态资源这些文件。一定程度上降低了回源率,对于源站服务器压力更小。

嗷嗷特意去谷歌云开了一台香港小鸡,作为本文中演示的机器,那么,就以反代好鸭博客为例,从安装宝塔开始说起吧。

如果你已经安装好了宝塔,可以跳过前面的内容。

一、安装宝塔

curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh

二、安装Nginx

通过命令行安装或者登录宝塔后台安装,都是可以的

这里我使用命令行安装

cd /www/server/panel/install/
bash install_soft.sh 1 install nginx 1.19

三、安装Nginx防火墙插件

Nginx防火墙可以提供WAF功能,是非常好的一个插件

登录后台面板,在安装软件界面的第三方应用有免费的"Nginx免费防火墙"

当然,也可以看看这篇文章:《宝塔7.4.6手动修改文件使用付费插件的方法》:https://haoduck.com/667.html

免费防火墙和付费防火墙二选其一安装即可,当然,你硬是要两个一起装也是装不了的,装了免费再装付费应该会自动卸载免费的,反过来也一样。

Nginx防火墙里有个配置是"禁止海外访问",我们本来的打算这个反代节点就是给国内访客分流,所以可以不关,但建议还是关掉。

四、创建一个默认的站点

  • 设置默认站点后,所有未绑定的域名和IP都被定向到默认站点
  • 可有效防止恶意解析

1. 在宝塔后台添加一个网站,域名可以随便填写一个不用的。

2. 将默认站点设置为它

3. 修改网站配置文件,添加一行return 444;,保存。

然后设置SSL为随意一个自签证书,自签证书教程:《使用openssl一键自签SSL证书命令》

这时候,所有没有绑定的域名解析到服务器都不会响应,而不是宝塔的错误页面。

五、宝塔中创建反代网站

1. 在宝塔后台创建一个网站,域名写你网站的域名

如本文中的好鸭博客:haoduck.com

2. 配置SSL

可以选择Let's Encrypt,或者自己自定义填写,我这里是填写我已有的。

3. 添加反向代理

  • 名称随意
  • 目标URL填https://CloudFlare的IP
  • 发送域名$host,或者填域名也可以
  • 缓存不开启(缓存不用宝塔默认的配置)

CloudFlare的IP可以填和我一样的104.19.19.19,也可以自己找别的IP,诸如1.0.0.11.1.1.1都是可以的,可以到SSH终端ping一下看看

我ping这个IP只有2ms左右,说明CloudFlare在离我这个香港VPS很近的地方有边缘节点,这是很好的

4. 修改反代配置,使其支持https

依次点开反向代理配置文件

在每个location内分别添加下列两行代码

    proxy_ssl_name $host;
    proxy_ssl_server_name on;

5. 修改反代配置,缓存静态文件

参考上面第4步,修改反代配置,再最后面添加下列代码

location ~* \.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|ico|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|css|js)$
{
    proxy_pass https://104.19.19.19;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
    
    add_header X-Cache $upstream_cache_status;
    #Set Nginx Cache

    proxy_ignore_headers Set-Cookie Cache-Control expires;
    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 2d;
    expires 12h;
}

倒数第二行proxy_cache_valid 200 304 301 302 2d;后面的2d就是缓存2天的意思,3d是3天,4d是4天以此类推

修改之后就不要用自带的编辑功能了(会使我们添加的缓存代码失效),需要修改的话建议像是第4、第5步这样点配置文件进去修改。

附完整配置,非宝塔纯Nginx用户可以直接复制全部,理论上是一样用的(宝塔用户也是一样可以偷懒省略第4步直接复制这个)

#PROXY-START/
location ~* \.(php|jsp|cgi|asp|aspx)$
{
    proxy_pass https://104.19.19.19;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
}
location /
{
    proxy_pass https://104.19.19.19;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
    
    add_header X-Cache $upstream_cache_status;
	#Set Nginx Cache
	proxy_ignore_headers Set-Cookie Cache-Control expires;
	add_header Cache-Control no-cache;
    expires 12h;
}
location ~* \.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|ico|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|css|js)$
{
    proxy_pass https://104.19.19.19;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
    
    add_header X-Cache $upstream_cache_status;
	#Set Nginx Cache

    proxy_ignore_headers Set-Cookie Cache-Control expires;
    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 2d;
    expires 12h;
}
#PROXY-END/

六、本地改hosts测试

1. 在本地hosts添加一行,把域名指向反代服务器的IP

2. 浏览器新开一个窗口/标签页(无痕模式更佳),打开调试模式,如果有本身开了代理的话先关掉

切到Network页面,地址框直接打开https的页面,如我的https://haoduck.com

如果你严格按照我的步骤来做,一般是成功的,如图,我的好鸭博客自建香港节点就部署成功了

七、在DNS解析国内外访客分流

这个前提是CloudFlare需要接入CloudFlare Partner

如果你还没有这样做,可以看看这篇文章《通过CloudFlare Partner使用CNAME接入CloudFlare CDN的教程》:https://haoduck.com/666.html

转到你的DNS服务商后台

如DNSPod,在添加解析时,就可以选择默认境内境外移动联通电信

我的建议是这样
默认设置到CloudFlare
境内设置到自建反代节点
境外设置到CloudFlare,可以不设置(和默认有所重叠)
移动联通电信如果你有多个自建的反代节点,针对不同运营商线路各有优劣,那就按需设置吧

如果你还需要更细分的,按地区的(细分到华南、华北、西南等等)DNS,可以试试华为云DNS,华为云DNS的免费套餐对此是最强的。

相关文章

《宝塔7.4.6手动修改文件使用付费插件的方法》:https://haoduck.com/667.html
《通过CloudFlare Partner使用CNAME接入CloudFlare CDN的教程》:https://haoduck.com/666.html
《一键干掉最新版本宝塔面板的强制登陆限制功能》:https://haoduck.com/643.html


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:基于宝塔Nginx反代CloudFlare自建CDN节点国内外访客分流访问的超详细图文教程
喜欢 (24)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(19)个小伙伴在吐槽
  1. 这速度。。我怀疑你是AI有个提问:如果源站和CF是http连接(SSL:Flexible),那么反代的站点可以下载CF的证书填到宝塔里么?还是一定要申请单独的证书
    艾斯德斯2020-12-19 23:21 Reply
    • CloudFlare那个证书只能源站用,浏览器是不信任它的
      haoduck2020-12-19 23:24 Reply
      • 额。。问题就是主站其实没开SSL,只是CF开了;这样的情况下直接用CDN的宝塔去申请Let's的证书是申请不了的,我在想还有啥办法。。
        艾斯德斯2020-12-20 04:03 Reply
        • 用DNS验证的方式申请即可
          haoduck2020-12-20 19:07 Reply
  2. 第六步是干嘛的 晕
    KEY API2020-12-20 11:03 Reply
  3. 不是特别明白,你原站在哪儿啊?
    joe2020-12-20 13:51 Reply
    • 这篇文章和源站在哪没关系了,因为是反代的CloudFlare。源站一般可以不用改动配置。
      haoduck2020-12-20 19:09 Reply
      • 意思是cdn反代cdn吗?cf的ip在哪儿可以选啊?你文中的用的104.19.19.19是固定不变吗
        joe2020-12-21 00:10 Reply
        • 是的,直接用104.19.19.19即可,CloudFlare的IP都是Anycast的
          haoduck2020-12-21 00:29 Reply
  4. 请问博主使用的SSH连接工具是啥?
    刀客2020-12-20 22:51 Reply
  5. 你好,反向代理的话,代理服务器走的流量就是网站的流量,不走cdn了,是吗?
    李汉卿2020-12-23 12:29 Reply
    • 不回源就不走,一般情况下多少会走的,如果你希望减少回源,可以调高缓存时间。动态请求是反代服务器、CloudFlare、源站都会消耗流量。
      haoduck2020-12-23 13:14 Reply
  6. 代理之后一直显示cloudflare没有缓存。
    李汉卿2021-01-11 12:17 Reply
    • 看看cloudflare的缓存规则,这个应该不是反代的问题
      haoduck2021-01-11 13:16 Reply
  7. 遇到个小问题,Cloudflare貌似会把访客的UP全部识别成反代节点的IP,有办法让CF去X-Forwarded-For识别一下真实的访客IP吗?
    艾斯德斯2021-01-13 12:04 Reply
  8. 网站图片加载慢是跟代理机子有关吗?
    李汉卿2021-01-13 18:16 Reply
  9. 四、创建一个默认的站点,再这一步,只创建http的网站是ok的,访问IP会“该网页无法正常运作”但改成https+ip会变成宝塔默认页面!!!
    理由2021-01-23 20:52 Reply
    • 可以设置一个自签的SSL证书
      haoduck2021-01-24 10:11 Reply