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

时间:2015-11-13 16:04:34

标签: elasticsearch

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

例如,允许这样的请求:

http://localhost:9200/

但这不是:

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

感谢您的帮助。

14 个答案:

答案 0 :(得分:129)

config/elasticsearch.yml put

network.host: 0.0.0.0

答案 1 :(得分:21)

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

答案 2 :(得分:18)

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

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

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

$ elasticsearch -Des.network.host=10.0.0.4

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

另一种选择是在配置文件中使用${...}表示法,该表示法将解析为环境设置,例如:

{
    "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

答案 3 :(得分:5)

正如@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。

an excellent article显示如何在DigitalOcean上的Ubuntu上设置ES

答案 4 :(得分:5)

在 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]"]

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

答案 5 :(得分:1)

/etc/elasticsearch/elasticsearch.yml

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

答案 6 :(得分:1)

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

network.host: [ localhost, _site_ ]

此选项允许您从本地主机和本地网络(192.168.X.X)上的所有计算机进行访问,但不能从外部进行访问。
Read more about this and other options read the documentation

答案 7 :(得分:1)

在两个地方用 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地址和主机访问远程访问。

答案 8 :(得分:1)

在装有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作为远程计算机

答案 9 :(得分: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

答案 10 :(得分:0)

在config / elasticsearch.yml中,将network.host:0.0.0.0作为@arsent说。 并在防火墙中为您的ElasticSearch端口添加入站规则(9200 ByDefault)。 它适用于ElasticSearch版本2.3.0

答案 11 :(得分:0)

除了设置network.host : 0.0.0.0

可能需要设置以下参数

node.name: elasticsearch-node-1

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

所有设置都进入elasticsearch/elasticsearch.yml

答案 12 :(得分:0)

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

network.host:0.0.0.0 Discovery.type:单节点

答案 13 :(得分:0)

我的设置是 Kibana On windows 和 ES on Ubuntu,仅更改 network.host 无法访问

对于 ElasticSearch-7.10-1 连同:

network.host: 0.0.0.0

我还必须添加

transport.host: localhost

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