1.1 多站点与反向代理进阶

一句话判断

站点数量一上十个,“建站”就不值钱了,值钱的是“组织”和“转发”。分组解决组织问题,反向代理解决转发问题,TCP/UDP 代理补上四层的缺口。

基础用法(建一个站、绑一个域名、开 HTTPS)我们默认你已经会了。这一节讲三个进阶问题:多站点怎么组织不乱、反向代理怎么配才稳、什么场景该用哪种建站方式。

先把六种建站方式摆清楚

很多人用了两年 1Panel,都没分清创建网站时的六个入口分别为什么存在。先给一张速查表:

建站方式 给什么用 典型场景
一键部署 应用商店里的应用(WordPress、Halo 等)直接变网站 建博客、建企业站,最快
运行环境 已装好的 PHP / Java / Node.js / Go / Python / .NET 环境 自己写的项目,代码已经准备好
反向代理 把请求转发到另一个服务 后端服务跑在别的端口/别的机器
静态网站 纯 HTML / 前端构建产物 Vue/React 打包出来的 dist
子网站 复用父网站的目录,绑定新域名 一个 PHP 应用开多个租户/分站
TCP/UDP 代理 四层流量转发(OpenResty Stream 模块) 数据库、消息队列等非 HTTP 服务

选型原则一句话:应用能一键部署就一键部署;自己的代码用运行环境;服务在别处用反向代理;只有静态文件用静态网站。

子网站和反向代理最容易搞混

举个例子你就明白了:

假设你有一个 PHP 应用 example.com,现在想给某个客户开一个独立的入口 client-a.com,但不想复制代码,想共用同一套程序。

  • 用子网站:父级网站选 example.com,运行目录选父网站目录下的 client-a 子目录,绑定 client-a.com。代码共用、目录隔离。
  • 用反向代理:client-a.com 代理到 http://127.0.0.1:8080(你另起的一个服务)。这是两个独立程序。

区别在“是不是同一套代码”。子网站是“一个应用多个入口”,反向代理是“一个入口转给别的应用”。

注意官方文档的明确限制:子网站只能为已有的 PHP 或静态页面类型网站创建,运行目录必须是父网站运行目录下的子目录。Java、Node 类站点没有子网站。

TCP/UDP 代理:一个容易被忽略的能力

这是 1Panel 比较少被提到的功能,但实战中很有用。它用 OpenResty 的 Stream 模块转发四层流量,适合非 HTTP 的服务:

场景 怎么配
内网 MySQL 只想通过某台网关机暴露 监听 3306,负载均衡填内网 MySQL 地址
多个 Redis 做入口分流 监听 6379,填多个上游 + 权重
游戏/消息服务的 TCP 入口 监听对应端口,开负载均衡

两个硬性前提(官方文档明确写了):

  1. OpenResty 版本不低于 1.27.1.2-3-3-focal,不满足时页面会直接禁止创建;
  2. 监听端口必须未被占用,且要在主机防火墙和云安全组里放行。

还有一个认知点:TCP/UDP 代理不提供 HTTPS 配置,加密和认证由上游协议自己负责。别指望在这里配证书。

配置参数说明:

参数 说明
监听端口 对外监听,多个端口用英文逗号分隔
UDP 开启用 UDP,否则 TCP
负载均衡 上游服务器列表,可设权重、失败次数、连接数、失败超时
代号 在 1Panel 里标识这个代理配置的名字

多站点组织:分组不是装饰

站点一多,列表会变成一锅粥。1Panel 的网站分组就是解决这个问题的。

三步把分组用起来

  1. 建分组:网站列表上方有分组入口,按业务维度建,比如“客户站”“内部工具”“测试环境”。
  2. 设默认分组:设置默认分组后,新建网站会自动归入,省得每次手选。
  3. 用分组筛选:列表支持按类型、分组和名称筛选,处理某个客户的所有站点时一筛就出来。

分组还有一个隐藏价值:批量操作。网站列表支持批量操作,按分组筛出来再批量处理,比一个个点快得多。

分组设计的建议

维度 适不适合做分组 例子
按客户/项目 适合 acme-corp、project-x
按环境 适合 prod、staging、dev
按技术栈 一般 PHP 站和 Node 站混在一个项目里时反而乱
按域名后缀 不适合 没有管理价值

实战建议:一个分组 = 一套备份策略 + 一批人负责。 这样分组、权限、备份边界是对齐的。

反向代理进阶:三个容易踩的坑

反向代理本身简单——填个代理地址就行。但下面三个坑,进阶用户一定会遇到。

坑一:代理地址写 127.0.0.1,结果服务在容器里

1Panel 的反向代理地址可以填“已有服务的地址”,也能从已安装应用里选。如果你的后端是 1Panel 应用商店装的应用,它跑在 Docker 容器里,127.0.0.1 可能不对。

