恢复网站
缘由
2023.11:当时就 frp 相关实验修改了 Nginx 和 SSL 证书配置,之后证书于 2024.1 过期,之后没有续签,故而网站无法正常访问。
2024.3.5:准备来处理这个问题。本来以为只需续签,结果显示无法续签。怀疑是之前(2023.11)在调整相关配置的时候将原本的配置打乱了,于是直接删除了原先的所有配置,以图直接重新签证书——但是导致更多配置错误,故而不得不全部重来。
记录一下我当时干了什么:
- 寻找所有的 .pem 文件(我以为删除了就好了)。
find / -name "*.pem"
- 在结果中找出了合适的结果并进行了删除(仅示例),还顺手删除了所有 Nginx 配置(这个估计是问题原因)。
rm -rf dir1 dir2 dir3
导出数据
首先是数据库中的数据:
mysqldump -uroot -p --databases www_sheniao_top > t.sql
需要输入密码,然而我忘了,最后发现宝塔面板的数据库这里有。
之后恢复:
mysql -uroot -p www_sheniao_top < t.sql
其次是 Typecho 网站上提到的一些文件:https://docs.typecho.org/upgrade,即保存 /usr
目录。
大致回顾之前建站过程
因为是重置网站,域名注册、域名实名认证、购买服务器、服务器备案、公安联网备案的部分就不用管了。
再回看这两篇:
大致流程是:
- 安装宝塔面板
- 点击宝塔一键部署源码,找到 Typecho,设置原数据库名称
- 安装完成后,添加第一个网站,如果已经有备案域名,可以直接配置域名映射
- 安装 Typecho,拷贝文件后,把原先备份的文件放回原位
- 去宝塔面板里创建一个数据库,并导回原数据库
更新:将镜像重置为宝塔 Linux 面板,结果发现软件商店一键部署源码 - 建站里没有 Typecho 了。
于是只能将镜像重置为预设好的 Typecho 1.1,描述为:
Typecho 是开源的博客建站平台,具有轻量、高效、稳定等特点,操作界面简洁友好。该镜像基于 Alibaba Cloud Linux 3 操作系统,PHP 7.4,MySQL 8.0,Nginx 1.18。"
上手
有好几层密码,别记混了。
- 服务器密码:首先需要修改的就是这个。
- 依照提示获取 Typecho 管理员账号和密码。
- 依照提示获取数据库账号和密码。
首先恢复原有数据,将 /usr
文件夹放到相应位置。Typecho 网站根目录可依照提示获得。
tar -zxvf 文件名.tar.gz
由于不确定现在这个数据库的名称,所以先查看。
首先登录到 MySQL 数据库服务器。使用以下命令,其中
-u
后面是您的用户名,-p
后面是您的密码:mysql -u your_username -p
将
your_username
替换为数据库实际用户名。- 输入正确的密码后,将进入 MySQL 监视器。在此处可执行 SQL 命令。
要列出所有数据库,请输入以下命令:
SHOW DATABASES;
这将返回一个包含所有数据库名称的结果集。
查看的结果是名称为 typecho
,故而对 sql 文件进行相应修改。
之后执行命令导回数据:
mysql -uroot -p typecho < t.sql
SSL 证书
这次不想使用 Certbot 和手动 DNS 设置了,换 acme.sh。
参考:https://zhuanlan.zhihu.com/p/347064501
虽然是挺不错的参考文章,但是文章前面结构不太行,很容易被误导。
另外有两个小问题,作者忘记了 acme 的注册步骤;以及 Nginx SSL 配置,其中 ssl_ciphers
给的例子似乎无法通过,我根据 Copilot 提示换成了 HIGH:!aNULL:!MD5:!EXPORT56:!EXP
。
大概有这样几个步骤:
- 安装 acme.sh
签发 SSL 证书
- acme.sh 的注册
- 第一步,验证你的域名所有权
- 第二步,签发证书,可选 ECC 证书
- 此外如有需要,还可进行多域名配置和泛域名配置
- 安装(复制)证书(Nginx 和 Apache 两种写法)
- 生成
dhparam.pem
文件(可选) - 配置 Nginx
- 查看自动更新证书配置
关于验证域名所有权,有这两种途径:
HTTP 验证,下面三种 mode 看情况选择
- Webroot mode
- Apache / Nginx mode
- Standalone mode
DNS 验证,下面三种 mode 看情况选择
- DNS API mode
- DNS manual mode
- DNS alias mode
下面简要记录设置过程:
# 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc
acme.sh -h
# 签发 SSL 证书
## 命令行提示要注册
acme.sh --register-account -m shirou-emiya2002@outlook.com
## 使用 HTTP 验证,选择 Webroot mode,只需要最后的命令
acme.sh --issue -d sheniao.top -w /usr/share/nginx/html
## 多域名配置
acme.sh --issue -d sheniao.top -w /usr/share/nginx/html -d www.sheniao.top -d heres.top -d www.heres.top
## 签发 ECC 证书
acme.sh --issue -w /usr/share/nginx/html -d sheniao.top -d www.sheniao.top -d heres.top -d www.heres.top --keylength ec-256
# 查看自动更新证书配置
## 查看 acme.sh 自动更新任务
crontab -l
# 强制更新
acme.sh --renew -d sheniao.top --force
acme.sh --renew -d sheniao.top --force --ecc # 如果用的是 ECC 证书
# 停止更新
acme.sh --list # 查看证书列表
acme.sh --remove -d sheniao.top [--ecc] # 停止 Renew,然后手动把目录下的证书移除
关于 Nginx 配置
本次相关参考:
- https://www.jb51.net/article/77145.htm
- https://cloud.tencent.com/developer/article/2323831
- https://www.lgolds.club/index.php/archives/4/
将证书复制到 Nginx 目录下:
# 安装(复制)证书
acme.sh --installcert -d sheniao.top \
--key-file /etc/nginx/ssl/sheniao.top.key \
--fullchain-file /etc/nginx/ssl/sheniao.top.fullchain.cer \
--reloadcmd "service nginx force-reload"
# 生成 dhparam.pem 文件(可选)
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
# Nginx SSL 相关配置
## 修改网站的 conf 配置文件,加入 SSL 相关配置
### ssl_certificate /etc/nginx/ssl/sheniao.top.fullchain.cer;
### ssl_certificate_key /etc/nginx/ssl/sheniao.top.key;
### ssl_dhparam /etc/nginx/ssl/dhparam.pem;
### ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
### ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
### ssl_prefer_server_ciphers on;
## 重启 nginx
nginx -t
systemctl restart nginx
最后配置:
server {
listen 80;
listen [::]:80;
listen 443 ssl http2 default_server; # IPv4
listen [::]:443 ssl http2 default_server; # IPv6
server_name sheniao.top www.sheniao.top heres.top www.heres.top;
root /usr/share/nginx/html;
ssl_certificate /etc/nginx/ssl/sheniao.top.fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/sheniao.top.key;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
ssl_prefer_server_ciphers on;
# 301 重定向 http -> https
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
location / {
index index.php index.html index.htm;
}
# 实现伪静态化,没有这个会出现这样的问题:
# 只有首页能访问,访问其它页页面报 404 错误
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?q=$1 last;
}
# PHP 设置:PHP -> FastCGI
include /etc/nginx/default.d/*.conf; # 实际上这里载入了其中的 php.conf
# index index.php index.html index.htm;
# location ~ \.(php|phar)(/.*)?$ {
# fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
#
# fastcgi_intercept_errors on;
# fastcgi_index index.php;
# include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param PATH_INFO $fastcgi_path_info;
# fastcgi_pass php-fpm; # php-fpm 就是前面的 server unix:/run/php-fpm/www.sock
# }
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
后记
之后等当前服务器到期之后就要迁移了,此次恢复倒是起到了准备作用。
- 积极备份文件,导出数据库和必需的文件
- 记录各级密码
- Nginx 设置也要保存
另外积极使用 Copilot 来提问帮了我很多忙,比如解读 Nginx 设置。
2 条评论
[...]又一次 frp 反代记录 & SSL 证书签发心得SSL 证书签发心得参考:使用 frp 内网穿透 - 珅鸟玄's Blog (sheniao.top)目的和本篇类似,都是使用 frp 进行内网穿透,但是具体写了 frp 的使用方法,具体内容上比本篇详细,然而文章结构上不可避免的不如本篇清晰。建议对照参考。恢复网站 - 珅鸟玄's Blog (sheniao.top)目的和本篇不同,但是使用了 a[...]
[...]又一次 frp 反代记录 & SSL 证书签发心得SSL 证书签发心得参考:使用 frp 内网穿透 - 珅鸟玄's Blog (sheniao.top)恢复网站 - 珅鸟玄's Blog (sheniao.top)重要参考:用 acme.sh 帮你免费且自动更新的 HTTPS 证书,省时又省力 - 知乎 (zhihu.com)如何在 Ubuntu 22.04 上安装、配置、使用 Nginx?_ub[...]