[{"content":"","date":"2026.4.19","externalUrl":null,"permalink":"/categories/","section":"分类","summary":"","title":"分类","type":"categories"},{"content":"","date":"2026.4.19","externalUrl":null,"permalink":"/","section":"欢迎来到我的秘密基地！🎉","summary":"","title":"欢迎来到我的秘密基地！🎉","type":"page"},{"content":"","date":"2026.4.19","externalUrl":null,"permalink":"/categories/%E7%A2%8E%E7%A2%8E%E5%BF%B5/","section":"分类","summary":"","title":"碎碎念","type":"categories"},{"content":"","date":"2026.4.19","externalUrl":null,"permalink":"/posts/","section":"文章","summary":"","title":"文章","type":"posts"},{"content":" 前言 # 自从大学毕业后，在家啃老了三四年，在上班途中遇到当大事（我们这边对于白事的称呼）的概率似乎变多了，看着放着哀乐的灵堂、披麻戴孝的人们，不经让人感慨世事无常，总会让我想起我已故的爷爷奶奶。\n亲历白事 # 在我读大学前，很少接触到白事，模糊的印象中记得小学时去吃过一两次席，一是从初中开始就读的是寄宿，后来高中更是远赴离家两小时车程的市一中上的学；二是我家里觉得学习最重要，没有非常亲近的血缘关系基本上都不会让我请假去参加。加之那时爷爷奶奶还健在，对于我而言死亡中间隔着爷爷奶奶和爸爸妈妈，距离离我很远。在刚上大学没有多久，爷爷奶奶相继被诊断为癌症，对于我家来说是一个非常沉痛的打击，还好我的姑姑们对我爷爷奶奶们非常的上心，她们与我爸商量过后似乎是选择了保守治疗，没有让爷爷奶奶去经受化疗的痛苦。写到这里，我才发现，我对爷爷奶奶的病情和治疗过程了解得并不多，甚至可以说是知之甚少，我只记得奶奶在确诊前，还在费心费力的照顾爷爷，那时的爷爷已经手脚不便，到了晚上想要起夜，都需要奶奶来叫我一同把他扶起来去厕所，奶奶帮爷爷擦屁股也是经常的事。\n爷爷在我大四的时候去世了，正好是在五一假期不久后，在假期时我们一家还一起吃饭，那时的爷爷状态还不错，在我返校前倒是存在腰部痛的情况，我的父亲就照着往常那样用活络油帮爷爷按摩痛处，就像往常一样没多久爷爷就不痛了。在假期结束，我返校准备补考时，在一天晚上接到家里来电话说爷爷去世了，听到这个消息时我第一反应是觉得不太真实，随后又感到释怀，毕竟在我看来爷爷已经被病痛折磨了很久了，反而是没有太多悲伤。我连夜订好第二天回家的车票，并且和辅导员与室友交代好请假事宜就赶回老家，因为我家县里的房子位于主干道上，加之一楼的门面已经出租给别人，只好到老家去办白事，现在已经对于白事的记忆比较模糊了，已经快和奶奶的白事混淆在一起了，后续因为要刚回学校参加补考，没有赶上爷爷的出殡。\n在写这一段时，特地去翻了一下微信的聊天记录，意外翻到和小赖的聊天记录，让人怀念起大学的美好时光\n奶奶则是在我毕业后的第二年去世的，在买了家里的第一台小车后不久，一天夜里当时的我还在熬夜着夜，依稀听到父亲被一个电话叫醒，听语气似乎是有什么比较紧急的事情发生了，那时我心里就有不好的预感，果然我母亲火急火燎的到了楼上来叫我，说奶奶去世了。当时奶奶住在姑姑那里，我们三直接下楼开车直奔姑姑家里，后来听我姑姑说，奶奶是在睡梦中去世的，可以说是安详的离世了。具体的白事流程也已经模糊不清，只记得那时候有很多事情，守不完的夜，磕不完的头，不过万幸那时有很多兄弟姐妹的陪伴，在那段难熬的日子增添了不少安慰，这次完整的参加了奶奶的白事，现如今也无法具体回忆起当时的细节了，果然人的大脑对于痛苦的记忆是优先遗忘的。\n再到后来，我好兄弟的父亲也去世了，可能是因为作为第三人的视角对于这次白事的记忆尤为深刻，从吊唁到出殡整个过程历历在目，也看着他那几天的状态非常的沧桑。\n尾声 # 在经历这三次白事后，相对于国外那种葬礼的形式，国内的白事截然不同。我感觉中国的白事更是通过一系列的仪式让亲人们忙起来，通过忙碌去麻痹神经，让人没有时间去悲伤；但是在事后则会有一个漫长的哀悼期，在日常生活的点点滴滴都有可能激起人们对于已故亲人的思念，就像我放假在家时，我在房里忙活自己的事情，我爷爷总会到我房间里转悠一下，找我说说话；亦或是每天清早，奶奶回来到我的房间里面梳头发；直到现在，在电脑桌前待久了，也会回头看看门口有没有爷爷的身影，每次早上醒来时，也会看看奶奶有没有在房间梳头发。\n第一次尝试写一些关于生活的文章，感觉有很多想写的，却又不知道该从而开始写，写完感觉乱七八糟的，不过也是记录的第一步吧，希望日后能写得更好一些\n","date":"2026.4.19","externalUrl":null,"permalink":"/posts/chinese-stlye-funeral/","section":"文章","summary":"","title":"中国的白事","type":"posts"},{"content":"Proxmox VE 版本为 9.1\n前言 # 大学时因为对计算机的兴趣选择了软件工程专业（可能有朋友想问，为什么不选择计科专业？因为在那时通过多方的了解，让我感觉计科比较偏理论，而软件工程更注重实践，所以选择了它，现在想来感觉都差不多），然后在学习过程中接触到网页设计，当时觉得做一个自己网页是多么炫酷。我就入坑了前端，一开始只是作为课程设计一直在本地写一些网页，后来写都写出来了，为什么不放到网上让别人看见，就买了服务器和域名。\n通过部署网页，让我了解到 Linux，就一发不可收拾地爱上了 Linux（别问喜欢 Linux 的理由，喜欢一个东西不需要理由），一开始是在虚拟机中学习 Linux，后来觉得虚拟机的性能可能比较羸弱，就寻思在物理机上安装 Linux，一开始是想着在笔记本上安装双系统，后来因精神洁癖作罢。最后花了 800 块购入了一台 N5095 的小主机，从 Ubuntu 开始，Debian、OpenSUSE、Manjaro，最后停留在 ArcLinux。\n小主机陪着我一年又一年，让我的 Linux 技能不断提升，直到去年斥巨资 3000 元拿下了一台 M4 版本的 Mac Mini，它闲置下来了，加上本身家里有一台极空间 Z2Pro，就寻思把小主机弄成一个集 Debian、Homeassistant、OpenWrt 为一体的家庭服务器，就开始折腾起了 Proxmox VE，也就是 PVE。\n安装前的准备工作 # 因为常备着一个 Ventoy 的 U 盘，就采取了 Ventoy 的方式来安装 PVE，首先需要前往 PVE 官网下载安装镜像，然后放入 Ventoy 中。\n安装 PVE # 先插入 U 盘，开机进入 BIOS 设置，先关闭 BIOS 中的安全启动（Secure Boot），具体设置可以按照自己的主板品牌搜索，然后从 U 盘启动，进入 Ventoy 的界面后选择 PVE 镜像，选择 Normal Mode 启动。\n这时屏幕就会出现几个选项让你选择，如果你对命令行不熟悉就选择图像化安装，然后一路按照提示进行设置即可。在设置网络时会要你输入一个 Hostname，它的格式必须是 主机名.域名，没有域名的话就可以先随便写一个，后续需要时再修改，如果是在局域网使用的话可以随便填写，一般不会对使用造成影响，我就使用的是 pve.lan，IP Address 就填写一个未被占用的 IP 地址，我填写的是 192.168.2.7；Gateway 就填写你的路由器 IP 地址；DNS 就填写你的 DNS 也可以填路由器 IP。\n所有步骤完成后，安装程序会提示你重启，重启后就可以通过同一局域网设备的浏览器访问 https://pve的ip:8006 来进入 PVE 的 Web 界面了。\n收尾工作 # 禁用企业源订阅并去除弹窗 # PVE 的企业源是需要付费订阅的，而安装好 PVE 之后，企业源是默认启用的，到时候每次登录 PVE 的 Web 页面都会弹出一个提示，提示你没有订阅，虽然对功能没啥影响，但是每次还需要手动关闭，可以说是影响了体验。\n先通过 SSH 连接并登录到 PVE 主机，禁用掉企业源：\nmv /etc/apt/sources.list.d/pve-enterprise.sources /etc/apt/sources.list.d/pve-enterprise.sources.bak 然后再输入以下命令去除弹窗：\nsed -E -i.bak \u0026#34;s/(Ext.Msg.show\\(\\{)/void\\(\\{ \\/\\/\\1/g\u0026#34; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js 为了更好的体验，可以把 PVE 的软件源更换为中科大的镜像源，参见中科大镜像站教程。\n","date":"2026.4.16","externalUrl":null,"permalink":"/posts/pve-diary-0/","section":"文章","summary":"","title":"PVE 折腾日记（一）","type":"posts"},{"content":"","date":"2026.4.16","externalUrl":null,"permalink":"/categories/%E7%9E%8E%E6%8A%98%E8%85%BE/","section":"分类","summary":"","title":"瞎折腾","type":"categories"},{"content":"","date":"2025.8.27","externalUrl":null,"permalink":"/categories/github/","section":"分类","summary":"","title":"GitHub","type":"categories"},{"content":"","date":"2025.8.27","externalUrl":null,"permalink":"/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8/","section":"分类","summary":"","title":"服务器","type":"categories"},{"content":"此流程的核心是：当博客仓库有更新时，触发一个 GitHub Action，这个 Action 会通过 SSH 安全地连接到云服务器，并使用 rsync 命令将最新的静态文件同步到 Nginx 的网站根目录。\n整体流程概览 # 服务器端准备：在云服务器上创建一个专门用于部署的低权限用户，并设置好 SSH 密钥认证和网站目录。\nGitHub 仓库配置：在源码仓库的 Settings -\u0026gt; Secrets 中添加连接服务器所需的 SSH 密钥和服务器信息。\n创建 GitHub Actions 工作流：编写一个 .yml 文件，定义当代码 push 时，自动连接服务器并同步文件的所有步骤。\n配置 Nginx：确保 Nginx 正确配置，以指向存放博客文件的目录。\n云服务器准备 # 强烈建议不要直接使用 root 用户进行部署。创建一个专用的部署用户可以最大程度地降低安全风险。\n创建部署用户 # 通过 SSH 登录云服务器，执行以下命令创建一个名为 deployer 的用户。\n# 创建用户 sudo useradd -m -s /bin/bash deployer # 为该用户设置一个密码（设置一个易于记忆的密码，不用担心后续的安全问题，SSH 禁用密码登陆即可） sudo passwd deployer 配置 SSH 密钥登录 (关键步骤) # 为 GitHub Actions 生成一个专用的 SSH 密钥，让它可以通过这个密钥免密登录 deployer 用户。\n# 切换到 deployer 用户 sudo su - deployer # 在 deployer 的主目录下创建 .ssh 文件夹 mkdir ~/.ssh chmod 700 ~/.ssh # 创建一个空的 authorized_keys 文件，用于存放公钥 touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys 现在，不要关闭这个服务器终端。在本地电脑（这里以 Linux 环境为例，Windows 可参考：创建 SSH 密钥对 | Microsoft Learn）上打开一个新的终端，生成一个 SSH 密钥对：\n# 这会在你本地生成 deploy_key (私钥) 和 deploy_key.pub (公钥) 两个文件 ssh-keygen -t rsa -b 4096 -C \u0026#34;GitHub Actions Deploy Key\u0026#34; -f deploy_key 生成后，复制公钥 (deploy_key.pub) 的内容，回到服务器终端，将其粘贴到 authorized_keys 文件中：\n# 在服务器上执行，用你喜欢的编辑器（如 nano 或 vim）打开文件 nano ~/.ssh/authorized_keys # 将刚才复制的公钥内容粘贴进去，保存并退出。 最后，将私钥 (deploy_key) 的内容从本地电脑复制出来，下一步会用到。\n分配目录权限 让 deployer 用户有权限写入这个目录。\n# 将目录的所有权交给 deployer 用户 sudo chown -R deployer:deployer /var/www/my-hugo-blog 现在，服务器端的准备工作已经完成。你可以输入 exit 退回到 root 或你的主用户。\n配置 GitHub 仓库 Secrets # 在博客源码仓库中进行以下操作：进入仓库主页，点击 Settings → Secrets and variables → Actions，点击 New repository secret，添加以下 4 个 Secret：\nDEPLOY_HOST：云服务器的 IP 地址 或 域名。\nDEPLOY_USER：deployer (在第一步中创建的用户名)。\nDEPLOY_KEY：将在本地电脑上生成的私钥 (deploy_key 文件) 的全部内容复制并粘贴进来。内容应以 -----BEGIN OPENSSH PRIVATE KEY----- 开头。\nDEPLOY_TARGET：/var/www/my-hugo-blog (网站根目录)。\nDEPLOY_PORT：SSH 端口\n创建 GitHub Actions 工作流 # 在博客源码仓库中，创建文件 .github/workflows/deploy-to-server.yml，并粘贴以下内容：\n# deploy-to-server.yml name: Deploy to Cloud Server on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: # 步骤一：检出代码 - name: Checkout Code uses: actions/checkout@v4 # 步骤二：设置 SSH 环境 # 这个 Action 的作用是把你的私钥加载到 SSH Agent 中，以便后续的 ssh 和 rsync 命令使用 - name: Setup SSH Agent uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.DEPLOY_KEY }} # 步骤三：使用 rsync 进行部署 - name: Deploy with rsync run: | rsync -avz --delete \\ -e \u0026#34;ssh -p ${{ secrets.DEPLOY_PORT }} -o StrictHostKeyChecking=no\u0026#34; \\ ./ \\ ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_TARGET }} 将这个文件 commit 和 push 到源码仓库后，自动部署流程就正式生效了。\n","date":"2025.8.27","externalUrl":null,"permalink":"/posts/github-actions-servers/","section":"文章","summary":"","title":"使用 GitHub Actions 部署博客到服务器","type":"posts"},{"content":"因为我希望博客博文的源文件不会轻易被别人一锅端掉，所以采取了博客源码使用私密仓库，将 Hugo 创建的静态文件部署到 Pages 的仓库之中。由于本人过于懒惰的原因，就使用了 Actions 在源文件的仓库接受到提交时，就会自动生产静态文件并部署到 Pages 仓库。\n创建部署密钥 (Deploy Key) # 在本机上操作 # 为了让源码仓库有权限推送到 GitHub Pages 仓库，需要创建一个 SSH 密钥对，并将公钥配置为目标仓库的“部署密钥”，私钥配置为源码仓库的“Secret”。\n使用如下命令创建 SSH 密钥对，注意不要设置密码 (passphrase)，一路回车即可。\nssh-keygen -t rsa -b 4096 -C \u0026#34;gh-actions-for-hugo\u0026#34; -f hugo-deploy-key 这个命令会生成两个文件：\nhugo-deploy-key (私钥) hugo-deploy-key.pub (公钥) Pages 仓库配置 # 接下来就是在 Pages 仓库添加公钥。打开你目标仓库 https://github.com/xxx/xxx.github.io，进入 Settings → Security → Deploy keys，点击 Add deploy key，输入参数如下，填写完毕后点击 Add key。\nTitle：可以随意填写，如 Hugo Deploy Action。 Key：将 hugo-deploy-key.pub （公钥）文件里的全部内容复制并粘贴进去。 勾选 Allow write access。这一点至关重要，因为它需要写入权限来推送构建好的文件。 源码仓库配置 # 最后，在源码仓库中添加私钥。打开 源码仓库，进入 Settings → Security → Secrets and variables → Actions，点击 New repository secret，输入参数如下，填写完毕后点击 Add key。\nName：必须命名为 ACTIONS_DEPLOY_KEY (这个名字将在下面的工作流文件中使用)。 Secret：将 hugo-deploy-key (私钥) 文件里的全部内容复制并粘贴进去。 创建 GitHub Actions 工作流文件 # 在 Hugo 源码仓库 的根目录下，创建一个 .github/workflows 文件夹，在该文件夹中创建一个 .yml 文件，例如 deploy.yml；将下面的代码完整地复制并粘贴到 deploy.yml 文件中。\n# deploy.yml # 工作流名称 name: Build and Deploy Hugo Site # 触发条件：当推送到 main 分支时触发 on: push: branches: - main # 或者你的默认分支名，例如 master # Job 任务 jobs: build-and-deploy: # 运行环境 runs-on: ubuntu-latest # 步骤 steps: # 步骤一：检出源码 # 使用 actions/checkout@v4 # submodules: true 是为了同时拉取你的 Hugo 主题（如果主题是作为 git submodule 添加的） - name: Checkout uses: actions/checkout@v4 with: submodules: true # Fetch Hugo themes (true OR recursive) fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod # 步骤二：设置 Hugo 环境 # 使用 peaceiris/actions-hugo@v2 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \u0026#39;latest\u0026#39; # 你也可以指定一个版本，例如 \u0026#39;0.119.0\u0026#39; extended: true # 因为主题需要 Hugo Extended 版本 # 步骤三：构建静态文件 # 执行 hugo 命令，--minify 会压缩生成的 HTML/CSS/JS 文件 - name: Build run: hugo --minify # 步骤四：部署到 duan-1.github.io # 使用 peaceiris/actions-gh-pages@v3 - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: # 使用步骤一中设置的部署私钥 deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} # 部署的目标仓库 external_repository: xxx/xxx.github.io # 部署的目标分支 publish_branch: main # Github Pages 用户/组织站点的分支通常是 main 或 master # 需要部署的文件夹，hugo 默认生成到 public publish_dir: ./public # 如果你有自定义域名，可以取消下面这行的注释 # cname: your-domain.com # 提交部署信息 commit_message: ${{ github.event.head_commit.message }} 提交代码并验证 # 提交代码 # 将创建的 .github/workflows/deploy.yml 文件 add, commit, 和 push 到 Hugo 源码仓库。\ngit add .github/workflows/deploy.yml git commit -m \u0026#34;feat: Add GitHub Actions workflow for auto-deployment\u0026#34; git push origin main 验证 # 推送完成后，进入源码仓库的 Actions 标签页，就会看到一个名为 Build and Deploy Hugo Site 的工作流正在运行；等待工作流运行成功（显示绿色对勾），如果失败（红色叉），我们可以点击进去查看日志，定位错误原因。在工作流成功后，访问 GitHub Pages 的仓库，就会发现多了一个由 GitHub Actions 产生的提交；稍等片刻，访问博客网址 https://xxx.github.io，就能看到最新的内容。\n到这里，就成功设置了自动化部署。之后每次当完成一篇新博客并将其推送到源码仓库的 main 分支时，GitHub Actions 就会自动完成构建和部署的所有工作。\n","date":"2025.8.25","externalUrl":null,"permalink":"/posts/github-actions-pages/","section":"文章","summary":"","title":"GitHub 上使用 Actions 部署 Pages","type":"posts"},{"content":"acme.sh 是一个强大且不依赖任何特定语言的 ACME 客户端，非常适合在服务器上直接使用，接下的操作均在 Debian 12 服务器上操作。\n前提条件 # 在开始之前，需要准备如下几点：\n域名：例如 your_domain.com。\nDNS 配置：域名解析已经正确指向了你的云服务器。\nNginx 已安装：服务器已经安装好了 Nginx 且正常运行。\n防火墙已放行：服务器防火墙允许 80 (HTTP) 和 443 (HTTPS) 端口的入站流量。\n安装 acme.sh # 通过 SSH 登录服务器,执行acme.sh 的官方安装脚本。\n# 安装 curl sudo apt update sudo apt install curl # 执行安装脚本，替换成你自己的邮箱 curl https://get.acme.sh | sh -s email=your_email@example.com 安装完成后，重新加载 .bashrc 或是重新 SSH 登陆服务器来启用 acme.sh 命令：\nsource ~/.bashrc 生成通配符 SSL 证书 # 确认 DNS 提供商并获取 API 密钥 # 这一步需要登录购买和管理域名解析的平台（例如 Cloudflare, GoDaddy, Namecheap, 阿里云, 腾讯云 DNSPod 等）。acme.sh 支持几乎所有主流的 DNS 提供商。可以在这里查看完整的支持列表和每家提供商所需的 API 密钥名称： acme.sh DNS API WIKI\n以阿里云为例：\n登录阿里云创建 RAM 用户，访问控制 RAM 控制台。 进入 RAM 用户界面寻找到创建 AccessKey 按钮。 点击创建后，获取 AccessKey ID 和 AccessKey Secret。 在服务器上配置 API 密钥 # 在服务器上执行 export 命令。后续申请签发证书时，acme.sh 会将 API 密钥储存到当前用户目录下的文件中： ~/.acme.sh/account.conf。\n以阿里云为例：\nexport Ali_Key=\u0026#34;刚刚获取的AccessKey ID\u0026#34; export Ali_Secret=\u0026#34;刚刚获取的AccessKey Secret\u0026#34; 签发通配符证书 # 确保你的命令中包含了根域名和通配符域名。\n使用 --dns 参数并指定DNS 提供商（例如 阿里云 是 dns_ali）。\nacme.sh --issue --dns dns_ali -d your_domain.com -d *.your_domain.com acme.sh 会自动调用 DNS API，创建验证所需的 TXT 记录，等待几秒让 DNS 记录生效，然后完成验证并获取证书。成功后，它会自动删除该 TXT 记录。\n安装（部署）证书到 Nginx # acme.sh 生成的证书默认存放在其内部目录 ~/.acme.sh/ 中，我们需要使用 install-cert 命令将证书“安装”到一个稳定、可公开访问的目录，比如 /etc/nginx/ssl/。这样做还有一个巨大的好处：acme.sh 会记住安装路径和命令。未来当证书自动续期成功后，它会自动把新证书安装到相同的位置，并自动执行你指定的命令来重载 Nginx，实现完全自动化。\n创建用于存放证书的目录：\nsudo mkdir -p /etc/nginx/ssl 执行命令，安装证书到指定目录：\nacme.sh --install-cert -d your_domain.com \\ --key-file /etc/nginx/ssl/your_domain.com/key.pem \\ --fullchain-file /etc/nginx/ssl/your_domain.com/cer.pem \\ --reloadcmd \u0026#34;service nginx reload\u0026#34; --install-cert -d your_domain.com: 指定要安装哪个域名的证书。\n--key-file 和 --fullchain-file: 指定证书私钥和公钥链的目标路径。\n--reloadcmd \u0026quot;service nginx reload\u0026quot;: 这是实现自动化的核心。acme.sh 会记住这个命令，并在未来每次成功续期后自动执行它，让 Nginx 加载新证书。\n配置 Nginx 使用 SSL 证书 # 编辑网站配置文件：\nsudo nano /etc/nginx/sites-available/my-hugo-blog.conf 用以下内容完整替换原来的配置。这是一个经过优化的、包含 HTTP 自动跳转到 HTTPS 的配置模板。\n# 强制将所有 HTTP 请求重定向到 HTTPS server { listen 80; listen [::]:80; server_name your_domain.com www.your_domain.com; return 301 https://$host$request_uri; } # HTTPS 服务配置 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name your_domain.com www.your_domain.com; # 证书文件路径 (必须与 acme.sh install-cert 命令中的路径一致) ssl_certificate /etc/nginx/ssl/your_domain.com.cer; ssl_certificate_key /etc/nginx/ssl/your_domain.com.key; # 提升安全性的 SSL/TLS 配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers \u0026#34;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH\u0026#34;; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # HSTS Header (强制浏览器使用 HTTPS) add_header Strict-Transport-Security \u0026#34;max-age=63072000; includeSubDomains; preload\u0026#34;; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection \u0026#34;1; mode=block\u0026#34;; # 网站根目录和默认文件 root /var/www/my-hugo-blog; index index.html; location / { try_files $uri $uri/ =404; } } 完成并验证 # 保存 Nginx 配置文件后，测试配置语法并重启 Nginx：\nsudo nginx -t sudo systemctl restart nginx 现在，打开浏览器访问 https://your_domain.com，能看到地址栏出现了安全锁标志。这下网站现在不仅启用了 HTTPS，而且其证书将在未来每 60 天自动续期一次，无需再进行任何手动操作。\n","date":"2025.8.14","externalUrl":null,"permalink":"/posts/acme-auto-ssl/","section":"文章","summary":"","title":"使用 acme.sh 自动化获取网站 SSL 证书","type":"posts"},{"content":"你好世界！\n","date":"2025.8.12","externalUrl":null,"permalink":"/posts/hello-world/","section":"文章","summary":"","title":"Hello World","type":"posts"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"}]