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。