前言
关于本网站的优化,很早之前就想做了,但是因为有更重要的知识没有学习一直拖着,最近准备面试,准备将本博客网站升级一下
配置HTTPS
这个配置之前一直没搞,因为权威性的CA机构证书太贵了,并且需要填写单位,不是给个人网站申请的,最近研究一下,发现还有其他机构的DV证书比较便宜,发放也比较快
1.购买DV证书
点击跳转JOY SSL,当然还有更权威的机构,例如digicert中国,Sectigo等等,这个是找到的比较实惠的DV证书
2.填写域名信息
DV证书之所以快,是因为它只需要验证域名的所有权,所以需要填写域名
由于购买的是单域名,所以只能够为一个域名添加证书
可以看见这里虽然只有wym2king.cn,其实就是www.wym2king.cn(浏览器会自动添加www,也就是顶级域名+一个www子域名都能够设置https连接),但是如果是其他例如test.wym2king.cn就只能为这个子域名test设置https连接,无法为顶级域名设置https连接
3.填写单位信息
这个单位信息可以填网站的信息,因为是DV证书,验证不严格,实际上不会验证有没有这个单位,但是其他信息需要与域名持有人的信息尽可能相同
4.验证签发
其实就是证明你拥有这个域名,有两种方式证明,一个是通过DNS解析证明,一个是通过配置云主机(因为域名是绑定公网IP的,等同于绑定这个云主机),这里选择DNS解析
通过在域名管理平台(购买域名的地方)添加解析,我购买域名的地方是阿里云,所以去阿里云云平台添加TXT解析,这里是一一对应的,复制往里面贴就行了
这里需要添加刚刚在DV证书配置的域名,类型选择A,记录值就是云服务器的公网IP
需要注意的是,DNS是有缓存的,需要等缓存过期DNS才会加载新的解析,也就是说这个解析配置是无法立即生效的,需要等1-2分钟
6.配置nginx证书
#创建证书目录
mkdir /etc/nginx/cert
#将DV证书中的nginx证书复制到该目录中考虑到安全因素,这里仅给出一部分server的https配置
#只需要配置证书中的域名server,其他不要配置,否则访问会显示危险连接,就是证书错误,因为证书中没有这个域名
server {
# 启⽤ HTTPS 协议
listen 443 ssl;
# 这里可以配置多个域名,但是只能有证书中有的
server_name wym2king.cn www.wym2king.cn;
# 证书位置
ssl_certificate /etc/nginx/cert/wym2king.cn.crt;
ssl_certificate_key /etc/nginx/cert/wym2king.cn.key;
ssl_session_timeout 5m;
# 设置会话缓存以提⾼性能
ssl_session_cache shared:MozSSL:10m;
# 配置加密算法
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCMSHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSAAES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# 配置加密协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
# 配置root路径
root /;
index index.html index.htm;
# 如果找不到⽂件或⽬录,则返回 404 错误
try_files $uri $uri/ =404;
}
# 开启 HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# 防⽌点击劫持
add_header X-Frame-Options DENY;
# 防⽌ MIME 类型嗅探
add_header X-Content-Type-Options nosniff;
# 防⽌ XSS 攻击
add_header X-XSS-Protection "1; mode=block";
#其他网站配置略
}7.重启nginx
systemctl restart nginx8.更换https导致的问题
更换https导致我的网站能访问,但是原本的CSS结构都失效了,查看网络信息发现css全部请求到了原本的域名(即没有证书的http域名),但原来的域名已经被我修改为https,当然找不到了,只需要在网站后台修改网站的域名即可
这个域名配置是专门由于请求静态资源,例如css,img等等
至此DV证书配置完成
9.定时备份脚本
vim /app/data/backup_typecho.sh
#!/bin/bash
#author: YK
#desc: backup typecho through mysql
#version: v1
# MySQL数据库配置
DB_HOST="<host>"
DB_USER="<user>"
DB_PASSWORD='<passwd>'
DB_NAME="<db_name>"
# 备份配置
BACKUP_DIR="<dir>"
#保留时间
KEEP_DAYS=30
MAIL_NAME='<xxx@xxx.com>'
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/typecho_${TIMESTAMP}.sql.zip"
OK_TIP="完成typecho备份"
#注意这里的!会被bash翻译为前一个命令
NO_OK_TIP="\!\!没有完成typecho备份\!\!"
# 创建备份目录
mkdir -p "${BACKUP_DIR}"
# 执行数据库备份并压缩
echo "备份数据"
#使用zip可以直接压缩,不用删除输出的备份,如果使用tar需要多一步删除
mysqldump -h${DB_HOST} -u${DB_USER} -p${DB_PASSWORD} --single-transaction ${DB_NAME} | gzip > ${BACKUP_FILE}
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "${OK_TIP}-->${BACKUP_FILE}" | mailx -s "${OK_TIP}" ${MAIL_NAME} &> /dev/null
else
echo "${NO_OK_TIP}" | mailx -s "${NO_OK_TIP}" ${MAIL_NAME} &> /dev/null
#失败时不删除过期备份,直接退出
exit 1
fi
# 删除过期备份,通过find查找指定修改时间的备份压缩文件
echo "清除备份"
find "${BACKUP_DIR}" -name "typecho_*.sql.gz" -mtime +${KEEP_DAYS} -delete
chmod a+x /app/data/backup_typecho.sh
crontab -e
0 4 */7 * * /app/data/backup_typecho.sh &>/dev/null
#每隔7天的凌晨4点开始备份注意点
- 请先配置邮箱的SMTP mailx配置qq邮箱SMPT
- 修改脚本的配置,改成适合自己mysql的
总结
nginx的https配起来没什么难度,2-3个小时内基本上完成,大部分时间还花在购买DV证书上,第一次买确实不太熟悉


