【发布时间】:2013-09-01 04:50:32
【问题描述】:
我有一个默认安装的 Elasticsearch,我试图从第三方服务器查询。但是,似乎默认情况下这是被阻止的。
谁能告诉我如何配置 Elasticsearch 以便我可以从不同的服务器查询它?
【问题讨论】:
标签: python security lucene debian elasticsearch
我有一个默认安装的 Elasticsearch,我试图从第三方服务器查询。但是,似乎默认情况下这是被阻止的。
谁能告诉我如何配置 Elasticsearch 以便我可以从不同的服务器查询它?
【问题讨论】:
标签: python security lucene debian elasticsearch
在 config/elasticsearch.yml 中,放入 network.host: 0.0.0.0。 并且还在防火墙中为您的 ElasticSearch 端口(默认为 9200)添加入站规则。 它适用于 ElasticSearch 2.3.0 版
【讨论】:
默认情况下,当安装并运行 elasticsearch 且不更改任何配置时,它仅绑定到 localhost。要远程访问 elasticsearch REST API 端点,必须在安装了 elasticsearch 的服务器上进行以下更改。
Elasticsearch 配置更改 根据 elasticsearch 文档中提供的指南更新 elasticsearch.yml 中的 network.host 属性 例如要绑定到本地机器上的所有 IPv4 地址,更改如下 网络主机:0.0.0.0
防火墙规则更新 更新 Linux 防火墙以允许访问端口 9200。请参阅您的 Linux 文档以将规则添加到防火墙。
例如要允许访问 CentosOS 中的所有服务器(公共),请使用 firewall-cmd
sudo firewall-cmd --zone=public --permanent --add-port=9200/tcp
sudo firewall-cmd --reload
注意:不鼓励在生产环境中公开访问。应该首选受限访问。
【讨论】:
编辑:正如 Sisso 在下面的评论中提到的,Elasticsearch 2.0 至少默认绑定到 localhost。请参阅https://www.elastic.co/guide/en/elasticsearch/reference/2.0/modules-network.html 了解更多信息。
正如 Damien 在他的回答中提到的,默认情况下 ES 允许所有访问端口 9200。实际上,您需要使用外部工具来为 ES 资源提供身份验证 - 类似于 webapp 前端或只是打开了 Basic Auth 的简单 nginx。
可能会阻止您访问远程系统的事情(您可能知道这些):
9200 上的传入请求
9200
最好的猜测?检查您是否可以从远程主机连接到 ES 主机,然后检查两个系统上的防火墙。如果您无法进一步诊断,也许 ES 邮件列表 (https://groups.google.com/forum/#!forum/elasticsearch) 或 IRC 频道(Freenode 上的#elasticsearch)上的某个人可以提供帮助。
【讨论】:
默认没有限制,ElasticSearch 在端口9200 上公开一个标准的HTTP API。
从您的第三方服务器,您是否能够:curl http://es_hostname:9200/?
【讨论】:
要允许使用一个默认节点进行远程访问,settings\elasticsearch.yml 应该有:
network.host: 0.0.0.0
http.port: 9200
我的情况需要三个实例。对于每个实例,还必须声明使用的端口范围。
network.host: 0.0.0.0
http.port: 9200-9202
【讨论】: