86 lines
3.2 KiB
Markdown
86 lines
3.2 KiB
Markdown
# 反向代理
|
||
|
||
生产环境建议通过 Nginx、Caddy、NPM(Nginx Proxy Manager)或 NAS 自带反代,将 HTTPS 流量转发到 PicHost 容器 **6892** 端口。
|
||
|
||
## 基本要求
|
||
|
||
- 反代目标:`http://127.0.0.1:6892`(或容器所在主机 IP)
|
||
- 保留请求头:`Host`、`X-Forwarded-Proto`(及常见的 `X-Forwarded-For`)
|
||
- 上传大小:Nginx 建议 `client_max_body_size 12m` 或更大
|
||
- 公网访问请配置 **HTTPS**
|
||
|
||
## 单域名示例(Nginx)
|
||
|
||
管理、API、出图同一域名:
|
||
|
||
```nginx
|
||
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;
|
||
client_max_body_size 12m;
|
||
}
|
||
}
|
||
```
|
||
|
||
环境变量(可选):
|
||
|
||
```env
|
||
IMAGE_BASE_URL=https://pic.example.com
|
||
```
|
||
|
||
未设置 `IMAGE_BASE_URL` 时,PicHost 会根据反代转发的 `Host` 与 `X-Forwarded-Proto` 推断公网地址。
|
||
|
||
## 双域名
|
||
|
||
若后台与图片使用不同域名,两个 `server` 块均可 **全量反代** 到同一端口;隔离由 PicHost 中间件完成。
|
||
|
||
详见专章:[双域名分离](./domain-separation.md)。
|
||
|
||
## Cloudflare 橙云
|
||
|
||
详见专章:[Cloudflare / CF 优选部署](./cloudflare-deployment.md)。
|
||
|
||
| 做法 | 说明 |
|
||
| ---- | ---- |
|
||
| **DNS 橙云** | `admin` / `img` 两个子域 Proxied → 源站反代 `6892`,SSL **Full (strict)** |
|
||
| **DNS 优选** | 与 PicHost 兼容;须保持 **admin → admin、img → img** 回源 |
|
||
| **R2** | 在存储页作对象后端,非 Pages 托管应用 |
|
||
| **源站防火墙** | 仅放行 [Cloudflare IP](https://www.cloudflare.com/ips/),禁止公网直连 `6892` |
|
||
|
||
**不建议:**
|
||
|
||
- 用 **Cloudflare Pages**(`*.pages.dev`)或 **Workers**(`*.workers.dev`)对 PicHost **整站反代**,或让图片域 **fetch 到管理域** — 会改写 Host、绕过双域名隔离(见 [Cloudflare 部署说明](./cloudflare-deployment.md))
|
||
- 在 CF 控制台「从 Git 创建 Worker」部署本仓库 — 当前为 `node-server` 预设,无法直接 `wrangler deploy`
|
||
|
||
## 源站安全(双域名推荐)
|
||
|
||
除 PicHost 中间件外,建议在反代 / 防火墙层加固:
|
||
|
||
1. **`server_name` 白名单** — 仅网站域与图片域;`default_server` 拒绝裸 IP 与其它 Host
|
||
2. **禁止公网暴露 6892** — 仅本机或内网反代访问;公网只开 80/443
|
||
3. **橙云时限制源站来源 IP** — 仅 Cloudflare 回源 IP 段
|
||
|
||
**v1.2.2 起**,双域名开启时 PicHost 应用层也会对**未配置的网站域、图片域之外**的 Host 全站返回 404(与反代 default server 互补,而非替代)。误配置导致锁死时执行 `docker exec pichost clear-domains` 恢复,见 [常见问题](./faq.md#双域名配置后后台-404-进不去)。
|
||
|
||
## Caddy 示例
|
||
|
||
```caddy
|
||
pic.example.com {
|
||
reverse_proxy 127.0.0.1:6892
|
||
}
|
||
```
|
||
|
||
双域名时添加第二个站点块,后端地址相同即可。
|
||
|
||
## 缓存注意
|
||
|
||
图片 404/403 与域名隔离 404 响应带 **禁止缓存** 头,避免 CDN 长时间缓存错误页面。若在前端再加 CDN,请对动态 API 路径谨慎缓存。
|
||
|
||
## 相关
|
||
|
||
- [环境变量](./configuration.md) — `SITE_BASE_URL`、`IMAGE_BASE_URL`
|
||
- [快速开始](./getting-started.md) — Docker 端口
|