树莓派4B自建网页服务器指南(4):Nginx 静态页 + IPv6 局域网直连与基础验证
一、前言
经过前三篇的配置,树莓派已经完成了以下工作:
- 系统离线烧录并完成基础配置
- NetworkManager 接管 WiFi,IPv6 SLAAC 公网地址稳定
- 博通芯片防飘参数固化
- 开机自动关闭 WiFi 省电
- SSH 主机名 jiejinx可访问
- Golden Image 制作完成,可随时还原系统
现在,是时候让树莓派真正成为一个可通过 局域网 IPv6 访问的 Web 服务器了。
⚠️ 本文范围说明:本文所有操作仅保证同 WiFi 局域网内可通过 IPv6 访问树莓派。手机流量等公网访问因运营商封禁 80/443 端口及光猫 IPv6 防护默认开启,无法直接打通。
公网访问的解决方案见第6篇(公网直连验证)和第7篇(ECS 反向代理)。
二、环境确认
开始之前,确认树莓派当前状态:
# 确认系统版本
cat /etc/os-release | head -1
# 确认 IPv6 地址
ip -6 addr show wlan0 | grep 'scope global'
# 确认 SSH 可访问
hostname -I预期输出:看到 2409开头的公网 IPv6 地址。
三、配置国内镜像源(可选,但推荐)
Raspberry Pi OS 的官方源服务器在海外,国内下载速度较慢。建议先替换为国内镜像源。
3.1 查看当前源配置
ls /etc/apt/sources.list.d/你的系统如果是 Debian trixie,源文件格式为 .sources
3.2 备份原配置
⚠️ Debian 12 Bookworm 起的新格式,若实际文件名为 raspi.list,则将下面命令中的 raspi.sources替换为 raspi.list
sudo cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/debian.sources.bak
sudo cp /etc/apt/sources.list.d/raspi.sources /etc/apt/sources.list.d/raspi.sources.bak3.3 替换 Debian 源为清华镜像
sudo nano /etc/apt/sources.list.d/debian.sources清空原内容(Alt+a→ Alt+/→ Ctrl+K,标记 → 移至末尾 → 剪切),复制粘贴以下内容:
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian
Suites: trixie trixie-updates trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg保存退出(Ctrl+O→ Enter→ Ctrl+X)。
3.4 替换 Raspberry Pi 源为清华镜像
执行以下命令修改 raspi.sources:
sudo nano /etc/apt/sources.list.d/raspi.sources清空原内容(Alt+a→ Alt+/→ Ctrl+K,标记 → 移至末尾 → 剪切),复制粘贴以下内容:
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/raspberrypi
Suites: trixie
Components: main
Signed-By: /usr/share/keyrings/raspberrypi-archive-keyring.gpg保存退出(Ctrl+O→ Enter→ Ctrl+X)。
3.5 更新索引
sudo apt update看到从 mirrors.tuna.tsinghua.edu.cn拉取数据即成功。
四、安装 Nginx
sudo apt install nginx -y安装完成后,Nginx 会自动启动并设置为开机自启。验证:
sudo systemctl status nginx
# 应显示 active (running)
curl http://localhost
# 应返回 Nginx 默认欢迎页的 HTML五、放置自定义网页文件
替换 Nginx 的默认欢迎页,放一个属于自己的首页。
sudo nano /var/www/html/index.html清空原内容(Alt+a→ Alt+/→ Ctrl+K,标记 → 移至末尾 → 剪切),复制粘贴以下内容:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jiejinx · 树莓派</title>
<style>
body{font-family:sans-serif;max-width:640px;margin:40px auto;padding:0 20px;line-height:1.6}
h1{color:#333}
.info{background:#f5f5f5;padding:16px;border-radius:8px;font-family:monospace;word-break:break-all}
</style>
</head>
<body>
<h1>🌲 jiejinx 的树莓派</h1>
<p>如果你看到这页,Nginx + IPv6 直连成功。</p>
<hr>
<h2>你的访问 IPv6</h2>
<div class="info" id="ip">正在获取…</div>
<script>
fetch('https://api6.ipify.org?format=json')
.then(r=>r.json())
.then(d=>ip.textContent='你的 IPv6:'+d.ip)
.catch(()=>ip.textContent='获取失败(可能通过 IPv4 访问)');
</script>
</body>
</html>保存退出(Ctrl+O→ Enter→ Ctrl+X)。
六、配置 Nginx 监听 IPv6
备份默认配置文件:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak编辑默认站点配置:
sudo nano /etc/nginx/sites-available/default清空原内容(Alt+a→ Alt+/→ Ctrl+K,标记 → 移至末尾 → 剪切),复制粘贴以下内容:
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html;
server_name _;
location / { try_files $uri $uri/ =404; }
}保存退出(Ctrl+O→ Enter→ Ctrl+X)。
测试配置并重载 Nginx:
sudo nginx -t
# 应输出 syntax is ok / test is successful
sudo systemctl reload nginx确认 Nginx 已在 IPv6 端口上监听:
ss -tlnp | grep ':80'应看到类似输出:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=xxx,fd=xx))
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=xxx,fd=xx))[::]:80这一行说明 Nginx 已在 IPv6 上监听 ✅
七、本地验证(局域网内)
7.1 树莓派本机验证
# 通过 IPv4 环回地址访问
curl http://localhost
# 通过 IPv6 环回地址访问
curl -g http://[::1]都应返回你刚才写的 HTML 页面内容 ✅
7.2 同网络下其他设备浏览器验证
在同一局域网内的其他设备(电脑、平板、手机连接同一 WiFi)上进行浏览器访问验证,这是最接近真实使用场景的测试:
方法一:通过主机名访问(推荐)
在 Windows 电脑浏览器地址栏输入:
http://jiejinx.local前提:树莓派已启用 mDNS(默认已开启),同一网络下的设备可自动解析主机名。
方法二:通过局域网 IPv4 地址访问
# 查看树莓派局域网 IPv4 地址
hostname -I
# 输出示例:192.168.1.4
# 在 Windows 电脑浏览器地址栏输入
http://192.168.1.4方法三:通过公网 IPv6 地址访问(仅限同WiFi局域网段)
在 Windows 电脑浏览器地址栏输入:
http://[2409:8a7c:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
#将 xxxx替换为树莓派实际的公网 IPv6 地址,树莓派中通过以下命令获取:
ip -6 addr show wlan0 | grep 'scope global'⚠️ 注意ipv6地址在浏览器中访问,需要用 [ ] 包裹ip地址。 此方法要求访问端设备已获取公网 IPv6 地址。若访问端无公网 IPv6,将无法打开页面,属正常现象。
7.3 验证成功标准
只要以下任一方式能正常打开树莓派 Nginx 首页,即表示 Nginx 配置正确、网络可达:
| 验证方式 | 访问地址 | 适用场景 |
|---|---|---|
| 树莓派本机 curl | http://localhost/ 或 http://[::1] | 快速验证 Nginx 是否运行 |
| 同网络浏览器(主机名) | http://jiejinx.local | 日常使用最便捷 |
| 同网络浏览器(IPv4) | http://192.168.1.x | 主机名解析失败时备用 |
| 同网络浏览器(IPv6) | http://[2409:...] | 验证 IPv6 直连(需访问端有 IPv6) |
八、关于公网访问的重要说明(为何手机流量无法直接访问)
8.1 现象
许多读者在完成上述局域网验证后,尝试用手机流量(关闭 WiFi)访问树莓派的公网 IPv6 地址,却发现页面无法打开。这不是你的配置问题,而是国内家庭宽带的普遍限制。
8.2 根本原因
运营商封禁 80/443 端口:国内家用宽带(包括移动、联通、电信)默认封锁入站的 80(HTTP)和 443(HTTPS)端口,以防止未备案的私设网站。即使你有公网 IPv6,外网也无法通过 80 端口访问你的服务。
光猫 IPv6 防火墙(SPI)默认开启:光猫出厂设置通常开启 IPv6 SPI 防护,会拦截所有未经允许的入站连接。这使得即使使用非标准端口(如 8080),外网也无法主动连接。
8.3 解决方案概览
| 问题 | 解决方案 | 详见 |
|---|---|---|
| 80/443 端口被封 | 使用非标准端口(如 9133),或通过 ECS 反向代理隐藏端口 | 第6篇、第7篇 |
| 光猫 IPv6 防护拦截 | 关闭光猫 SPI 防护(有安全风险),或使用 Cloudflare Tunnel 出站穿透 | 第6篇、7.1 番外 |
| 希望生产级稳定方案 | 购买最低配 ECS 做反向代理网关,备案域名 + 标准 443 端口 | 第7篇(主线) |
💡 战略转向:依靠家庭宽带的“裸奔” IPv6 直连,在复杂的公网环境中极不稳定。本专栏的最终生产方案是第7篇的 ECS 反向代理——用备案域名 + 云服务器作为合法流量入口,彻底绕过家庭网络的端口封锁与防火墙限制。
8.4 当前阶段的正确认知
本文已完成的目标:树莓派 Nginx 正常运行,局域网内可通过 IPv6 访问 ✅
尚未达成的目标:手机流量公网直连(可看专栏第6篇讲解光猫防护处理,或直接跳到第7篇使用 ECS 方案)
九、域名注册与 ICP 备案指引(阿里云示例)
要让你的树莓派服务通过域名访问,需要完成域名注册和 ICP 备案。以下是简要指引。
购买成本参考 7.3 番外篇
9.1 域名注册
登录阿里云 → 进入【域名注册】板块
查询并购买心仪域名(如 yourdomain.com)
按官方引导完成实名认证
9.2 ICP 备案
⚠️ 首次备案需购买一台大陆地域的轻量应用服务器(最低配即可,新人促销活动一般会有百元一年的极低折扣价,也可按月付费购买),用于生成备案服务号。仅购买域名不足以提交首次备案。
进入阿里云【ICP 备案】板块
新增备案 → 选择刚购买的轻量服务器生成的服务号
按引导填写主体信息、网站信息(域名)
完成短信核验 + 通管局审核(通常 1-2 周)
备案通过后,域名可解析至阿里云 ECS(A 记录),由 ECS 反向代理至树莓派。具体配置见专栏第7篇。
9.3 备案通过后的架构
备案域名(ICP 已过审)
↓ A / AAAA 记录
阿里云 ECS(大陆节点,需备案域名)
↓ 反代回源 / frp 穿透(可选)
树莓派(公网 IPv6 或内网穿透)ECS / 轻量云主机:备案载体 + 反向代理网关。作为公网流量入口,接收 80/443 请求,转发至树莓派。可选 frp 服务端,实现完全出站穿透,彻底绕过光猫 IPv6 防护。
树莓派:真正跑服务,数据和服务全在自己手里。通过 IPv6 直连或 frp 客户端与 ECS 通信,无需暴露家宽入站端口。
十、目标完成清单
| 项目 | 状态 |
|---|---|
| 国内镜像源配置(含 Raspberry Pi 源) | ✅ |
| Nginx 安装并运行 | ✅ |
| 放置自定义网页文件 | ✅ |
| 配置 Nginx 监听 IPv6 | ✅ |
| 本地 curl 验证通过 | ✅ |
| 局域网内浏览器访问验证通过 | ✅ |
| 理解公网访问限制及后续方向 | ✅(详见专栏第7篇 ECS 反代方案) |
| 域名注册与备案指引 | ✅ |