--- title: "HTTP 服务端口配置" date: 2026-03-24 lastmod: 2026-03-24 description: "控制 Easysearch HTTP REST API 服务端口的配置项说明" tags: ["网络配置", "HTTP服务", "端口配置"] summary: "配置项作用 # http.port 配置项指定 Easysearch HTTP REST API 服务监听的端口范围。客户端通过此端口执行索引、搜索、集群管理等操作。 配置项类型 # 该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。 默认值 # 9200-9300 是否必需 # 可选配置项(有默认值) 配置格式 # # 单个端口 http.port: 9200 # 端口范围(自动选择可用端口) http.port: 9200-9300 # 多个端口(逗号分隔) http.port: 9200,9201,9202 工作原理 # HTTP 服务在配置的端口范围内绑定可用端口: ┌─────────────────────────────────────────────────────────┐ │ 节点启动 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ │ 配置端口范围 检查可用性 http.port: 9200-9300 │ │ ▼ ▼ ┌───────┴────────┐ 尝试绑定端口 │ 端口 9200 │ 从 9200 开始 │ 可用?" --- ## 配置项作用 `http.port` 配置项指定 Easysearch HTTP REST API 服务监听的端口范围。客户端通过此端口执行索引、搜索、集群管理等操作。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` 9200-9300 ``` ## 是否必需 **可选配置项**(有默认值) ## 配置格式 ```yaml # 单个端口 http.port: 9200 # 端口范围(自动选择可用端口) http.port: 9200-9300 # 多个端口(逗号分隔) http.port: 9200,9201,9202 ``` ## 工作原理 HTTP 服务在配置的端口范围内绑定可用端口: ``` ┌─────────────────────────────────────────────────────────┐ │ 节点启动 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ │ 配置端口范围 检查可用性 http.port: 9200-9300 │ │ ▼ ▼ ┌───────┴────────┐ 尝试绑定端口 │ 端口 9200 │ 从 9200 开始 │ 可用? │ │ └───────┬────────┘ ▼ │ ┌────┴────┐ ┌───────┴────────┐ │ │ 是(绑定) 否 绑定成功 绑定失败 │ │ │ ▼ ▼ ▼ HTTP 服务启动 端口 9201 尝试下一端口 ... ... ``` ## 使用示例 **开发环境:** ```yaml # 使用默认端口范围(推荐) http.port: 9200-9300 # 或使用单个端口 http.port: 9200 ``` **生产环境:** ```yaml # 指定固定端口 http.port: 9200 # 多实例服务器使用不同端口 # 节点 1 http.port: 9200 # 节点 2 http.port: 9201 ``` **容器环境:** ```yaml # 容器内使用标准端口 http.port: 9200 ``` ## 推荐设置建议 | 环境 | 推荐配置 | 说明 | |-----|---------|------| | 开发 | 9200-9300 | 默认配置,灵活 | | 单节点生产 | 9200 | 固定端口,便于访问 | | 多节点 | 9200-9300 | 自动分配 | | 容器 | 9200 | 标准端口,便于映射 | | 安全加固 | 非标准端口 | 如 19200 | ## 完整网络配置示例 ```yaml # 集群配置 cluster.name: production node.name: node-1 # 网络配置 network.host: 0.0.0.0 # HTTP 服务端口(重要) http.port: 9200 # HTTP 发布端口(可选,多网卡时使用) http.publish_port: 9200 # HTTP 绑定地址(可选) http.bind_host: 192.168.1.10 # 传输端口 transport.port: 9300 ``` ## 端口占用检查 **启动前检查:** ```bash # 检查端口是否被占用 netstat -tuln | grep 9200 # 或使用 lsof lsof -i :9200 # 或使用 ss ss -tuln | grep 9200 ``` **如果端口被占用:** ```bash # 查找占用进程 lsof -i :9200 # 杀死占用进程 kill -9 # 或使用其他端口 http.port: 9201 ``` ## 多实例部署 **同一服务器运行多个节点:** ```yaml # 节点 1 配置 cluster.name: production node.name: node-1 network.host: 192.168.1.10 http.port: 9200 transport.port: 9300 path.data: /data/node1 # 节点 2 配置 cluster.name: production node.name: node-2 network.host: 192.168.1.10 http.port: 9201 transport.port: 9301 path.data: /data/node2 ``` ## 与 publish_port 的关系 | 配置项 | 作用 | 使用场景 | |-------|------|---------| | `http.port` | 实际监听端口 | 始终需要 | | `http.publish_port` | 对外发布的端口 | 多网卡/NAT 环境 | **NAT 环境示例:** ```yaml # 内网端口 http.port: 9200 # 对外发布的端口(端口转发) http.publish_port: 80 # 客户端通过端口 80 访问 ``` ## 常见问题 **问题 1:端口被占用无法启动** ``` BindException: Address already in use ``` **解决方案:** 1. **检查端口占用** ```bash lsof -i :9200 ``` 2. **停止占用进程** ```bash # 停止其他 Easysearch 节点 kill -9 ``` 3. **使用其他端口** ```yaml http.port: 9201 ``` **问题 2:防火墙阻止访问** **症状:** - 本地可以访问 - 远程无法访问 **解决方案:** ```bash # 开放防火墙端口 firewall-cmd --permanent --add-port=9200/tcp firewall-cmd --reload # 或使用 iptables iptables -A INPUT -p tcp --dport 9200 -j ACCEPT ``` **问题 3:多网卡绑定错误** **解决方案:** ```yaml # 明确指定绑定地址 http.bind_host: 192.168.1.10 http.port: 9200 # 或使用 network.host network.host: 192.168.1.10 ``` ## 容器部署配置 **Docker 部署:** ```yaml # easysearch.yml http.port: 9200 network.host: 0.0.0.0 # Docker 运行命令 docker run -d \ --name easysearch \ -p 9200:9200 \ -p 9300:9300 \ -v /data:/usr/share/easysearch/data \ infinilabs/easysearch:latest ``` **Kubernetes 部署:** ```yaml apiVersion: v1 kind: Service metadata: name: easysearch spec: ports: - name: http port: 9200 targetPort: 9200 - name: transport port: 9300 targetPort: 9300 selector: app: easysearch ``` ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `http.publish_port` | -1 | 对外发布端口 | | `http.bind_host` | 同 network.host | 绑定地址 | | `http.host` | - | 绑定地址(同 bind_host) | | `transport.port` | 9300-9400 | 传输端口 | | `network.host` | - | 网络绑定地址 | ## 验证端口配置 **启动后验证:** ```bash # 检查监听端口 netstat -tuln | grep 9200 # 测试 HTTP 连接 curl http://localhost:9200 # 查看节点信息 curl http://localhost:9200/_cat/nodes?v # 查看端口配置 curl http://localhost:9200/_nodes/settings?filter_path=**.http.port ``` **输出示例:** ```json { "cluster_name" : "production", "nodes" : { "node_id" : { "settings" : { "http" : { "port" : "9200-9300" } } } } } ``` ## 安全建议 **生产环境配置:** 1. **使用非标准端口** ```yaml http.port: 19200 ``` 2. **配合防火墙规则** ```bash # 只允许特定网段访问 firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="9200" accept ' ``` 3. **启用 HTTPS** ```yaml xpack.security.http.ssl.enabled: true ``` ## 注意事项 1. **静态配置**:修改端口需要重启节点 2. **端口冲突**:确保端口未被其他服务占用 3. **防火墙配置**:生产环境需配置防火墙规则 4. **多实例**:同一服务器多节点需使用不同端口 5. **容器映射**:容器部署需正确映射端口