Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[Feature] Support switching OpenResty network mode (Host / 1panel-network) with runtime DNS resolution

オープン
#14,119 コメント 1 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@wanghe-fit2cloud がすでに取り組んでいます。

2026年10月17日 から。

評価

この issue はまだ評価されていません。

説明

type: feature-request
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 模式没有局限性,反而更干净。用户根据自己的场景选择。

主要言語
Go
スター
37.2k
フォーク
3.4k
平均マージ
11時間 50分
マージ済み PR(30日)
83

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

1Panel-dev/1Panel のほかの issue

1Panel-dev/1Panel の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。