正如各位看官所见,我最近刚给我的博客上了HTTPS协议。HTTPS协议已经成了每个上线网站的一个标配,如果一个上线的网站没有上HTTPS都不好意思给别人介绍说这是自己的一个作品。

HTTPS的好处

HTTPS是在HTTP协议之上加了一个SSL(传输层安全协议)层,给浏览器和服务端之间建立了一条加密的通道。至于具体工作的原理我就不在这里介绍了,请参考超文本传输安全协议(wikipedia)的介绍。那么简单的谈谈网站上HTTPS的好处,加入HTTPS的主要好处还是安全,可以有效的防止用户的账户密码,用户信息被中间人盗取。还可以防止网页内容被中间人,运营商篡改。

如何部署

关于部署我主要是参照我同事给的解决方案。我主要用的是Let’s Encrypt的证书,而Let’s Encrypt(LE)只给了为期3个月的有效证书,那么怎么在3个月之后自动的申请证书的有效期呢?LE采用了一个叫ACME(Automated Certificate Management Environment)的协议。有很多人根据这个协议开发了很多脚本,做成了定时任务,在证书过期的时候自动申请续期。在这里才用了一个叫acme.sh的脚本,它支持很多国内不同DNS解析平台的API。

具体操作

修改域名解析

由于之前域名是在阿里云备案的,那么域名解析的DNS服务器一直都在阿里云。而这里使用的是DNSPod,因此需要将域名的解析迁移到DNSPod。
在添加域名之后,需要到以前的域名注册的地方修改解析域名的地址。然后DNSPod的域名解析才会生效。
若DNSPod的如图标志消失则证明域名解析转移成功。
在申请证书之前需要设置DNSPod的API Token。如图申请DNSPod的API Token

下载acme.sh脚本

git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install

运行acme.sh

先将之前申请的API Token设置到环境变量中。

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

申请证书

acme.sh --issue --dns dns_dp -d example.com -d example.com

安装证书

acme.sh --install-cert -d example.com \
--keypath       /home/user/keys/ssl/example.com.key  \
--fullchainpath /home/user/keys/ssl/example.com.cer \

keypath是保存key的路径
fullcahinpath是保存证书的路径

修改ngnix配置

upstream web{
    server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name example.com;
    rewrite ^(.*) https://example.com$request_uri permanent;

}

server{
    server_name example.com;
    listen 443;
    ssl on;
    ssl_certificate /home/user/keys/ssl/example.com.cer;
    ssl_certificate_key /home/user/keys/ssl/example.com.key;

    location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_store off;
        proxy_pass http://web;
    }
}

修改完nginx之后,可以使用nginx -t 测试下是否有语法错误,然后就是重启nginx服务器。

参考网址:

发表评论

电子邮件地址不会被公开。 必填项已用*标注