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


96

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

例如,允许这样的请求:

http://localhost:9200/

但这不是:

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

谢谢你的帮助。


6
这是您正在寻找的答案:stackoverflow.com/questions/33412549/…– 2015
Val

谢谢!这正是我想要的!
亚伯拉罕·杜兰

Answers:


152

config/elasticsearch.yml

network.host: 0.0.0.0

3
network.host:0.0.0.0允许所有本地网络访问此节点。我猜这不建议用于生产模式。
伊森戈(Isengo)'17

1
这意味着所有IP地址都被允许。不安全!
Yavuz

1
我的CentOS系统上的文件中发现/etc/elasticsearch/elasticsearch.yml:与内容network.host: ["0.0.0.0"]
AlikElzin-kilaka

对我不起作用。ES仍在运行127.0.0.1T_T
E.Big

对于那些无法在Windows上找到配置文件的人,请检查C:\ProgramData\Elastic\Elasticsearch\config位置。如果要以编程方式连接到Elasticsearch,则可能需要transport.host: 0.0.0.0elasticsearch.yml文件中进行设置。
kojot

58

默认情况下,http传输和内部elasticsearch传输仅侦听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允许从网络内的任何主机进行访问。


2
我必须显式设置所有这些值,以便能够从VirtualBox主机与弹性客户机进行连接。非常感谢你!
汤姆(Tom)

在Elasticsearch 7.1.0上进行了测试-该解决方案可以很好地连接到VirtualBox上的ES。
DB Prasad

上面给定的配置也可用于弹性搜索版本7.2.0 :-)
dinu0101 '19

2
几乎每个月我都会来这里复制此配置:D
Neelesh

谢谢,这帮助了我很多。我在解决连接异常问题;在elasticsearch.yml文件中添加这些行之后,终于使它工作了
Spencer Trinh,

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


得到:线程“主”中的异常BindTransportException [无法绑定到[9300-9400]];嵌套:ChannelException [无法绑定到:/10.0.0.4:9400]
mountrix

2
我的意思是,这怎么办呢?我们不能只重命名elasticsearch.yml为,elasticsearch.json因为第一个是hmmm,YAML,第二个是JSON??。
Shubham A.

9

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

sudo nano /etc/elasticsearch/elasticsearch.yml

杰伊(Jay)还添加了一个要点-如果您使用的是防火墙,请记住添加一条规则,以允许到该端口的流量。

如果要允许主服务器通过http访问ES,请添加一条规则,仅允许从该特定地址访问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'

您还可以通过使用浏览器尝试验证ES是否可从其他IP访问。

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



7

在安装了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

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地址和主机进行远程访问。


添加下面的命令是很重要的:UFW允许9200和UFW允许5601
何塞T.

1

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

它在ElasticSearch 2.3.0版中有效


1

对于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

令人惊讶的是,这对我不起作用
安迪·杜弗雷斯

0

除了设置 network.host : 0.0.0.0

可能需要设置以下参数

node.name: elasticsearch-node-1

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

所有设置进入 elasticsearch/elasticsearch.yml

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.