Add storage_use_date_path for flat vs date-key storage layout and emit basename-only public URLs when hide-folder is enabled. Block image paths on the site host when domain separation is active so only the image host serves files. Update settings UI, i18n, tests, and deployment docs.
4.2 KiB
4.2 KiB
双域名分离 · 推荐部署架构
启用「后台与图片域名分离」后,管理后台、API 与图片直链使用不同域名。PicHost 通过 Host 中间件 双向隔离:
- 网站域:后台、API、上传;禁止直链出图(图片路径返回 404)
- 图片域:仅放行图片路径;其余请求返回 404
架构说明
单 Docker 实例 + 两个域名,均可 全量反代 到 6892(隔离由 PicHost 中间件负责,无需在 Nginx 层拆分路径)。
| 域名 | 用途 |
|---|---|
admin.example.com |
管理后台、API、Twikoo 上传 |
pic.example.com |
图片直链(中间件拦截非图片路径) |
初始化时在 /setup 或后台 设置 中填写:
- 网站域名:
https://admin.example.com - 图片域名:
https://pic.example.com
Nginx 示例
# admin.example.com — 后台 + API(不出图,直链请走图片域)
server {
server_name admin.example.com;
location / {
proxy_pass http://127.0.0.1:6892;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 12m;
}
}
# pic.example.com — 同样全量反代;PicHost 中间件会拦截非图片路径
server {
server_name pic.example.com;
location / {
proxy_pass http://127.0.0.1:6892;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Caddy、NPM(Nginx Proxy Manager)等工具同理:两个域名均反代到
http://<主机>:6892,并保留Host与X-Forwarded-Proto头。
飞牛 NAS · Lucky 反向代理
在 Lucky 中为两个域名各建一条 反向代理 规则,前端地址 填公网域名,后端地址 填 PicHost 所在内网 IP 与端口(如 http://192.168.8.3:6892)。
网站域名(管理后台)
| 项 | 示例值 |
|---|---|
| 服务类型 | 反向代理 |
| 前端地址 | admin.pichost.com |
| 后端地址 | http://192.168.8.3:6892 |
图片域名
| 项 | 示例值 |
|---|---|
| 服务类型 | 反向代理 |
| 前端地址 | image.pichost.com |
| 后端地址 | http://192.168.8.3:6892 |
两条规则的后端地址相同即可;域名分离与路径隔离由 PicHost 根据请求 Host 自动处理。
环境变量(可选)
除 Web 设置外,也可在 .env 或 Docker 环境中配置:
SITE_BASE_URL=https://admin.example.com
IMAGE_BASE_URL=https://pic.example.com
本地测试(Windows / macOS)
1. 修改 hosts
127.0.0.1 admin.pichost.test
127.0.0.1 pic.pichost.test
建议使用 .test 后缀,避免 .local 在部分系统上与 mDNS 冲突。
2. 启动开发服务
npm run dev
项目已默认绑定 127.0.0.1:3000(与 hosts 的 IPv4 一致)。若曾出现 ping 通但浏览器连不上,多半是 dev 只监听了 IPv6 ::1。
3. 填写双域名
| 项 | 示例 |
|---|---|
| 网站域名 | http://admin.pichost.test:3000 |
| 图片域名 | http://pic.pichost.test:3000 |
后台请始终用网站域名打开,不要用 localhost(Cookie 与 Host 不一致)。
4. 预期结果
| 地址 | 预期 |
|---|---|
http://admin.pichost.test:3000/ |
正常进入后台 |
http://admin.pichost.test:3000/images/... 或 /2026/08/xxx.webp |
404(请用图片域直链) |
http://pic.pichost.test:3000/ |
404(正常,图片域不提供后台) |
http://pic.pichost.test:3000/images/... |
能出图 |
http://localhost:3000/ |
能打开,但与双域名配置无关,登录态不共享 |
上传一张图后,复制链接应指向 pic.pichost.test 域名;在后台图库中缩略图也应能正常显示。
相关说明
- 两个域名 主机名不能相同(可同机、不同子域)
- 图片域无需单独部署静态目录;与 EasyImages 等不同,PicHost 在应用内完成隔离
- 单域名部署可不启用分离,仅配置
IMAGE_BASE_URL或使用默认当前访问域名 - 配置了 Referer 防盗链时,网站域与图片域会自动加入白名单,无需手写两个域名

