2018-11-27 · Blog

为 Ghost 博客添加 HTTPS

前面我们免费购买了阿里云的 SSL 证书,现在我们就将 Ghost 博客换成 HTTPS 了。

因为是使用 Nginx 代理的 Ghost 博客,所以 Ghost 的修改部分就很少了,直接修改 config.production.json 将 url 部分的 http:// 换成 https:// , 然后重启。

ghost restart

下载证书

在阿里云的 SSL 控制台下载证书,将其上传到服务器的指定文章,我放在 /etc/nginx/cert 目录下。

修改 Nginx 配置文件

将配置文件修改为如下

server {
    listen 443 ssl;
    server_name www.zuojl.com zuojl.com;

    ssl on;

    ssl_certificate  cert/cert-1541573453840_www.zuojl.com.crt;
    ssl_certificate_key cert/cert-1541573453840_www.zuojl.com.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_pass         http://127.0.0.1:2368;
        client_max_body_size 10m;
    }
}

添加 http 跳转到 https

server {
    listen 80;
    server_name zuojl.com www.zuojl.com;
    rewrite ^(.*)$ https://$host$1 permanent;
}

重启 Nginx

nginx -s reload

重启后发现访问页面出现 www.zuojl.com 将您重定向的次数过多。 的问题,解决是在 nginx 中添加如下配置

proxy_set_header X-Forwarded-Proto $scheme;

下面是 /etc/nginx/conf.d/ghost.conf 的完整配置

server {
    listen 443 ssl;
    server_name www.zuojl.com zuojl.com;

    if ($host != 'www.zuojl.com') {
      rewrite ^/(.*)$ http://www.zuojl.com/$1 permanent;
    }

    ssl on;

    ssl_certificate  cert/cert-1541573453840_www.zuojl.com.crt;
    ssl_certificate_key cert/cert-1541573453840_www.zuojl.com.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-Forwarded-Proto $scheme;
        proxy_pass         http://127.0.0.1:2368;
        client_max_body_size 10m;
    }
}

server {
    listen 80;
    server_name zuojl.com www.zuojl.com;
    rewrite ^(.*)$ https://$host$1 permanent;
}