## 7. Nginx 的作用

### 问题

Nginx 在服务器上做什么？

### 解释

Nginx 是 Web 服务器，负责：

1. **接收 HTTP 请求**
    
2. **根据 `server_name` 匹配域名**
    
3. **从 `root` 目录读取文件并返回**
    
4. **反向代理**（转发请求到后端应用）
    
5. **SSL/TLS 终端**
    
6. **负载均衡**
    

**比喻**：Nginx 就像餐厅服务员，接收顾客（浏览器）请求，去厨房（文件系统）取菜（网页），端给顾客。

---

## 8. Nginx 配置中的 `server_name _;`

### 问题

这个是不是我的域名？

### 解释

**不是**。`_` 是通配符，表示“匹配所有域名”，通常用作默认服务器。应该改为：

nginx

server_name blog.chenalna.site;

---

## 9. 评论系统 Waline 配置

### 问题

CNAME 为什么是 `cname.vercel-dns.com`？怎么判断是我的？

### 解释

- 平台会生成**专属的 CNAME 值**（如 `abc123.vercel-dns.com`）
    
- 通过 **账户绑定 + DNS 验证 + SSL 证书验证** 确保唯一性
    
- 不会撞车
    

### 配置方法

1. 在 Waline 后台添加域名 `commentsystem.chenalna.site`
    
2. 获取专属 CNAME 值
    
3. 在 DNS 服务商添加 CNAME 记录
    
4. Hugo 中配置：
    

yaml

waline:
  serverURL: https://commentsystem.chenalna.site

---

## 10. Hugo 相关问题

### 10.1 Hugo 模板优先级

- **项目根目录 `layouts/` ** > 主题 `themes/xxx/layouts/` > Hugo 内置
    
- **永远在项目根目录修改**，不要直接改主题文件
    
- 通过创建同名文件覆盖主题模板
    

### 10.2 Slug 和 Title 的区别

|项目|Title|Slug|
|---|---|---|
|用途|显示标题|URL 标识|
|字符|支持中文|推荐英文、连字符|
|示例| `Hugo入门教程` | `hugo-tutorial` |

### 10.3 多语言内容组织

text

content/post/my-article/
├── index.zh-cn.md    # 中文站显示
└── index.en.md       # 英文站显示

- 只创建对应语言的文件，就只在对应语言的站点显示
    

### 10.4 分类和标签

- **不需要**手动创建 `categories/xxx.md` 和 `tags/xxx.md`
    
- 只需在文章 Front Matter 中设置：
    

yaml

categories: ["教程"]
tags: ["Hugo"]

- Hugo 自动生成分类/标签页面
    

### 10.5 `hugo new` 的工作流程

bash

hugo new post/test/index.md

- Hugo 提取 `.Name = "test"`
    
- 使用 `archetypes/default.md` 模板
    
- 生成 Front Matter，其中 `{{ .Name }}` 被替换为 `test`
    

### 10.6 按分类创建文章的批处理脚本

batch

@echo off
set /p "category=请输入分类: "
set /p "slug=请输入 Slug: "
hugo new post/%category%/%slug%/index.md
pause

**注意**：变量名不要用 `theme`，可能被截断。用 `category` 或 `cat`。

### 10.7 使用 `index.md` 而非 `文章名.md`

- 推荐：`content/post/my-article/index.md`
    
- 优点：资源文件管理方便、URL 简洁、Hugo 官方推荐
    

---

## 11. Stack 主题菜单问题

### 问题

切换到英文后，主页、关于、Archives、Search 都消失了，中文才有。

### 原因

1. **全局菜单配置为空** `menu: main: []`，覆盖了主题默认菜单
    
2. **未为每种语言单独配置菜单**
    
3. **默认语言冲突**：`DefaultContentLanguage: en` 可能与主题逻辑冲突
    

### 菜单机制

- **主页**：不需要 `content/home/`，Hugo 自动生成，链接到 `/`
    
- **功能页面**：搜索、归档需在 `content/` 根目录创建
    
- **普通页面**：关于、链接等放在 `content/page/` 下
    
- **菜单数据来源**：`.Site.Menus.main`
    

### 解决方案

yaml

languages:
  en:
    menu:
      main:
        - identifier: home
          name: Home
          url: /
          weight: 1
          params:
            icon: home
        # ... 其他英文菜单项
  zh-cn:
    menu:
      main:
        - identifier: home
          name: 主页
          url: /
          weight: 1
          params:
            icon: home
        # ... 其他中文菜单项

### 添加新菜单项（如 travelling）

1. 创建页面：`hugo new travelling/index.md`
    
2. 在对应语言的 `menu.main` 中添加菜单项
    
3. 设置 `layout`（如 `search`、`archives`）
    

---

## 12. Stack 主题警告

### 问题

text

WARN Search page not found. Create a page with layout: search.
WARN Archives page not found. Create a page with layout: archives.

### 解决

bash

hugo new search/index.md      # layout: search
hugo new archives/index.md    # layout: archives

**位置**：直接在 `content/` 根目录下，不要在 `content/page/` 下。

---

## 核心要点

1. **DNS 解析**：A 记录指向 IP，CNAME 指向域名
    
2. **Nginx**：Web 服务器，接收请求、返回文件
    
3. **Hugo 模板**：项目根目录 `layouts/` 优先级最高
    
4. **多语言**：每种语言的菜单、内容独立配置
    
5. **Stack 主题**：菜单需在 `languages.xx.menu` 中单独定义
    
6. **修改位置**：永远在博客项目根目录，不修改 `themes/`
    
7. **功能页面**：`search/`、`archives/` 在 `content/` 根目录
    
8. **普通页面**：`about/`、`links/` 在 `content/page/` 下