--- title: "HTTP 发布端口配置" date: 2026-02-21 lastmod: 2026-02-21 description: "控制 HTTP 对外发布端口的配置说明" tags: ["HTTP", "端口配置", "网络配置"] summary: "配置项作用 # http.publish_port 配置项指定向客户端发布的 HTTP 服务端口号,用于内部端口与外部端口不一致的场景。 是否可选 # 是 默认值 # -1 (自动检测,使用 http.port 的值) 配置项类型 # 静态配置 - 需要重启节点才能生效 配置格式 # # 自动检测(默认) http.publish_port: -1 # NAT 端口转发 http.port: 9200 http.publish_port: 80 # 容器端口映射 http.port: 80 http.publish_port: 9200 与 http.port 的关系 # ┌─────────────────────────────────────────────────────────┐ │ http.port vs publish_port │ └─────────────────────────────────────────────────────────┘ http.port http.publish_port │ │ ▼ ▼ 实际监听端口 对外发布的端口 (服务绑定) (客户端使用) │ │ └──────────┐ ┌───────┘ │ │ ▼ ▼ [内部网络] [外部网络] 示例:NAT 环境 http." --- ## 配置项作用 `http.publish_port` 配置项指定向客户端发布的 HTTP 服务端口号,用于内部端口与外部端口不一致的场景。 ## 是否可选 是 ## 默认值 ``` -1 (自动检测,使用 http.port 的值) ``` ## 配置项类型 **静态配置** - 需要重启节点才能生效 ## 配置格式 ```yaml # 自动检测(默认) http.publish_port: -1 # NAT 端口转发 http.port: 9200 http.publish_port: 80 # 容器端口映射 http.port: 80 http.publish_port: 9200 ``` ## 与 http.port 的关系 ``` ┌─────────────────────────────────────────────────────────┐ │ http.port vs publish_port │ └─────────────────────────────────────────────────────────┘ http.port http.publish_port │ │ ▼ ▼ 实际监听端口 对外发布的端口 (服务绑定) (客户端使用) │ │ └──────────┐ ┌───────┘ │ │ ▼ ▼ [内部网络] [外部网络] 示例:NAT 环境 http.port: 9200 http.publish_port: 80 (内网端口) (公网端口) ``` ## 推荐设置 | 场景 | 推荐值 | 说明 | |------|--------|------| | 默认配置 | -1 | 自动检测 | | NAT 环境 | 外部端口 | 客户端使用外部端口 | | 容器环境 | 主机端口 | 容器端口映射 | | 端口转发 | 转发后端口 | 负载均衡器端口 | ## 使用示例 **默认配置:** ```yaml http.port: 9200 http.publish_port: -1 # 自动使用 9200 ``` **NAT 环境配置:** ```yaml # 内网监听 9200,外网访问 80 http.port: 9200 http.publish_port: 80 ``` **容器环境配置:** ```yaml # 容器内 80,映射到主机 9200 http.port: 80 http.publish_port: 9200 ``` **负载均衡环境:** ```yaml http.port: 9200 http.publish_port: 9200 http.publish_host: search.example.com ``` ## 配置验证 ```bash # 查看发布端口 GET /_nodes?filter_path=nodes.*.http.publish_port # 查看完整 HTTP 信息 GET /_nodes/http ``` ## 常见问题 **问题 1:客户端无法连接** **原因:** - 发布的端口不正确 - 客户端使用了错误的端口 **解决方案:** ```yaml # 设置正确的发布端口 http.publish_port: 80 ``` **问题 2:端口范围自动检测失败** **解决方案:** ```yaml # 明确设置发布端口 http.port: 9200-9210 http.publish_port: 9200 ``` ## 自动检测逻辑 ``` http.publish_port = -1 │ ▼ 检查 http.port │ ├── 单个端口 → 使用该端口 └── 端口范围 │ ├── 所有地址使用相同端口 → 使用该端口 └── 不同端口 → 报错 ``` ## 注意事项 1. **静态配置**:修改端口需要重启节点 2. **端口冲突**:确保发布端口未被占用 3. **可达性**:确保客户端能访问发布的端口 4. **一致性**:集群节点应使用一致的配置 5. **自动检测**:-1 值会自动使用 http.port ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `http.port` | 9200-9300 | 实际监听端口 | | `http.publish_host` | [] | 发布主机地址 | | `transport.publish_port` | -1 | 传输发布端口 | ## 完整配置示例 ```yaml # easysearch.yml # NAT 环境配置 http.port: 9200 http.publish_port: 80 http.publish_host: search.example.com # 容器环境配置 http.port: 80 http.publish_port: 9200 http.publish_host: localhost # 默认配置 http.port: 9200 http.publish_port: -1 ```