### 硬件
* **开发板**: VisionFive2 4GiB
* **操作主机系统**: Windows 11 专业版
* **内网主路由器**: mediatek/mt7981 with OpenWRT
* **内网主服务器**: 飞牛os
### 内网 Web 服务
* 飞牛os(主服务器)
* cups(远程打印服务)
* quickreference(快速技术参考网页)
* home assistant(智能家居服务)
* qBittorrent(p2p下载)
### 内网拓扑结构
* 公网
* 主路由器(192.168.123.1)
* VisionFive2(待分配)
* 主服务器(192.168.123.121)
> 主路由器是唯一与公网相连的设备,主路由器与 VisionFive2、主服务器通过以太网接口连接。用户设备通过 WLAN 接入主路由器,访问公网与内网服务。
## 操作步骤
1. **安装操作系统**
首先安装 StarFive 提供的 Debian 2409 镜像,并安装定制软件包。(可选,安装定制软件包与否不影响 Nginx 服务的配置,但推荐安装)。安装后在设置中打开 SSH 登录权限。
2. **SSH 登录**
在 PowerShell 中通过 SSH 登录到开发板的 `user` 用户。
3. **配置固定 IP 地址**
运行 `ip a` 命令获取本机 IP 地址。
```bash
ip a
```
获取本机 IP 地址后,在主路由 DHCP 设置中依照之前得到的 IP 与 MAC 地址为 VF2 固定分配内网地址,同时 VF2 板端保持 DHCP 方式获取地址不变即可。
4. **安装 Nginx**
运行以下命令更新软件包列表并安装 Nginx:
```bash
apt update
sudo apt install nginx -y
```
5. **检查 Nginx 服务状态**
安装完成后,检查 Nginx 服务是否正常运行:
```bash
sudo systemctl status nginx
```
使用操作主机的浏览器访问 VisionFive2 的固定 IP 地址(端口80),应能看到 Nginx 的欢迎页面。
6. **配置域名劫持**
在路由器中将计划用于内网服务的域名(例如 `qr.lan`)劫持到 VisionFive2 的 IP 地址。
7. **创建 Nginx 代理配置文件**
在 VisionFive2 中创建一个代理转发配置文件:
```bash
sudo nano /etc/nginx/sites-available/proxy-services
```
然后填写配置文件。此处按照笔者的内网 Web 服务填写,读者可根据自己内网情况进行修改:
```nginx
server {
listen 80;
server_name 192.168.123.130; # 这里写 Nginx 服务器的 IP
# 默认的根目录,可以留空或指向一个空白目录
root /var/www/html;
index index.html index.htm;
# ---- 路由服务 ----
location /router/ {
# 注意 proxy_pass 后面的地址末尾有 /
proxy_pass http://192.168.123.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# ---- NAS ----
location /nas/ {
proxy_pass http://192.168.123.121:5666/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# ---- CUPS 打印服务 ----
location /cups/ {
proxy_pass http://192.168.123.121:631/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# ---- Quick Reference ----
location /qr/ {
proxy_pass http://192.168.123.121:13005/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# ---- qBittorrent ----
location /qb/ {
proxy_pass http://192.168.123.121:8085/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
8. **启用新配置**
首先,检查 `sites-enabled` 目录中是否存在默认配置文件:
```bash
ls /etc/nginx/sites-enabled/
```
如果存在 `default` 文件,则删除该符号链接:
```bash
sudo rm /etc/nginx/sites-enabled/default
```
然后,为我们的配置文件新建符号链接:
```bash
sudo ln -s /etc/nginx/sites-available/proxy-services /etc/nginx/sites-enabled/
```
9. **检查并重载 Nginx 配置**
检查 Nginx 配置文件语法是否正确:
```bash
sudo nginx -t
```
最后重新加载 Nginx 配置使其生效:
```bash
sudo systemctl reload nginx
```
## 验证
在操作主机的浏览器中访问 `http://qr.lan` (或其他已配置的域名),如果请求被成功转发到对应的内网服务,则表示配置成功。
至此,成功地在 VisionFive2 上运行了 Nginx 服务作为内网反向代理。

