Nginx + Typecho 配置HTTPS

本文介绍了如何使用 Let's Encrypt 签发工具、自动续签以及在 Nginx 上使用签发证书的方法。

下载Certbot

国内的下载速度没有受影响,直接使用wget下载就可以,下载后需要赋予其执行权限

wget https://dl.eff.org/certbot-auto -O /sbin/certbot-auto
chmod a+x /sbin/certbot-auto

配置Nginx满足WebRoot验证方式

在使用 certbot 之前,我们先要对 Nginx 进行配置,因为使用 webroot 方式,certbot 会在域名对应的根目录创建一个叫做 well-known 的隐藏文件夹,并且创建用于验证域名所有权的文件。而这个文件夹在证书签发的过程中,是需要被访问的。

假设我们我们要签发用于 seahi.me 这个域名的 SSL 证书,而这个域名的配置文件在 /usr/local/nginx/conf/vhost/seahi.me.conf ,于是我们打开这个文件,并且在 server block 内加入下面的内容:

location ~ /.well-known {
        allow all;
}

修改好后看起来是这样子的:

server {
        listen 80;
        server_name seahi.me;
        root /var/www/html/seahi.me;
 
        localtion / {
                ...............
        }
 
        location ~ /.well-known {
                allow all;
        }
}

保存退出后,重新加载Nginx的配置文件:

service nginx reload

这里不同的环境执行方式可能不一样

使用Certbot签发证书

配置完 Nginx 后,我们就可以开始使用 certbot 签发证书了。假设要对 seahi.me 签发证书,并且这个域名对应的 webroot 目录是 /var/www/html/seahi.me,那么对应的命令则是:

./certbot-auto certonly --webroot -w /var/www/html/seahi.me -d seahi.me

如果需要多域名的话,直接多加 -d 参数就可以了

执行完成后如果看到成功提示就完成了

配置Nginx使用证书

在拿到证书后,开始配置 Nginx 来使用证书。我们需要再一次打开网站的配置文件,并且让 Nginx 监听 443 端口、配置 SSL 地址以及配置 80 自动跳转。

我们直接修改刚才那个配置文件,把 Listen 80; 改成 Listen 443 ssl; ,修改完之后的配置文件是这样的:

server {
        listen 443;
        server_name seahi.me;
        root /var/www/html/seahi.me;
 
        ssl_certificate /etc/letsencrypt/live/seahi.me/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/seahi.me/privkey.pem;
 
        localtion / {
                ...............
        }
 
        location ~ /.well-known {
                allow all;
        }
}

注:如果你对typecho不是非常了解,接下来这一步,最好放在最后

设置Nginx在访问 80 端口的时候,跳转到 HTTPS ,于是还要在配置文件里面增加一个 Server Block ,修改完之后是这样的:

server {
        listen 80;
        server_name seahi.me;
        return 301 https://$host$request_uri;
}
server {
        listen 443;
        server_name seahi.me;
        root /var/www/html/seahi.me;
 
        ssl_certificate /etc/letsencrypt/live/seahi.me/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/seahi.me/privkey.pem;
 
        localtion / {
                ...............
        }
 
        location ~ /.well-known {
                allow all;
        }
}

重新加载Nginx的配置文件

service nginx reload

证书自动续签

这里借助crontab

crontab -e

添加如下内容:

30 3 * * 1 /sbin/certbot-auto renew --quiet --no-self-upgrade
35 3 * * 1 /etc/init.d/nginx reload

注意修改你的certbot-auto的路径

Typecho相关的配置

到这里关于证书签发的配置就已经完成了,不过还需要配置下Typecho

站点地址

登录Typecho后台 -> 设置 -> 基本设置 -> 站点地址改成https://你的域名

状态资源

还需要将静态资源的地址改成https:

将数据库备份成sql,使用文本编辑软件将其中的 http://你的域名 修改成 https://你的域名

最后一步

编辑Typecho站点根目录下的文件config.inc.php加入下面一行配置

/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

到这里就已经完成了

有的主题无论怎么改都不行,实际是因为评论表单的action地址还是http,找到站点主题目录下的 comments.php 文件,

搜索 $this->commentUrl()

将其替换为:

echo str_replace("http","https",$this->commentUrl()); 

保存

这里就可以看到绿色的小锁头了

Selection_004.png

标签: 无

发表评论: