【问题标题】:Allowing remote access to Elasticsearch允许远程访问 Elasticsearch
【发布时间】:2013-09-01 04:50:32
【问题描述】:

我有一个默认安装的 Elasticsearch,我试图从第三方服务器查询。但是,似乎默认情况下这是被阻止的。

谁能告诉我如何配置 Elasticsearch 以便我可以从不同的服务器查询它?

【问题讨论】:

    标签: python security lucene debian elasticsearch


    【解决方案1】:

    在 config/elasticsearch.yml 中,放入 network.host: 0.0.0.0。 并且还在防火墙中为您的 ElasticSearch 端口(默认为 9200)添加入站规则。 它适用于 ElasticSearch 2.3.0 版

    【讨论】:

      【解决方案2】:

      默认情况下,当安装并运行 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
      

      注意:不鼓励在生产环境中公开访问。应该首选受限访问。

      【讨论】:

        【解决方案3】:

        编辑:正如 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。

        可能会阻止您访问远程系统的事情(您可能知道这些):

        • 网络配置问题
        • ES 主机防火墙阻止端口9200 上的传入请求
        • 远程主机防火墙阻止传出请求到 ES 主机和/或端口9200
        • ES 配置为绑定到错误的 IP 地址(但默认情况下,它绑定到所有可用的 IP)

        最好的猜测?检查您是否可以从远程主机连接到 ES 主机,然后检查两个系统上的防火墙。如果您无法进一步诊断,也许 ES 邮件列表 (https://groups.google.com/forum/#!forum/elasticsearch) 或 IRC 频道(Freenode 上的#elasticsearch)上的某个人可以提供帮助。

        【讨论】:

        【解决方案4】:

        默认没有限制,ElasticSearch 在端口9200 上公开一个标准的HTTP API。

        从您的第三方服务器,您是否能够:curl http://es_hostname:9200/

        【讨论】:

        • 达米安 - 你是有礼的。没有默认限制。
        • 存在对 IPv4 的限制。标准 API 可以很好地解决本地测试。不是远程测试。
        • 从 ES > 2.0 开始有一个新的限制,配置network.host(你有特殊的keywork,比如“local”和“site” ) 现在。
        【解决方案5】:

        要允许使用一个默认节点进行远程访问,settings\elasticsearch.yml 应该有:

        network.host: 0.0.0.0
        http.port: 9200
        

        我的情况需要三个实例。对于每个实例,还必须声明使用的端口范围。

        network.host: 0.0.0.0
        http.port: 9200-9202
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-24
          • 2013-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-30
          相关资源
          最近更新 更多