为 typecho 开启小绿锁


本文介绍使用 Let’s Encryp 最简单为 typecho 的 ningx 开启 SSL,让你的 typecho 博客也显示出小绿锁,提高安全性。

Let’s Encrypt 是一个免费、自动化、开放的证书签发服务。不仅免费,并且使用简单、可自动化。虽然证书时效只有 90 天,但是我们可以使用系统脚本自动定期更新。鉴于这些理由,我选择了 Let’s Encrypt 为 typecho 开启 SSL。

申请证书

先关闭 nginx

lnmp nginx stop

/root 目录下拉取 letsencrypt 源码,并进入 letsencrypt 目录

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

申请证书

./letsencrypt-auto certonly --standalone --email bakumon@aliyun.com -d bakumon.me -d www.bakumon.me

注意:替换以上邮箱和域名为要申请证书的域名。

执行成以上命令,会在 /etc/letsencrypt/live/bakumon.me/ 生成四个证书文件。

.
├── cert.pem -> ../../archive/bakumon.me/cert1.pem
├── chain.pem -> ../../archive/bakumon.me/chain1.pem
├── fullchain.pem -> ../../archive/bakumon.me/fullchain1.pem
├── privkey.pem -> ../../archive/bakumon.me/privkey1.pem
└── README

我们需要后两个文件,fullchain.pemprivkey.pem

配置Nginx

开启 SSL

需要开启 SSL ,并且配置刚才申请的证书。

找到 typecho 的 nginx 配置。

cd /usr/local/nginx/conf/vhost
vi www.bakumon.me.conf

按下 i 进入 vi 的编辑模式。

修改端口号为 443,并开启 SSL

# 修改端口号为443
listen 443; 
...bash

# 开启 SSL,配置证书,记得修改为自己的域名
ssl on;
ssl_certificate /etc/letsencrypt/live/bakumon.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bakumon.me/privkey.pem;

启动 nginx

lnmp nginx start

浏览器访问 https://www.bakumon.me/ 就会看到小绿锁已经开启了。

强制 https

以上开启 SSL,必须使用 https:// 访问 443 端口号才能进入 typecho,如果使用 http://www.bakumon.me/ 无效的,并且网站都访问不了。

因为我们并没有开启 80 端口。

使用以下代码把 80 端口转到 443 端口,这样访问 http 地址同样可以成功访问到 typecho 页面。

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

完整的 nginx 配置大概长这样:

server
{
    listen 443;
    server_name www.bakumon.me bakumon.me;
    index index.html index.htm index.php default.html default.htm default.php;
    root  /home/wwwroot/www.bakumon.me;

    # 开启 SSL
    ssl on;
    ssl_certificate /etc/letsencrypt/live/bakumon.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bakumon.me/privkey.pem;

    # 避免 404
    include enable-php-pathinfo.conf;

    # 伪静态
    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
    }
    if (!-e $request_filename){
        rewrite (.*) /index.php;
    }
    # 日志
    access_log  /home/wwwlogs/www.bakumon.me.log;
}
server
{
    # 强制 https
    listen 80;
    server_name bakumon.me www.bakumon.me;
    rewrite ^(.*) https://www.bakumon.me$1 permanent;
}

到这里,我们的 typecho 已经成功为 typecho 开启了 90天的 SSL。

评论