原理
本示例中,将网站的IP接入CloudFlare的CDN达到隐藏IP的目的,同时开启CF当中的FULL SSL功能,全程对站点进行SSL加密,最终想要达到上述目的,还需要在站点当中的nginx配置https访问。访问路径如下
User——CF CDN——SITE
其中每一步都有https加密,用户访问域名是由CDN进行转发的,最终在访问到SITE,SITE本身进行了https访问处理。
将站点接入CF CDN解析
将原托管的网站DNS修改为CF的DNS,交由CF进行DNS解析,即可设置接入CDN
先注册CF网站
本节略过
将网站通过CF解析
添加站点
选择免费套餐
确认DNS指向
修改原站点DNS指向
本步骤即将原来站点接入CF的DNS进行管理,方便开启CDN。
完成此步骤,即代表站点开启了CF的免费CDN,可以尝试ping一下或者直接访问,IP会被隐藏
开启全站加密
开启全程加密之后,还需要在站点本身设置加密及证书,否则仅是用户访问CDN这一段路程进行加密,CDN转接site这一段并没有进行加密
申请CF的免费SSL证书
进入下列界面申请免费SSL证书,有效期15年,不用长期续期非常方便。
申请之前务必准备好记录措施,因为私钥只会显示一次,也只会有你一个人知道,如果错过只能重新申请一份证书
保存你的证书公钥和私钥
公钥是存放于网站,由浏览器用于验证的一部分,私钥则用于确认公钥的合法性,所以私钥需要保密,公钥是公开的。
CF给出的公钥和私钥是文本形式的,需要人为的去保存成对应的格式。
公钥
由-----BEGIN CERTIFICATE-----开头,记住是5个英文小横杠,结束也有类似的标示。
保存成pem后缀文件即可,文件名随意。私钥
由-----BEGIN PRIVATE KEY-----开头,结束也有类似提示。
保存成key后缀文件即可,文件名随意。
站点启用SSL(https)
上传证书到站点
进入nginx的安装文件夹,一般是/usr/local/nginx/conf,创建一个cert文件夹用于存放证书,则最终证书存放目录如下
/usr/local/nginx/conf/cert
将证书的公钥和私钥传到这个文件夹即可,那么证书的绝对路径如下
公钥:/usr/local/nginx/conf/cert/public.pem
私钥:/usr/local/nginx/conf/cert/private.key
配置nginx开启https及443端口访问
一般nginx的配置文件在/usr/local/nginx/conf/nginx.conf,不同系统可能有所不同,可以通过命令ps aux | grep nginx看到正在运行的nginx进程,一般后面都会指向nginx的配置文件目录,按实际情况进行查找即可,举例如下
nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
打开配置文件后,会看到nginx的一些基本配置,一般来说都会有一个http{}配置,一个server{}配置,代表的是http访问的一些配置和服务器端的一些配置,一般server配置当中的应该是80端口,则代表普通的http访问。
那么我们定位到文件最后,把当前的server配置完全复制一份,此时的配置结构大概如下
http{
}
server{
listen 80;
……
}
server{
listen 80;
……
}
此时将第二个server定义为https访问即可,修改listen的端口80为443,并复制如下内容到listen后面即可,同时在listen 443后面加入空格default_server字样,表明默认访问https站点。
ssl on;
ssl_certificate /usr/local/nginx/conf/cert/public.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/private.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
此时你的conf文件结构应该大概如下
http{
}
server{
listen 80;
……
}
server{
listen 443 default_server;
ssl on;
ssl_certificate /usr/local/nginx/conf/cert/public.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/private.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
……
}
到此所有配置完成,保存配置后重启nginx即可
service nginx restart
重启成功后即可使用https访问站点
(可选)配置http访问强制跳转
如果用户访问http版本的站点,那么站点是仍然可以正常访问到的,所以我们要对80端口的访问进行强制跳转到https访问,在上述的第一个server配置当中,加入如下参数即可
rewrite ^(.*)$ https://$host$1 permanent;
配置完成
至此,网站应该开启了https访问,并且通过CDN隐藏了真实IP,访问站点也会提示安全链接
啰嗦
TLS是互联网最后一道防线,没有这个你的站点就相当于裸奔,通过加密传输对访问者有益,对站点的管理用也有益。