使用 Ngins + SSL 证书,为 Ghost 实现 Https 访问。
HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。目的就是为了保护网站的数据,防止数据泄露、窃取。
以下介绍如何使用 Docker 封装的 Nginx 和 阿里云免费的 SSL 证书实现 Https 访问 Ghost 。
一、Docker Nginx 安装
1.1 从 Docker 上拉取 nginx 镜像到本地:docker pull nginx
1.2 创建 nginx 容器,并映射 80、443
端口,80 端口是 http 默认访问的端口,443端口是 https 默认访问的端口:
>> docker run -d --name my-nginx -p 80:80 -p 443:443 nginx
二、阿里云 SSL 证书申请
2.1 在阿里云 SSL 证书控制台中购买免费、使用期一年的 SSL 证书。
2.2 填写证书申请,要确保需要绑定的域名已经被解析,而且一个 SSL 证书只能适用于一个域名,不过可以申请多个免费的 SSL 证书。
如果是阿里云的域名,选择自动 DNS 验证即可,否则选取其他两种方式之一。
提交审核十几分钟后就会通过。
三、修改 nginx.conf 文件
3.1 下载 SSL 证书,选择 nginx 。
下载文件里面有两个文件,一个是 xxxxx.pem,一个是 xxxxx.key。
3.2 创建一个 cert 文件夹,并将 .pem .key 两个文件放在其中,使用 Docker 的 cp 命令,把文件夹复制到 my-nginx 容器中。
>> docker cp cert my-nginx:/etc/nginx/
3.3 进入 my-nginx 容器,修改 /etc/nginx/nginx.conf
文件。
>> docker exec -it my-nginx /bin/bash
>> vim /etc/nginx/nginx.conf
3.4 在 http{...}
中加入以下 server 代码。
http{
......
server {
listen 443 ssl;
server_name xxxx.com; // SSL 证书绑定的域名,例如:www.blog.liangda-yld.top
ssl on;
ssl_certificate cert/xxx.pem;// .pem 文件
ssl_certificate_key cert/xxx.key;// .key 文件
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://172.17.0.3:2368; // 此处是 my-ghost 容器的 bridge 模式的 IPAddress
proxy_redirect off;
}
}
server {
listen 80;
server_name xxxx.com;// 域名
rewrite ^(.*)$ https://xxxx.com:443/$1 permanent;// 把http的域名请求转成https
}
}
3.5 配置完成后,检查一下nginx配置文件是否可用,有successful表示可用:
>> nginx -t // 检查nginx配置文件
3.6 配置正确后,重新加载配置文件使配置生效:
>> nginx -s reload // 使配置生效
3.7 如需重启nginx,用以下命令:
>> service nginx stop // 停止
>> service nginx start // 启动
>> service nginx restart // 重启
四、修改 my-ghost 容器文件
4.1 进入 my-ghost 容器,并修改 /var/lib/ghost/config.production.json
文件:
>> docker exec -it my-ghost /bin/bash
>> vim /var/lib/ghost/config.production.json
更改为 SSL 证书绑定的域名:443
,同时确保实例的安全组 443 端口已经开放。本地便是:https://localhost:443
。
4.2 重启 my-ghost 容器:
>> docker stop my-ghost
>> docker start my-ghost
到此,就实现了 http 访问转换为 https 加密、安全访问了。