容器里的服务对宿主机来说是另一个网络命名空间。这时候要么用应用映射出来的端口,要么用容器名/容器网络地址。最省心的办法:创建反向代理时直接从“已安装应用”里选,1Panel 会帮你填对地址。

坑二:忘了开缓存,后端被压垮

网站配置的反向代理标签页里,可以开启并配置反向代理缓存规则,也能一键清除当前缓存。

动态接口不要缓存,静态资源一定要缓存。判断标准很简单:

请求类型 缓存 理由
/api/*、登录、支付 不缓存 结果随时变,缓存会出数据错误
图片、CSS、JS、字体 缓存 内容不变,省后端算力

配完缓存后注意:改了静态资源发现没生效,先想缓存,去清一次代理缓存再排查。

坑三:负载均衡规则建了却没用上

这是 1Panel 里一个反直觉的设计,官方文档写得很明白:

当前页面仅创建负载均衡规则,使用负载均衡规则需要在创建反向代理时使用 http://<负载均衡名称>。

也就是说,负载均衡规则建完,它只是“定义”,你得在反向代理的代理地址里填 http://负载均衡名称 才真正生效。很多人建完规则以为已经负载均衡了,其实流量还是走单点。

负载均衡可配的参数:

参数 作用
权重 流量按权重分配到上游
失败次数 多少次失败后摘掉上游
连接数 上游最大连接限制
失败超时 失败计数的时间窗口

反向代理的配套能力速查

反向代理不是孤立功能,网站配置里还有几个和它配合的能力,进阶后都会用到:

能力 干什么用 关键点
密码访问 给整个站或特定路径加访问密码 支持全局配置和按路径配置
CORS 跨域资源共享 允许携带凭证时,来源不能配成通配
真实 IP 在 CDN/代理后拿到访客真实 IP 要配可信 IP 来源
重定向 URL 转发,常用于换域名、强制跳转 比 Nginx 里手写 rewrite 直观
防盗链 防止别的网站直接引用你的图片 按来源校验
流量限制 限制带宽和访问流量 和 WAF 的频率限制是两回事

注意区分:网站配置里的流量限制是“限速”,WAF 里的频率限制是“限请求次数防刷”。两个都开,效果叠加,但别搞混了调哪儿。

HTTPS 与证书:进阶的三个细节

反向代理站点开 HTTPS 是常规操作,三个细节值得记住:

第一,HTTP 选项有三种,不是“开/关”: - 自动将 HTTP 跳转到 HTTPS(最常用) - 允许直接访问 HTTP(调试期用) - 禁止 HTTP 访问(最严格)

第二,HSTS 和 HTTP3 都能开,但 HTTP3 有代价。 官方文档明确说:HTTP/3 更快,但不是所有浏览器都支持,开启后可能导致部分浏览器无法访问。开之前想清楚你的用户群。

第三,自动续签有前提。 只有通过 DNS 账户或 HTTP 验证申请的证书能自动续签;手动 DNS 验证和手动上传的证书不能自动续签。证书列表的开关状态就是准信。

续签依赖 ACME 账户、DNS 账户或 HTTP 验证路径持续可用。换了 DNS 服务商的 API 密钥、改了域名解析、网站配置变了,都可能让续签失败。建议:证书快到期前手动看一眼列表,别完全信任“自动”。

更多证书细节(ACME 账户、DNS 账户、自签 CA)见 《1Panel 官方文档:功能手册》 的证书章节,本书不重复参数表。

一个完整的实战案例

场景:一台 4 核 8G 的服务器,要跑这些东西——

服务 怎么建
公司官网(WordPress) 一键部署,分组 prod
内部管理后台(Node.js) 运行环境,绑定内网域名
客户 A 的分站 子网站,复用 PHP 应用目录
另一台机器上的 AI 服务 反向代理,指向内网 IP
给合作伙伴的 MySQL 入口 TCP/UDP 代理

这个组合覆盖了五种建站方式。建完后第一件事:给每个分组配默认备份策略(见 1.3 节),然后逐个开 WAF 观察模式(见 1.4 节)。

本节要点

  • 六种建站方式各有定位,选型看“代码在不在本机”和“是不是 HTTP 服务”;
  • 分组按“客户/项目/环境”切,一个分组对齐一套备份和一批负责人;
  • 负载均衡规则建完必须在反向代理里填 http://规则名 才生效;
  • TCP/UDP 代理有 OpenResty 版本要求,且不管 HTTPS;
  • 自动续签只认 DNS 账户和 HTTP 验证两种来源。

下一节:既然所有网站都跑在 OpenResty 上,我们就来好好说说 OpenResty 的设置和 Nginx 配置怎么改才安全。