1. 前言
之前的两篇文章简单记录了 Typecho
博客的搭建过程:
1.基于Rocky Linux 8.10系统使用源码搭建LNMP环境,附加安装SQLite
2.基于LNMP环境搭建Typecho博客
但这里面因为是内网演示使用的是 http
访问,不涉及任何 https
的设置。现在到处都能看到网站服务器使用 https
,说是安全性好,咱不懂,也没精力和技术去研究,也不知道咱这没流量的小破站需不需要那么高的安全性,服务器上也没啥重要数据,对安全性我到没那么高要求,毕竟不知道哪天就到期关闭了。。哈哈哈!但是话说回来,对不支持 https
的网站浏览器左上角会出现红色叉叉的 http
标识,实在是太扎眼了,既然都说 https
好,那咱也来折腾一下吧,努力把这个博客搞得好看一点,正规一点,虽说没啥内容,但看着高大上也是不错的。
注:以下实验在阿里云轻量应用服务器完成,并非前两篇文章的内网实验,所以之前文中出现的内网IP 192.168.31.84
在本文中由域名 all.17zturn.com
代替,仅IP变化,其他参数配置一致。
2. 申请免费的SSL证书
要使网站支持 https
访问,首先得准备好 SSL
证书。别问我这是啥,我也不知道,专业的解释需要去专业的地方搜索,作为普通玩家,只要知道需要这么个东西就行了。首先这个证书的获取并不容易,专业的是需要收费的,且费用不低,好在现在为了推广使用 https
,有许多机构推出了免费的证书申请,这里我使用的是大名鼎鼎的 Let's Encrypt。从这里申请的证书对专业用途有缺陷,有效期只有90天,但对普通玩家来说已经足够,反正到期可以再次申请新的证书,配置好脚本还可以自动进行申请。
2.1. 安装ACME客户端
引用官方的一段说明 Let's Encrypt 入门指南
为了在您的网站上启用 HTTPS,您需要从证书颁发机构(CA)获取证书(一种文件)。 Let’s Encrypt 正是其中一家证书颁发机构。 要从 Let’s Encrypt 获取您网站域名的证书,您必须证明您对域名的实际控制权。 这一过程通常由 Web 主机上运行的 ACME 协议客户端完成。
官网推荐的 AME
协议客户端是 Certbot。但是我这里选用的是acme.sh,其他更多客户端可参考官网提供的客户端列表ACME 客户端。
acme.sh
的安装特别简单,以下操作都以 root
用户执行
# email字段需要替换为自己的邮箱地址
curl https://get.acme.sh | sh -s email=nopoetry@outlook.com
安装后的文件存放在 ~/.acme.sh
目录下,根据项目介绍,后续所有操作的修改都在这个文件内完成,不会污染其他系统文件。
安装完成后,推荐关闭终端并重新启动新终端,这样可以直接使用 acme.sh
命令而不用加上繁琐的路径。
2.2. 申请证书
设置默认ca服务器( acme.sh
脚本默认ca服务器是 zerossl
,经常出错,会导致获取证书的时候一直出现:Pending, The CA is processing your order, please just wait.
)
acme.sh --set-default-ca --server letsencrypt
http方式验证域名(需保证 acme.sh
客户端与网站内容在同一服务器上)
# -d参数指定域名(若要申请泛域名证书,必须明确指定一条二级域名,这里是17zturn.com)
# --webroot参数需要替换为自己的网站根目录
acme.sh --issue -d 17zturn.com \
-d www.17zturn.com \
-d all.17zturn.com \
--webroot /var/www/html/typecho
这里 acme.sh
客户端会在网站根目录下创建一个验证文件并完成自动验证,验证通过即会自动生成证书。
2.3. 安装证书
需要使用 acme.sh
客户端自带的命令来安装证书,不可直接使用 ~/.acme.sh
目录下的证书文件
# -d参数指定域名(这里直接使用泛域名证书)
# --key-file 和 --fullchain-file 指定证书安装路径
# --reloadcmd参数指定nginx服务器重载配置的命令,这样在安装证书后会自动调用重载命令使网站使用新的证书
acme.sh --install-cert \
-d 17zturn.com \
--key-file /etc/ssl/17zturn.com/key.pem \
--fullchain-file /etc/ssl/17zturn.com/fullchain.pem \
--reloadcmd "systemctl reload nginx"
3. 配置Nginx支持https
3.1 http强制跳转https
配置 http
强制跳转 https
后,这样即使在浏览器输入 http://all.17zturn.com 也会自动跳转到 https://all.17zturn.com 页面。
编辑博客站点的nginx配置文件
sudo vi /usr/local/nginx/conf/vhosts/typecho.conf
将原来的 server
块的内容注释掉,修改后的所有内容如下
server {
listen 80;
server_name all.17zturn.com;
access_log /usr/local/nginx/logs/typecho.access.log combined;
return 301 https://$server_name$request_uri;
}
3.2 https配置
增加博客站点新的https的配置
sudo vi /usr/local/nginx/conf/vhosts/typecho-https.conf
编辑内容如下
server {
listen 443 ssl default_server;
server_name all.17zturn.com;
access_log /usr/local/nginx/logs/typecho.access.log combined;
root /var/www/html/typecho;
index index.php index.html index.htm;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate /etc/ssl/17zturn.com/fullchain.pem;
ssl_certificate_key /etc/ssl/17zturn.com/key.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
location ~ .*\.php(\/.*)*$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重新加载 nginx
sudo systemctl reload nginx
浏览器访问 https://all.17zturn.com 能成功显示博客即说明配置成功。
评论 (0)