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

Abr*_*ran 73 elasticsearch

从v2.0开始,Elasticsearch默认只在localhost上侦听,但我想在localhost之外发出请求.

例如,允许这样的请求:

http://localhost:9200/

但这不是:

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

谢谢你的帮助.

ars*_*ent 133

config/elasticsearch.yml投入

network.host: 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

  • 我的 CentOS 系统上的文件在 `/etc/elasticsearch/elasticsearch.yml` 中找到,内容为:`network.host: ["0.0.0.0"]` (5认同)
  • network.host:0.0.0.0允许所有本地网络访问此节点.我猜这不建议用于生产模式. (2认同)
  • 这意味着所有 IP 地址都被允许。不安全! (2认同)
  • 这导致我无法在 ubuntu 上重新启动 elasticsearch 服务,因此它没有解决我的问题。 (2认同)

AKs*_*AKs 33

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

transport.host: localhost 
transport.tcp.port: 9300 
http.port: 9200
network.host: 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

这里,network.host为0.0.0.0允许从网络中的任何主机进行访问.

  • 我必须显式设置所有这些值,以便能够从VirtualBox主机与弹性客户机进行连接。非常感谢你! (2认同)
  • 几乎每个月我都会来这里复制这个配置:D (2认同)

小智 18

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

{
    "network" : {
        "host" : "10.0.0.4"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

$ elasticsearch -Des.network.host=10.0.0.4

另一种选择是设置es.default.前缀而不是es.prefix,表示只有在配置文件中未明确设置时才会使用默认设置.

另一种选择是使用${...}配置文件中的符号来解析环境设置,例如:

{
    "network" : {
        "host" : "${ES_NET_HOST}"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我的意思是怎么做到的,我们不能只将“ elasticsearch.yml”重命名为“ elasticsearch.json”,因为第一个,hmmm,YAML和第二个是“ JSON”? (2认同)

Men*_*tor 10

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

network.host: [ localhost, _site_ ]

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


Ani*_*esh 7

在安装了elasticsearch的远程机器上只需添加以下两个配置 /etc/elasticsearch/elasticsearch.yml

network.host: xx.xx.xx.xx #remote elastic machine's internal IP
discovery.type: single-node
Run Code Online (Sandbox Code Playgroud)

在作为远程机器的 elasticsearch 6.8.3 和 AWS EC2 Linux AMI 上进行测试


Ben*_*Ben 6

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

sudo nano /etc/elasticsearch/elasticsearch.yml
Run Code Online (Sandbox Code Playgroud)

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

如果要允许主服务器通过http访问ES,则添加允许仅从该特定地址访问的规则.例如,假设您使用的是ufw,则运行此命令以添加您的端口:

sudo ufw allow from xxx.xxx.xxx.xxx to any port zzzz
Run Code Online (Sandbox Code Playgroud)

将xxx.xxx.xxx.xxx替换为您的主服务器IP地址,将zzzz替换为您配置的端口 config/elasticsearch.yml

建议使用自定义端口,而不是保留默认值9200

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

curl -X GET 'http://xxx.xxx.xxx.xxx:zzzz'
Run Code Online (Sandbox Code Playgroud)

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

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


Moh*_*eed 6

在 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
Run Code Online (Sandbox Code Playgroud)

此外:

discovery.seed_hosts: ["0.0.0.0", "[::0]"]
Run Code Online (Sandbox Code Playgroud)

** 更改配置后不要忘记重新启动。如果仍然没有重新启动弹性搜索检查日志journalctl -xe


小智 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
Run Code Online (Sandbox Code Playgroud)