[Feature] OpenResty 支持网络模式切换(1panel-network / Host)并配套 DNS 运行时解析
I maintainer di solito rispondono entro 1 giorno
@wanghe-fit2cloud ci sta già lavorando.
Dal 17/10/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
1Panel Version
2.3.2
Please describe your needs or suggestions for improvements
需求背景
目前 1Panel 的 OpenResty 默认使用 Host 网络模式。在实际使用中,希望将 OpenResty 接入 1panel-network,直接通过容器名反向代理其他应用商店的容器,好处是:
- 不需要端口映射,减少宿主机端口占用
- 容器名即地址,配置更直观
- 网络隔离更好,容器间通信不经过宿主机网络
相关讨论:#13434
但直接改成 bridge 网络后,会遇到一个问题:容器启动顺序不确定,后端容器未就绪时 OpenResty 启动失败。
Nginx 在配置加载阶段会解析 proxy_pass 中的域名,解析失败直接拒绝启动:
nginx: [emerg] host not found in upstream "容器名" in /www/sites/xxx/proxy/root.conf
单个后端的启动延迟,会导致整个 OpenResty 和所有站点不可用。
Please describe the solution you suggest
具体建议(三个功能点)
1. OpenResty 应用增加网络模式切换选项
在 OpenResty 的应用参数设置中,增加"网络模式"选项:
- Host 模式(默认,保持现状)
- 1panel-network(Bridge 模式)
用户可以根据需要切换,切换后自动重建容器。
2. 反向代理的 proxy_pass 改为变量形式 + location 内 resolver
当前生成的配置(root.conf):
location / {
proxy_pass http://容器名:端口;
...
}
建议改为:
location / {
resolver 127.0.0.11 valid=30s ipv6=off;
resolver_timeout 3s;
set $backend "容器名:端口";
proxy_pass http://$backend;
...
}
3. 切换网络模式时,自动更新现有站点的代理地址
- 从 Host → 1panel-network:将现有反向代理的地址从
127.0.0.1:端口自动替换为容器名:端口 - 从 1panel-network → Host:反向替换
这样用户切换网络模式后,现有站点不需要手动重新配置。
参考实现:Nginx Proxy Manager(Docker 环境下的同类产品)默认就是这种实现方式。
改动范围预估
- 网站 - 设置:增加网络模式选项(Host / 1panel-network)
- 网络切换逻辑:切换时重建容器并批量更新站点代理地址
- 反向代理配置生成:
applyLocationProxyPass函数中,bridge 模式下生成resolver+set $backend+proxy_pass $backend形式 - 相关源码:
agent/app/service/website_utils.go
价值
- 解决 bridge 模式下的启动失败问题——容器启动顺序不再影响 OpenResty
- 用户体验更好——可以直接用容器名代理,不用记端口号
- 向后兼容——默认 Host 模式保持现有行为,不影响存量用户
- 符合行业惯例——Nginx Proxy Manager 等同类产品早已采用此方案
Additional Information
关于"bridge 模式有局限性"的补充说明:
本建议不是要替换 host 模式,而是增加一个可选项。host 模式保持默认、保持现状,需要代理非容器服务的用户继续用 host 模式。
bridge 模式面向的是"所有应用都在 1panel-network 里、想用容器名直接代理"的场景——这类场景下 bridge 模式没有局限性,反而更干净。用户根据自己的场景选择。
- Lingua principale
- Go
- Stelle
- 37.2k
- Fork
- 3.4k
- Merge medio
- 11h 34m
- PR unite (30g)
- 85
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di 1Panel-dev/1Panel
-
[Bug] 访问更新记录出现异常Forse già presa @wanghe-fit2cloud l’ha presa oggi. Aperta
1Panel-dev/1Panel#14120 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature] Python 3.15 listed on runtimeForse già presa @wanghe-fit2cloud l’ha presa 1 giorno fa. Aperta
1Panel-dev/1Panel#14118 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature] 网站列表按钮优化Forse già presa @wanghe-fit2cloud l’ha presa 1 giorno fa. Aperta
1Panel-dev/1Panel#14117 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] 日志无法回显Forse già presa @wanghe-fit2cloud l’ha presa 1 giorno fa. Aperta
1Panel-dev/1Panel#14116 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] Update DeepSeek Hermes to the Latest VersionForse già presa @wanghe-fit2cloud l’ha presa 1 giorno fa. Apertatype: app-store
1Panel-dev/1Panel#14115 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di 1Panel-dev/1Panel
Issue simili
-
ViewData can pair the in-flight proposal with the prepared flag of another proposalForse già presa @HagarMeir l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
hyperledger/SmartBFT#710 ·
I maintainer di solito rispondono entro 1 giorno
-
agent-butler-finding chore
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
jordansmall/spindrift#5575 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
open-telemetry/opentelemetry-go-compile-instrumentation#1512 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
slavakurilyak/awesome-ai-agents#805 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
JakeChampion/lang#12684 ·
I maintainer di solito rispondono entro 1 giorno