ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nginx UI Node 配置完全指南:Name、Secret 与 SkipInstallation 的实战与源码解析

Nginx UI Node 配置完全指南:Name、Secret 与 SkipInstallation 的实战与源码解析 后端前端运维MCP 服务【免费下载链接】nginx-uiYet another WebUI for Nginx项目地址https://gitcode.com/gh_mirrors/ngi/nginx-ui点击查看免费下载Nginx UI 从v2.0.0-beta.37起将原本散落在 Server 配置节中的节点级选项收拢为独立的[node]配置节用于定制单台 Nginx UI 服务器的本地名称、服务器间通信认证密钥以及跳过安装模式。本文以官方文档 docs/guide/config-node.md 为骨架结合仓库源码逐项讲解Name、Secret、SkipInstallation三个核心配置项的含义、作用与配置方法并补充InstanceID、UpgradeChannel、ICPNumber、PublicSecurityNumber等同样归属于该配置节的实用选项帮助你在单机部署、多服务器集群和免交互批量部署三种场景下正确完成配置。Node 配置节概览在 Nginx UI 的 INI 格式配置文件默认app.ini中node配置节对应源码中的settings.Node结构体定义于 settings/node.gotype Node struct { Name string json:name binding:omitempty,safety_text Secret string json:secret protected:true sensitive:true InstanceID string json:instance_id protected:true SkipInstallation bool json:skip_installation protected:true Demo bool json:demo protected:true UpgradeChannel string json:upgrade_channel binding:omitempty,oneofstable prerelease dev ICPNumber string json:icp_number binding:omitempty,safety_text PublicSecurityNumber string json:public_security_number binding:omitempty,safety_text }从结构体标签可以读出几条重要信息Secret标记了protected:true与sensitive:true属于敏感配置在前端保存设置时会被脱敏处理详见 api/settings/settings.go 中的restoreRedactedSensitiveSettings不会明文回显SkipInstallation、InstanceID、Demo均为protected:true属于受保护配置UpgradeChannel限定取值只能是stable、prerelease、dev三者之一。在 settings/settings.go 的envPrefixMap中NODE段被映射到NodeSettings因此这三个核心选项以及该节其他选项都可以通过环境变量注入对应关系如下完整清单见 docs/guide/env.md配置项环境变量NameNGINX_UI_NODE_NAMESecretNGINX_UI_NODE_SECRETSkipInstallationNGINX_UI_NODE_SKIP_INSTALLATIONName自定义环境指示器中的本地服务器名称类型string版本要求 v2.0.0-beta.37Name用于自定义本地服务器在 WebUI「环境指示器」environment indicator中显示的名称。当你在 WebUI 中查看当前处于哪个环境本机节点还是某个远程节点时显示的就是这个值。后端对应的读取入口是GetServerName见 api/settings/settings.gofunc GetServerName(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ name: settings.NodeSettings.Name, }) }配置示例app.ini[node] Name my-local-server或通过环境变量注入export NGINX_UI_NODE_NAMEmy-local-serverName的取值约束是safety_text即只允许安全的普通文本避免在页面渲染时引入注入风险。未设置时环境指示器将按默认规则展示服务器标识。Secret服务器间通信认证密钥类型string版本要求 v2.0.0-beta.37Secret是 Nginx UI 服务器之间通信的认证密钥承担两个核心职责集群/节点间通信认证在集群模式下控制器Controller节点访问被管理节点Node的 API 时需要使用该密钥对请求进行签名认证。从 internal/cluster/cluster.go 可以看到node_secret作为 legacy 认证方式被写入集群节点 URL 的 query 参数中形如http://10.0.0.1:9000?namenode1node_secretmy-node-secretenabledtrue详见 docs/guide/config-cluster.md。目前代码中仍保留了对这一方式的兼容node_secret查询参数会被记录为encrypted_legacy_secret但同时会输出警告日志提示应升级为更安全的配对认证paired authentication。免密访问 API持有该密钥即可在不对 WebUI 登录的情况下访问 Nginx UI API适用于自动化脚本、节点间同步等无交互场景。在v2.0.0-beta.37之后节点的安全模型引入了基于 Ed25519 密钥对的配对认证体系见 api/cluster/node_auth.goSecret被定位为 legacy 共享密钥用于控制器节点首次接入时的鉴权与「升级配对」UpgradeLegacyPairing接口会把共享密钥认证的控制器迁移到独立的密钥对上。因此该值应足够随机且保密不要泄露给不受信任的第三方在多节点部署时各节点间需使用一致的密钥才能正常通信新部署建议优先走配对认证流程Secret仅作为迁移与兼容手段。SkipInstallation跳过安装流程实现批量部署类型boolean版本要求 v2.0.0-beta.37SkipInstallation用于跳过 Nginx UI 服务器首次启动时的安装引导流程即 WebUI 中创建管理员账号、设置邮箱的初始化页面。典型应用场景当你想用同一份配置文件或同一组环境变量把 Nginx UI 部署到多台服务器时开启该选项可以避免每台机器都要手动走一遍安装向导。配合预定义用户环境变量可以实现完全免交互的批量初始化。密钥自动生成行为按文档约定如果开启了跳过安装模式但[app]节的JwtSecret和[node]节的Secret都未设置Nginx UI 会为这两个选项自动生成随机的 UUID 值。该逻辑实现在 internal/kernel/skip_install.go 的skipInstall()中func skipInstall() { logger.Info(Skip installation mode enabled) var nodeSecret string err : settings.Update(func() { if cSettings.AppSettings.JwtSecret { cSettings.AppSettings.JwtSecret uuid.New().String() } if settings.NodeSettings.Secret { nodeSecret uuid.New().String() settings.NodeSettings.Secret nodeSecret } }) ... }注意每台服务器会各自生成不同的随机 UUID。对于多节点集群部署而言如果你期望节点之间能够互通共享Secret进行认证应当在配置文件中显式指定相同的JwtSecret与Secret值而不是依赖自动生成——否则每台机器的密钥彼此独立集群节点将无法相互认证。启动链路中的实际位置从 internal/kernel/boot.go 可以看到SkipInstallation在数据库初始化阶段被读取func InitDatabase(ctx context.Context) { cModel.ResolvedModels() // Skip install if settings.NodeSettings.SkipInstallation { skipInstall() } db : cosy.InitDB(sqlite.Open(path.Dir(cSettings.ConfPath), settings.DatabaseSettings)) model.Use(db) query.Init(db) ... }也就是说跳过安装模式在数据库建立之前生效它先补齐JwtSecret与Node.Secret随后照常初始化数据库并创建预定义用户。这一顺序保证跳过安装后的系统开箱即可登录使用。预定义用户在跳过安装模式下可以通过两个环境变量预置初始管理员账号见 docs/guide/env.mdexport NGINX_UI_PREDEFINED_USER_NAMEadmin export NGINX_UI_PREDEFINED_USER_PASSWORDyour-strong-password对应的实现是 internal/kernel/skip_install.go 中的registerPredefinedUser()它以NGINX_UI_PREDEFINED_USER_为前缀解析环境变量若数据库为空则创建 ID 为 1 的初始用户若初始用户已存在但密码为空则为其补上密码密码使用bcrypt哈希后落库pwd, _ : bcrypt.GenerateFromPassword([]byte(pUser.Password), bcrypt.DefaultCost) if errors.Is(err, gorm.ErrRecordNotFound) { // Create the initial user when the database is empty err u.Create(model.User{ Model: model.Model{ID: 1}, Name: pUser.Name, Password: string(pwd), }) }完整配置示例以下是一份可直接用于多服务器批量部署的配置app.ini[app] JwtSecret your-shared-jwt-secret-please-change [node] Name prod-node-01 Secret your-shared-node-secret-please-change SkipInstallation true对应的环境变量写法export NGINX_UI_APP_JWT_SECRETyour-shared-jwt-secret-please-change export NGINX_UI_NODE_NAMEprod-node-01 export NGINX_UI_NODE_SECRETyour-shared-node-secret-please-change export NGINX_UI_NODE_SKIP_INSTALLATIONtrue export NGINX_UI_PREDEFINED_USER_NAMEadmin export NGINX_UI_PREDEFINED_USER_PASSWORDyour-strong-password需要注意SkipInstallation在v2.0.0-beta.37之前位于[server]配置节从该版本起已废弃旧位置并迁移到[node]节详见 docs/guide/config-server.md 中的废弃说明配置时应使用新的Node.SkipInstallation路径。同节的补充选项从源码结构看除了文档明确列出的三个核心选项Node结构体还包含几个在 WebUI 中同样可配置的字段一并说明InstanceID节点实例的唯一标识启动时若为空会自动生成 UUID见 internal/kernel/boot.go 的InitNodeInstanceID。它被用于配对认证体系中标识目标实例如 api/cluster/node_auth.go 响应中的TargetInstanceID由系统维护一般无需手动设置。UpgradeChannel升级渠道取值仅限stable、prerelease、dev。系统升级接口读取该值决定检查哪个发布渠道的更新见 api/system/upgrade.go。ICPNumber/PublicSecurityNumber v2.0.0-beta.42分别用于设置 ICP 备案号与公安备案号渲染在 WebUI 页脚见 api/pages/maintenance.go 与 api/public/layout.go适用于需要合规展示备案信息的站点。与安装流程的关系正常安装时 Secret 从哪来如果你不启用SkipInstallation正常安装向导POST /api/install见 api/system/install.go会在创建管理员账号时自动为App.JwtSecret与Node.Secret生成 UUID并写入配置err : settings.Update(func() { cSettings.AppSettings.JwtSecret uuid.New().String() settings.NodeSettings.Secret uuid.New().String() settings.CertSettings.Email json.Email })同时启动时若发现Node.Secret为空InitNodeSecret()internal/kernel/boot.go也会兜底生成 UUID。这两处共同保证了无论走安装向导还是跳过安装系统都不会以空密钥运行。总结Node配置节是 Nginx UI 多服务器部署的基石Name负责环境指示器中的本地服务器显示名纯展示用途Secret负责服务器间通信认证与免密 API 访问集群场景必须保证各节点一致且注意其 legacy 定位与配对认证的演进方向SkipInstallation配合NGINX_UI_PREDEFINED_USER_NAME/NGINX_UI_PREDEFINED_USER_PASSWORD环境变量可实现多服务器一键免交互部署。配置时建议优先使用环境变量便于容器化与配置管理工具注入并显式设置共享密钥避免多节点间因自动生成的随机 UUID 不同而导致通信失败。更详细的配置项与环境变量对照可继续阅读 docs/guide/env.md 与 docs/guide/config-cluster.md。赞分享后端前端运维MCP 服务【免费下载链接】nginx-uiYet another WebUI for Nginx项目地址https://gitcode.com/gh_mirrors/ngi/nginx-ui点击查看免费下载相关推荐Nginx UI Node 配置项详解Name、Secret、SkipInstallation 与 ICP 备案号Nginx UI Node 配置项详解Name、Secret、SkipInstallation 与 ICP 备案号 本文以 Nginx UI 的 node 配后端前端运维MCP 服务Data-Science-For-Beginners 第 06 课实战:非关系型数据——电子表格与 NoSQL 数据存储完全指南Data Science For Beginners 第 06 课实战:非关系型数据——电子表格与 NoSQL 数据存储完全指南 本文基于 Data Scien后端前端运维MCP 服务Nginx UI Http 配置指南GithubProxy、InsecureSkipVerify 与 WebSocketTrustedOrigins 实战解析Nginx UI Http 配置指南GithubProxy、InsecureSkipVerify 与 WebSocketTrustedOrigins 实战解析后端前端运维MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表