如何在 Elasticsearch 2.0 中启用远程访问/请求?

问题描述 投票:0回答:15

从 v2.0 开始,Elasticsearch 默认情况下仅在本地主机上监听,但我想在本地主机之外发出请求。

例如,允许这样的请求:

http://localhost:9200/

但这不是:

http://server_name:9200/
(来自服务器外部,例如:同一 LAN 中的本地计算机)。

感谢您的帮助。

elasticsearch
15个回答
177
投票

放入

/etc/elasticsearch/elasticsearch.yml

transport.host: localhost 
transport.tcp.port: 9300 
http.port: 9200
network.host: 0.0.0.0

81
投票

默认情况下,http 传输和内部 Elasticsearch 传输仅侦听 localhost。 如果您想从 localhost 以外的主机访问 Elasticsearch,请尝试在 config/elasticsearch.yml 中添加以下配置。

transport.host: localhost 
transport.tcp.port: 9300 
http.port: 9200
network.host: 0.0.0.0

这里,network.host为0.0.0.0,允许网络内任何主机访问。


22
投票

在 Elastic Search 7.0 更新中

/etc/elasticsearch/elasticsearch.yml

network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0

另外:

discovery.seed_hosts: ["0.0.0.0", "[::0]"]

** 更改配置后不要忘记重新启动。如果还是 Elasticsearch 没有重启检查日志

journalctl -xe


19
投票

将config文件夹中的elasticsearch.yml文件重命名为elasticsearch.json并添加:

{
    "network" : {
        "host" : "10.0.0.4"
    }
}

另一种选择是使用 ES_JAVA_OPTS 或作为 elasticsearch 命令的参数从外部提供设置,例如:

$ elasticsearch -Des.network.host=10.0.0.4

另一个选项是设置 es.default。前缀而不是 es。前缀,这意味着只有在配置文件中没有明确设置时才会使用默认设置。

另一种选择是在配置文件中使用

${...}
表示法,它将解析为环境设置,例如:

{
    "network" : {
        "host" : "${ES_NET_HOST}"
    }
}

配置文件的位置可以使用系统属性在外部设置:

$ elasticsearch -Des.config=/path/to/config/file

有关更多信息,请查看 https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html


12
投票

在 /etc/elasticsearch/elasticsearch.yml 中设置以下值:

network.host: [ localhost, _site_ ]

此选项允许您从本地主机和本地网络 (192.168.X.X) 上的所有计算机进行访问,但不能从外部进行访问。
了解有关此选项和其他选项的更多信息,请阅读文档


9
投票

正如 @arsent 提到的,将该 IP 地址添加到配置文件中:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay 还添加了重要的一点 - 如果您使用防火墙,请记住添加一条允许流量流向该端口的规则。

如果您想允许主服务器通过http访问ES,则添加一条规则,仅允许从该特定地址访问。例如,假设您正在使用 ufw,然后运行以下命令来添加您的端口:

sudo ufw allow from xxx.xxx.xxx.xxx to any port zzzz

将 xxx.xxx.xxx.xxx 替换为您的主服务器 IP 地址,并将 zzzz 替换为您在

config/elasticsearch.yml

中配置的端口

建议使用自定义端口,不要保留默认的9200

要测试它,请通过 SSH 连接到主服务器并使用正确的端口 ping ES IP,看看是否收到响应:

curl -X GET 'http://xxx.xxx.xxx.xxx:zzzz'

您还可以通过浏览器尝试来验证其他IP是否无法访问ES。

一篇很棒的文章 展示了如何在 DigitalOcean 上的 Ubuntu 上设置 ES


9
投票

在安装elasticsearch的远程机器上,只需在

/etc/elasticsearch/elasticsearch.yml

中添加以下两个配置即可
network.host: xx.xx.xx.xx #remote elastic machine's internal IP
discovery.type: single-node

在elasticsearch 6.8.3 和 上测试 AWS EC2 Linux AMI 作为远程计算机


5
投票

/etc/elasticsearch/elasticsearch.yml

network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0

4
投票

适用于 ElasticSearch 7.8 及更高版本

检查您是否在单节点上。 添加以下行

cluster.initial_master_nodes: node-1

要从另一台计算机或应用程序访问 Elasticsearch 服务器,请对节点的

C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

进行以下更改

添加以下行

network.host: ["0.0.0.0", 127.0.0.1", "[::1]"]
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.host: 0.0.0.0

有时您可能需要启用 CORS

http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length

这是我的完整 yml 文件

bootstrap.memory_lock: false
cluster.name: elasticsearch
http.port: 9200
node.data: true
node.ingest: true
node.master: true
node.max_local_storage_nodes: 1
cluster.initial_master_nodes: node-1
node.name: ITDEV
path.data: C:\ProgramData\Elastic\Elasticsearch\data
path.logs: C:\ProgramData\Elastic\Elasticsearch\logs
transport.tcp.port: 9300
xpack.license.self_generated.type: basic
xpack.security.enabled: false
network.host: ["0.0.0.0", 127.0.0.1", "[::1]"]
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.host: 0.0.0.0
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length

2
投票

在两个地方将 localhost 替换为 0.0.0.0

  1. 转到

    /etc/elasticsearch/elasticsearch.yml
    。在 network.host 中查找值并将其更改为 0.0.0.0

  2. 如果您使用 Kibana,则这是步骤。转到

    /etc/kibana/kibana.yml
    。在 server.host 中查找值并将其更改为 0.0.0.0

现在您可以使用 IP 地址和主机进行远程访问。


1
投票

config/elasticsearch.yml
中,按照@arsent所说放入
network.host: 0.0.0.0
。 并在防火墙中为您的 ElasticSearch 端口添加入站规则(默认为 9200)。

它在 ElasticSearch 版本 2.3.0 中有效


1
投票

在我的服务器 ubuntu 22.04 中,它需要如下所示:

transport.host: localhost
transport.tcp.port: 9300
http.port: 9200
network.host: 0.0.0.0

0
投票

除了设置

network.host : 0.0.0.0

可能需要设置以下参数

node.name: elasticsearch-node-1

cluster.initial_master_nodes: ["elasticsearch-node-1"]

所有设置进去

elasticsearch/elasticsearch.yml


0
投票

使用 Windows 10 和独立的 Elasticsearch 7,将其放入 elasticsearch.yml 中解决问题:

网络主机:0.0.0.0 discovery.type:单节点


0
投票

我的设置是Windows上的Kibana和Ubuntu上的ES,我无法仅通过更改来访问

network.host

对于 ElasticSearch-7.10-1 以及:

network.host: 0.0.0.0

我还得补充一下

transport.host: localhost

否则,我无法在同一个wifi网络中访问它。

© www.soinside.com 2019 - 2024. All rights reserved.