Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Feature] OpenResty 支持网络模式切换(1panel-network / Host)并配套 DNS 运行时解析

Aperta
#14,119 0 commenti 0 reazioni 1 assegnatario Vedi su GitHub

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

价值
  1. 解决 bridge 模式下的启动失败问题——容器启动顺序不再影响 OpenResty
  2. 用户体验更好——可以直接用容器名代理,不用记端口号
  3. 向后兼容——默认 Host 模式保持现有行为,不影响存量用户
  4. 符合行业惯例——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

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di 1Panel-dev/1Panel

Tutte le issue di 1Panel-dev/1Panel

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.