Nginx自建CDN加速节点 实现DNS智能解析网站项目

如今,网站项目越来越多的会使用CDN加速,如果需要便捷一点的可以直接用第三方提供的CDN加速服务,比如百度CDN、七牛、又拍云、腾讯云、阿里云等等服务商都有提供这类服务。但是前提条件是需要一定的成本,以及网站域名是需要BA才可以使用国内CDN服务商。

那有没有一个办法,如果我们网站域名没有BA也可以使用到加速效果呢?有两个办法,第一就是将我们的网站搬迁至亚洲机房,比如香港、新加坡、日本等服务器,速度肯定是相比美国快一些的。第二就是我们可以利用反向解析的方式,自建反向解析CDN,然后自己来就架设CDN节点,这样会比直接用海外服务器快。

而且,我们可以利用DNSPOD等第三方解析工具提供的移动、联通、电信等分线路设定不同的解析节点。比如我们可以用电信速度快的服务器做电信节点、移动访问快的服务器做移动节点、联通访问速度快的做联通节点,然后三个节点都自动指向源站服务器网站。

应该是在去年的时候有看到XIAOZ同学分享的这篇文章(https://www.xiaoz.me/archives/8775)有介绍到可以实现多线路节点的智能解析,且笔者前天又看到QI同学也针对这个教程做的整理(https://wzfou.com/nginx-cdn/)。在这篇文章中,笔者也将学习他们的架设方法自己也亲手看看如何配置的,万一以后有需要也可以自己搭建,先模拟测试是否可行。

第一、准备工作

1、源站点网站

我们在准备部署CDN节点之前,我们需要有一个正在运行的源站点。这个我们可以任意找一个在使用的站点,我们目的就是希望将这个网站加速。

2、自备CDN服务器

我们需要准备搭建CDN节点的服务器,这里我为了演示的方便,就只用一台服务器。因为多台的方法也是类似的,只是到时候DNSPOD解析的节点和备用节点智能切换解析而已,只要会搭建一台其他就都一样。

第二、架设Nginx环境

架设Nginx环境很简单,可以用我们熟悉的LNMP一键WEB安装包安装自带的,或者直接用XIAOZ提供的一键脚本,但是只能在Centos7或者Deebian8系统中才可以执行。

 

yum install wget -y
wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh
chmod +x nginx.sh && ./nginx.sh

我们需要在CDN节点服务器先安装有Nginx环境。

第三、配置反向解析

1、修改DNS配置

我们需要先修改CDN节点DNS,授权用来解析哪个域名和服务器。

vi /etc/hosts

添加一行:

xxx.xxx.xxx.xxx www.laobuluo.com

格式是"网站所在服务器IP 需要使用CDN域名"

2、添加网站解析

我们需要在CDN节点服务器里创建站点,用来缓存数据的目录。

#创建缓存目录
mkdir -p /data/wwwroot/caches/www.laobuluo.com
#设置缓存目录权限
chown -R www:www /data/wwwroot/caches/www.laobuluo.com
#创建xiaoz.me.conf
vi /usr/local/nginx/conf/vhost/laobuluo.com.conf

如果我们是用LNMP一键包环境的,那直接用自带的命令创建站点,这里我们没有用到一键包,所以得手工创建缓存目录和站点域名绑定。

proxy_cache_path /data/wwwroot/caches/www.laobuluo.com levels=1:2 keys_zone=laobuluo:50m inactive=30m max_size=50m;
server {
listen 80;
server_name www.laobuluo.com;
charset utf-8,gbk;
location / {
proxy_set_header Accept-Encoding "";
proxy_pass http://www.laobuluo.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache laobuluo;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
}
}

根据上面的配置,我们需要将对应的目录修改成自己的。

/data/wwwroot/caches/www.laobuluo.com:为缓存目录
levels:指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母。
keys_zone=laobuluo:50m:为缓存空间起个名字,这里取名为"laobuluo",后面的50m指内存缓存空间
inactive=30m:如果30分钟内该资源没有被访问则删除
max_size=50m:指硬盘缓存大小为50MB
proxy_cache_valid:指定状态码缓存时间,前面写状态码,后面写缓存时间

重启Nginx生效:

/usr/local/nginx/sbin/nginx -s reload

3、DNS分节点 解析

DNS分节点 解析

然后根据实际的需要在第三方DNS解析,你要设置全部用CDN节点或者是电信、移动、联通,还是其他线路,就指向对应IP。解析完毕之后,我们用第三方PING工具看看是不是生效,但是最好的办法是先全区域默认用节点IP,自己也看看是不是真实生效。

4、检查缓存

检查缓存是否实现

可以看到CDN节点服务器有缓存生成。

第四、实现HTTPS解析配置

以上我们是实现的HTTP解析指向,如果是HTTPS的话,我们是需要在配置文件.conf中配置HTTPS的。

proxy_cache_path /data/wwwroot/caches/www.laobuluo.com levels=1:2 keys_zone=laobuluo:50m inactive=30m max_size=50m;
server {
listen 443 ssl http2;
ssl_certificate /data/ssl/www.laobuluo.com/www_laobuluo_com.crt;
ssl_certificate_key /data/ssl/www.laobuluo.com/www_laobuluo_com.key;
ssl_session_timeout 1d;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;

server_name www.laobuluo.com;
access_log /data/wwwlogs/laobuluo.com_nginx.log combined;

charset utf-8,gbk;
location / {
proxy_set_header Accept-Encoding "";
proxy_pass https://www.laobuluo.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache laobuluo;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
}
}
server {
listen 80 default_server;
return 301 https://$host$request_uri;
}

CDN节点解析到SSL证书网站的时候,需要将证书放到CDN节点服务器对应目录,然后在对应conf配置文件中效仿上面的解析。

第五、CDN加速缓存问题

上面我们可以实现利用Nginx进行反向解析实现加速节点,但是没有解决缓存问题。我们是需要给网站定期来处理缓存更新。

1、配置ngx_cache_purge

location ~ /purge(/.*) {
allow all;
proxy_cache_purge cache_one $proxy_host$1$is_args$args;
error_page 405 =200 /purge$1;
}

红色的cache_one需要与上面定义的keys_zone保持一致。

2、WordPress自动刷新缓存

<script>
$(document).ready(function(){
$("#submit").click(function(){
var uri = "https://我们的网站域名/purge" + window.location.pathname;
$.get(uri,function(data,status){
return true;
});
});
});
</script>

将代码添加到WP网站模板底部。

3、完整的配置文件

proxy_cache_path /data/caches levels=1:2 keys_zone=xiaozcdn:100m inactive=30m max_size=100m;
server
{
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /xxx/www_xiaoz_me.crt;
ssl_certificate_key /xxx/www_xiaoz_me.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;

server_name www.xiaoz.me;
charset utf-8,gbk;

#删除缓存
location ~ /dcache(/.*) {
allow all;
proxy_cache_purge xiaozcdn $proxy_host$1$is_args$args;
error_page 405 =200 /purge$1;
}

location / {
#proxy_set_header Accept-Encoding "";
proxy_pass https://www.xiaoz.me;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache xiaozcdn;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
#达到第几次被缓存?
proxy_cache_min_uses 1;
expires 12h;
proxy_cache_key $uri$is_args$args;
}
}
server
{
listen 80;
server_name www.xiaoz.me;
rewrite ^(.*) https://www.xiaoz.me$1 permanent;
}

这里直接复制XIAOZ完整的包含缓存配置的配置文件(https://www.xiaoz.me/archives/9431)。

最后,这样我们就可以自己创建CDN节点给网站加速。也可以实现不同节点服务器,与DNSPOD等第三方解析进行分线路解析。

本文来自老部落:https://www.laobuluo.com/1119.html

转载于:https://www.cnblogs.com/itbulu/p/9027349.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串字典排序

把字符串以字典的展示形式排序&#xff0c;如把字符串abc,bad,aade,bdca排列成aade,abc,bad,bdca。 1.使用冒泡排序 (1) 相邻两数据两两比较&#xff0c;较大的放到后面&#xff0c;直到把最大的字符串放在最后一个位置。 (2) 从头开始再进行相邻数据两两比较&#xff0c;较大的…

OC2_点语法(属性关键字)

// // Dog.h // OC2_点语法(属性关键字) // // Created by zhangxueming on 15/6/16. // Copyright (c) 2015年 zhangxueming. All rights reserved. //#import <Foundation/Foundation.h>interface Dog : NSObject //属性关键字 //assgin(缺省)直接赋值 //基本类型 …

matlab中获取view,ios 怎么获取一个view的位置

ios 怎么获取一个view的位置以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;ios 怎么获取一个view的位置打开appstore进入应用&#xff0c;右上角的分享按钮(从右往左数第二个)&#xff0c;拷…

eureka需要替换吗_Spring Cloud Alibaba迁移指南1:零代码从Eureka迁移到Nacos

作者&#xff1a;得少&#xff0c;校对&#xff1a;周立。在本号首发&#xff0c;欢迎转载。Spring Cloud官方宣布Spring Cloud Netflix进入维护状态&#xff0c;后续不再会有新的功能已成为事实。作为开发者&#xff0c;如何使用极简的方式替换Netflix相关组件成为首要解决的问…

P1134 阶乘问题

题目描述 也许你早就知道阶乘的含义&#xff0c;N阶乘是由1到N相乘而产生&#xff0c;如&#xff1a; 12! 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 479,001,600 12的阶乘最右边的非零位为6。 写一个程序&#xff0c;计算N(1<N<50,000,000)阶乘的最右边的非零…

JAVA TCP通信练习

2019独角兽企业重金招聘Python工程师标准>>> 1、Server端 package com.hhdys.serviceimpl;import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.…

[转载]UEditor报错TypeError: me.body is undefined

本文转载来自&#xff1a; UEditor报错TypeError: me.body is undefined 今天在使用UEditor的setContent的时候报错&#xff0c;报错代码如下 TypeError: me.body is undefined 或 Uncaught TypeError: Cannot set property innerHTML of undefined 错误的原因是没有等UEditor创…

微服务架构下的身份认证

从单体应用架构到分布式应用架构再到微服务架构&#xff0c;应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化&#xff0c;身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用&#xff0c;如何保证高效安全的身份认证&#xff1f;面对外…

php缓存注入,利用Thinkphp 5缓存漏洞实现前台Getshell

原标题&#xff1a;利用Thinkphp 5缓存漏洞实现前台Getshell*本文原创作者&#xff1a;WindWing&#xff0c;属于FreeBuf原创奖励计划&#xff0c;禁止转载000 背景网站为了实现加速访问&#xff0c;会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存…

mac版小达人点读包怎么安装_小达人点读笔扩容实战:16G变128G

随着小达人点读笔可以点读的童书越来越多&#xff0c;笔的容量就是个尴尬的问题&#xff1a;是处理掉手头的16G容量的旧点读笔&#xff0c;重新再买32G容量的新点记笔吗&#xff1f;如果32G容量也不够用怎么办&#xff1f;官方可没有更大容量的点读笔了。删除原先的点读内容&am…

序列化与反序列化(记住密码)

平常我们在做"记住密码"的时候,大多都是使用Cookie保存,然后设置保存的时间,但是上次Frame(窗体应用程序中)项目中,一直没找到怎么保存Cookie的方法,所以采用使用序列化的方法完成。 //序列化 1.引用命名空间 Using System.IO 2.登录成功序列化代码: if(cb_savepw…

看电子书的好处

省钱&#xff0c;基本上都能从网上下载到。 在电脑上和手机上都可以看&#xff0c;而且排除了对光源的要求&#xff0c;因为这些设备的屏幕本身自带光源。 做笔记时可以直接截屏保存&#xff0c;节省时间&#xff0c;或者是复制粘贴。 携带方便&#xff0c;要么下载到本地&a…

WorldWind源码剖析系列:可渲染对象类RenderableObject

RenderableObject是WorldWind中所有需要渲染的对象的父类&#xff0c;继承了接口IRenderable和Icomparable。其派生类体系如下所示。RenderableObject的成员如下所示。 RenderableObjectList也继承自RenderableObject。 接口Irenderable内部仅仅定义下面三个接口&#xff0c;分…

php table 下拉框,LayerUI的table 里面加 select 下拉框 – Fly社区-Mikel

先上效果图&#xff1a;直接上代码//添加样式&#xff1a;.table-select-icon{position:absolute;right:10px;line-height:34px;color:#d3d3d3}.table-select-selected dl{display:block}.table-select dl{position:absolute;left:0;padding:5px 0;z-index:999;min-width:100%;…

家里wifi网速越来越慢_家里的wifi信号不好?有了它再也不怕网速慢啦

夏天太热&#xff0c;就想宅在家里刷刷剧、打打游戏、看看新闻。可是网速却不好&#xff0c;看一会儿&#xff0c;卡一会儿&#xff0c;本来天气就热&#xff0c;这样更加烦躁&#xff01;这WiFi信号怎么会这么差&#xff1f;有什么好办法能解决这个问题呢&#xff1f;只要有了…

html - meta name=viewport content=XX/ 标签常见属性及说明

<meta name"viewport" content"widthdevice-width, initial-scale1.0, minimum-scale0.5, maximum-scale2.0, user-scalableyes" />在网页的<head>中增加以上这句话&#xff0c;可以让网页的宽度自动适应手机屏幕的宽度。其中&#xff1a;widt…

数据权限设计(原创)

数据权限是针对数据表中行级和列级的控制&#xff0c;相对操作权限&#xff0c;颗粒度更细&#xff0c;复杂度更高&#xff0c;因为在项目中也有相关需求&#xff0c;是直接通过硬编码sql查询条件控制的&#xff0c;后期维护起来比较困难。所以有了一些想法&#xff0c;后期也将…

python文件操作实验总结,[干货分享]Python文件操作技巧总结

引言小伙伴们&#xff0c;今天给大家讲解一下python程序下的文件操作完整技巧梳理&#xff0c;都是笔者总结的干货。通过本文阅读&#xff0c;不仅可以带来生产力提升&#xff0c;也可以开发小脚本为生活带来乐趣。首先不知道大家对python有没有了解&#xff0c;不太会用的小伙…