HTTPS:超文本传输安全协议(Hypertext Transfer Protocol Secure)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS的主要目的是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS 与 HTTP 的差异
与HTTP的URL由http://
起始且默认使用端口 80
不同,HTTPS的URL由https://
起始且默认使用端口 443
。
HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并(在没有使用旧版本的SSL时)被认为是安全的。
SSL证书申请
SSL证书的品牌很多,价格根据证书类型和服务内容也有很大差别。个人博客来说,我推荐可以免费申请的Symantec单域名版证书,百度云免费申请Symantec SSL证书服务,最终可以获得crt证书和key。
Ghost设置SSL
新版Ghost在安装时会提示是否启用SSL,选择No,选Yes成功的可能性也微乎其微,我们选择手动配置。
环境
Ubuntu 16.04
Nginx 1.10.3
Nodejs v8.9.0
Ghost 1.18.0
SSH连接,在Ghost目录下创建ssl文件夹并将crt证书和key文件上传:
mkdir /xxx/ghost/ssl
cp xiaohongfei.com.crt /xxx/ghost/ssl/xiaohongfei.com.crt
cp xiaohongfei.com.key /xxx/ghost/ssl/xiaohongfei.com.key
更新Nginx配置文件
- 找到配置文件,新版Ghost的Nginx配置文件在Ghost目录中
vi /xxx/ghost/system/files/xiaohongfei.com.conf
- 修改配置文件,尝试了N多次,最后总结出如下配置,实现:
- 监听443端口
- 启用SSL证书
- http连接强制跳转https连接
- www重定向到无www
server {
listen 80;
listen [::]:80;
server_name xiaohongfei.com www.xiaohongfei.com;
root /xxx/ghost/system/nginx-root;
rewrite ^(.*)$ https://$host$1 permanent;
}server {
listen 443 ssl;
server_name xiaohongfei.com www.xiaohongfei.com;
root /xxx/ghost/system/nginx-root;
if ($host = 'www.xiaohongfei.com' ) {
rewrite ^/(.*)$ https://xiaohongfei.com/$1 permanent;
}
ssl_certificate /xxx/ghost/ssl/xiaohongfei.com.crt;
ssl_certificate_key /xxx/ghost/ssl/xiaohongfei.com.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;} location ~ /.well-known { allow all; } client_max_body_size 50m;
}
重启Nginx:service nginx restart
大功告成
将域名www和空头均A记录指向服务器IP,尝试访问http://www.xiaohongfei.com
和 http://xiaohongfei.com
,是不是自动跳转到https://xiaohongfei.com
了?
==提示:如果你使用的是阿里云主机,配置后博客无法打开,可能是未开放443端口,在阿里云后台打开即可。==
本文以Ludis的文章为基础,对方法和内容做了改进,适用于使用Ghost-CLI安装的新版本Ghost。