配置项作用 #
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 服务启动 端口 9201 尝试下一端口
... ...
使用示例 #
开发环境:
# 使用默认端口范围(推荐)
http.port: 9200-9300
# 或使用单个端口
http.port: 9200
生产环境:
# 指定固定端口
http.port: 9200
# 多实例服务器使用不同端口
# 节点 1
http.port: 9200
# 节点 2
http.port: 9201
容器环境:
# 容器内使用标准端口
http.port: 9200
推荐设置建议 #
| 环境 | 推荐配置 | 说明 |
|---|---|---|
| 开发 | 9200-9300 | 默认配置,灵活 |
| 单节点生产 | 9200 | 固定端口,便于访问 |
| 多节点 | 9200-9300 | 自动分配 |
| 容器 | 9200 | 标准端口,便于映射 |
| 安全加固 | 非标准端口 | 如 19200 |
完整网络配置示例 #
# 集群配置
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
端口占用检查 #
启动前检查:
# 检查端口是否被占用
netstat -tuln | grep 9200
# 或使用 lsof
lsof -i :9200
# 或使用 ss
ss -tuln | grep 9200
如果端口被占用:
# 查找占用进程
lsof -i :9200
# 杀死占用进程
kill -9 <PID>
# 或使用其他端口
http.port: 9201
多实例部署 #
同一服务器运行多个节点:
# 节点 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 环境示例:
# 内网端口
http.port: 9200
# 对外发布的端口(端口转发)
http.publish_port: 80
# 客户端通过端口 80 访问
常见问题 #
问题 1:端口被占用无法启动
BindException: Address already in use
解决方案:
- 检查端口占用
lsof -i :9200
- 停止占用进程
# 停止其他 Easysearch 节点
kill -9 <PID>
- 使用其他端口
http.port: 9201
问题 2:防火墙阻止访问
症状:
- 本地可以访问
- 远程无法访问
解决方案:
# 开放防火墙端口
firewall-cmd --permanent --add-port=9200/tcp
firewall-cmd --reload
# 或使用 iptables
iptables -A INPUT -p tcp --dport 9200 -j ACCEPT
问题 3:多网卡绑定错误
解决方案:
# 明确指定绑定地址
http.bind_host: 192.168.1.10
http.port: 9200
# 或使用 network.host
network.host: 192.168.1.10
容器部署配置 #
Docker 部署:
# 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 部署:
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 | - | 网络绑定地址 |
验证端口配置 #
启动后验证:
# 检查监听端口
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
输出示例:
{
"cluster_name" : "production",
"nodes" : {
"node_id" : {
"settings" : {
"http" : {
"port" : "9200-9300"
}
}
}
}
}
安全建议 #
生产环境配置:
- 使用非标准端口
http.port: 19200
- 配合防火墙规则
# 只允许特定网段访问
firewall-cmd --permanent --add-rich-rule='
rule family="ipv4" source address="10.0.0.0/8"
port protocol="tcp" port="9200" accept
'
- 启用 HTTPS
xpack.security.http.ssl.enabled: true
注意事项 #
- 静态配置:修改端口需要重启节点
- 端口冲突:确保端口未被其他服务占用
- 防火墙配置:生产环境需配置防火墙规则
- 多实例:同一服务器多节点需使用不同端口
- 容器映射:容器部署需正确映射端口





