给站点使用HTTPS
分类:内容分享 阅读量: 2,706 次

给站点使用HTTPS

分类:内容分享 阅读量: 2,706 次

启用全站HTTPS真是崎岖坎坷,但是还好了,废了2天时间(大部分时间都是在等待域名、HTTPS配置什么的生效),终于独自搞定了一系列问题,下面分享一下步骤。

HTTPS.jpg

HTTP与HTTPS

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

这是百度的介绍,简单来说,HTTPS是加密的HTTP。随着互联网发展,HTTPS已经成为一种趋势。而且搜索引擎对于HTTPS更友好。

证书

要启用HTTPS,网站证书必不可少,大家可以自行购买或申请,大部分证书都是收费的,也有免费的,我用的就是Let's Encrypt证书。

Let's Encrypt证书

Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS。(Let's Encrypt证书是免费的,但是有效期只有3个月,也就是说,你要3个月重新申请一次证书。)

申请Let's Encrypt证书的方法有很多,我来分享一下我的方法:我之前在用一键lnmp搭建的lnmp环境中,添加网站的时候发现有一键申请Let's Encrypt证书并自动配置https。所以我就想直接让它来帮我申请shiyu.pro证书。

首先我用我的一个vps,用一键lnmp脚本搭建好了lnmp环境,(准确来说是lnp环境,因为我没搭建数据库,可以在选择数据库版本的时候选择不建立,因为用不到。)然后把我的域名shiyu.pro解析到这个vps,因为在申请证书的时候它会通过申请证书的域名来访问提起申请的vps来验证归属,不然你随随便便就就申请别人的域名证书那还得了?

Lnmpaddvhost.jpg

如图,首先输入命令lnmp vhost add添加网站,然后输入域名,输入shiyu.pro,然后第二个直接回车跳过,接着选择网站文件的目录位置,回车默认,然后是问你是否启用地址重写(rewrite rule),这个是伪静态什么的,用不到,选择n并回车。然后是问你是否启用网站日志(access log),同样n并回车。最后是添加SSL证书,这个选择y,然后会让你选择怎么添加,1是用你自己的,2是用Let's Encrypt的,我们选择2,然后会让填写邮箱地址(这个是接收Let's Encrypt证书到期通知的)。填完之后回车确定,之后再回车开始建设网站。最后结果如下图就好了。

vhostOK.jpg

然后我们拿出来证书文件,在路径/etc/letsencrypt/live/shiyu.pro/里面,我们只需要其中的2个文件:证书文件fullchain.pem和私钥privkey.pem,至此,证书搞定,我的shiyu.pro(网站域名)和oss.shiyu.pro(储存空间域名)都是这种方法申请的证书。

启用HTTPS

因为我用的是虚拟机,所以没办法直接启用HTTPS,只能通过开启CDN加速后,再开启CDN的HTTPS来间接开启HTTPS。

AliyunCDN.jpg

什么是CDN

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

说白了,CDN就是CDN的提供商在世界各地布置了很多节点,你的网站作为源头,把内容发给这些个节点,节点缓存了你的内容后,以后访客们访问你的网站就是在访问距离他们最近的节点的缓存。所以,很大程度的加快了用户访问速度,和减轻服务器压力,还可有效防止网络攻击。当然,这些服务都是要钱的。

阿里云配置CDN

我用的阿里云的虚拟机,里面有直接开启CDN,步骤也很简单,直接在控制台开启CDN加速,然后在域名管理面板上传你申请的证书文件和密钥后,在CDN的配置里面修改打开HTTPS,最后再把域名解析到它给的CNAME别名即可启用。

可是呢我发现一个问题,我用了CDN加速后,速度反而变慢了,应该是CDN的缓存机制吧,这种东西是越用越快的。

CDNhttps.jpg

七牛云配置CDN

我的oss就是用的七牛云(每个月免费的10Gb的下行HTTP流量),然后我CDN也想用七牛的…因为我感觉这样更好管理,阿里云只负责域名和主机,一年管理一次,七牛云的HTTPS流量费每月管理一次,分开管理。

七牛云的CDN也好弄,先去SSL证书服务里面点击"上传自有证书",接着把你的证书文件和密钥粘贴进去相应的位置,再起个名字。我起的名字就是"主shiyu.pro"如图:

Qiniussl.jpg

接着在"融合CDN"里面直接添加就好了,以我的阿里云虚拟机为例:

QiniuCDN.jpg

图中的下面那个通信协议选HTTPS,这个才是我们的主要目的。选了HTTPS后,下面会让你选你这个域名要用的证书,就是你上传的那个。

QiNiuCDNHTTPS.jpg

然后下边设置源站配置如图,注意圈起来的地方,虚拟机的话,要改成"IP地址"然后填你的虚拟机的IP,默认的是域名,这里说一下,我刚开始没有关闭阿里云的CDN,直接在这里填的阿里云CDN的CNAME别名,想想也是醉了,这个就是CDN加速外面又套了一个CDN加速吧…

QiNiuCDNIP.jpg

回源Host不写,然后回源协议选HTTP,如果你回源协议是HTTPS的话,还何必在用CDN来达到HTTPS的效果呢?然后是源站测试,也就是测试一下网站连通性。随便填一个你网站上的小文件然后测试一下就行,比如我这个就直接写的我网站上的SSR这个文件。然后点击"源站测试",后面显示"测试通过"说明一切正常。

最后是缓存,这个推荐自定义,点一下"推荐配置",然后根据自己意愿选择缓存时间,比如你设置一条如下

CDNCacheTime.jpg

意思是后缀为txt xml shtml html htm csv bat的文件缓存时间是1天(24小时),比如你网站有个1.txt文件,内容是“CDN缓存”。节点缓存之后,你把你网站文件1.txt的内容更改成“我今天没吃饭”,但是用户访问你网站的时候会访问节点的缓存,而缓存的内容是“CDN缓存”,所以访客看不到你新更改的“我今天没吃饭”,等24个小时后,节点重新刷新缓存,从你这里重新获取数据的时候获取到1.txt的内容是“我今天没吃饭”,它会更新,然后访客才能看到“我今天没吃饭”。

那么有时候我文章什么的出错了,需要他立刻刷新缓存怎么办?

这个简单,只要在控制台的“融合CDN”里找到“刷新预取”,输入你要刷新的文件然后提交即可。

RefreshCDNCache.jpg

结束

网络中的道道很多,需要学习的还很多…遇事多百度、多思考,一般能解决问题…吧。

评论
  1. red

    请问域名怎么加www.前缀呀

    回复
    1. @red

      你在哪里解析域名的?你把加www.前缀的域名解析到你的网站上,你的域名不就带www.前缀了吗?

      回复