引言
Frpc 作为一种单端口反向代理技术,能够将远程访问统一映射到本地的某一个端口。然而,本地服务通常运行在多个不同的端口上,这时就需要借助额外的反向代理工具,将本地其他端口的服务代理到 Frpc 所映射的端口及其对应路径下。
例如,本地 8085 端口运行着 BT 下载服务,而 Frpc 映射的端口为 5668。为了实现通过 5668 端口访问 BT 服务,就需要使用 Lucky 或 Nginx 等工具,将本地的 8085 端口反向代理到 5668/xxxxx这样的路径上。
1. 飞牛系统设置
在应用管理中配置 qBittorrent 外部访问链接
在飞牛OS的应用管理界面,找到 qBittorrent 设置,将其外部访问链接设置为 域名/qbt/。
注意:qbt后面的 /是必需的,若缺少该斜杠,会导致静态资源路径错误,页面无法正常加载。

2. Lucky设置
Lucky 可通过飞牛OS应用中心直接安装,首次登录后请及时修改默认用户名和密码。
主要配置位于 Web 服务 与 SSL 两个部分:

HTTPS设置
若需通过公网 HTTPS 访问,请提前将你的 SSL 证书(如 violet2046.online)上传至 Lucky。稍后在web规则中lucky会自动调用这些证书,属于必填项。看到这个界面就说明上传成功了:

之后一步我们可以开始Web规则设置
Web规则设置
点击新建规则,监听端口选择你frp设置的端口,我这里以5668做示范,记得使用https的话需要打开tls,否则无法进行加密。

默认规则我划给了飞牛的主界面,即https://127.0.0.1:5667,可以根据自己实际需求设置。其他设置按照图中示例即可。注意必须是反向代理类型

然后新建子规则,把前端地址写上你的域名+/qbt/,我这里就不写了。后端填本地ip:8085,按照你的实际服务端口写,同样服务类型需要设置为反向代理

设置完这些后,Lucky就没有需要设置的部分了; 当然你也可以自定义一些安全设置之类
3. Qbittorrent设置
WebUI-验证部分按图中设置即可: 这一步主要是防止前后网站请求头不一样被qbt墙了

一些配置过程中可能会遇到的问题
为什么我配置完后访问域名发现Css以及静态资源都丢失了?
这是一个在反向代理中非常常见的问题,这通常是因为静态资源的路径在HTML中被写成了绝对路径(如/static/style.css),而我们的反向代理路径是/qbt,所以浏览器会尝试从https://violet2046.online/static/style.css加载,但我们的反向代理只处理/qbt路径,因此静态资源请求得不到正确的响应。例如我这里会在qbt后面跟一长串正则表达式?之类的东西

这个问题可以通过在访问链接中设置为qbt/解决,这样服务在进行地址查找的时候就不会加上qbt字符了。
我在询问AI后被建议重写地址,这个方法可行吗?
已尝试的解决方案及其局限性
我尝试了多种基于Lucky的解决方案:
路径变量替换方案
通过Lucky的全局变量(如{PATH:4})尝试去除路径中的/qbt前缀,将请求重写后转发给qBittorrent。这种方法虽然可以处理动态请求(如API调用),但无法解决根本问题——qBittorrent返回的HTML内容中的资源路径仍然是硬编码的绝对路径。
多规则分别处理方案
为不同类型的请求(API、GUI、静态资源)创建不同的子规则,但同样无法修改qBittorrent生成的HTML内容中的资源引用路径。
代理头部设置方案
通过设置各种X-Forwarded头部信息,希望qBittorrent能够识别代理环境并调整资源路径。遗憾的是,qBittorrent的WebUI并没有设计为能够根据这些头部信息动态调整资源路径。
总的来说,这种设置无疑是多此一举,直接加上一个/ 完事😋