无法从服务器外部访问 ElasticSearch 实例 - Azure Windows 2012
ElasticSearch instance not reachable from outside the server - Azure Windows 2012
我已将 Elastic Search 2.3.0 设置为带有 Windows Server 2012 R2 的 Azure VM 中的一项服务。我可以使用
从服务器内部访问弹性搜索实例
http://localhost:9200
但我无法从服务器外部访问。
我尝试了什么?
- 为了测试,我已经让 VM 在虚拟网络之外可用。
- 在Windows 防火墙设置中打开端口 9200 作为入站流量规则
- 在 Azure 门户设置中添加了一个端点,开放端口 9200
也用 VM Classic 试过这个。
同样为了测试虚拟机是否正常,我在那台机器上设置了IIS,打开了80端口。默认的IIS页面可以从外部访问。
我唯一没有尝试的是在 Linux VM 中设置 ES。
我在 elasticsearch 日志中找不到任何内容。在浏览器 (Chrome) 上,网络中没有日志。它只是旋转,等待服务器,然后用 "ERR_EMPTY_RESPONSE".
捕捉
做过这件事的任何人都可以解释一下吗?
更新:
这是我在 netstat 中看到的内容:
TCP 127.0.0.1:9200 machine-name:0 LISTENING
TCP 127.0.0.1:9300 machine-name:0 LISTENING
从ES 2.0开始,elasticsearch进程只有binds to localhost,这就解释了为什么只能从ES内部查询,而不能从外部查询。
您需要在 elasticsearch.yml
配置文件中更改以下设置:
network.host: 0.0.0.0
我建议将 network.host 设置为特殊值
例如
network.host: [_local_, _site_]
这对我有用。
请注意,对我来说,只有在设置
后才能成功
http.host: 0.0.0.0
而不是
http.host: "localhost"
我有同样的情况。查看日志
tail -f /var/log/elasticsearch/NODE.log
我看到了这个:
[NODE_NAME] publish_address {10.XXX.XXX.XXX:9300}, bound_addresses {10.XXX.XXX.XXX:9300}
[NODE_NAME] bound or publishing to a non-loopback address, enforcing bootstrap checks
[NODE_NAME] node validation exception
[1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
[NODE_NAME] stopping ...
[NODE_NAME] stopped
解法:
修改发现种子行中的存档/etc/elasticsearch/elasticsearch.yml
:
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
完成。
在 Windows 服务器 2012 上为我解决了 Elasticsearch 7.1.1 在 C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml 中添加以下配置:
http.host: 0.0.0.0
我已将 Elastic Search 2.3.0 设置为带有 Windows Server 2012 R2 的 Azure VM 中的一项服务。我可以使用
从服务器内部访问弹性搜索实例http://localhost:9200
但我无法从服务器外部访问。
我尝试了什么?
- 为了测试,我已经让 VM 在虚拟网络之外可用。
- 在Windows 防火墙设置中打开端口 9200 作为入站流量规则
- 在 Azure 门户设置中添加了一个端点,开放端口 9200
也用 VM Classic 试过这个。
同样为了测试虚拟机是否正常,我在那台机器上设置了IIS,打开了80端口。默认的IIS页面可以从外部访问。
我唯一没有尝试的是在 Linux VM 中设置 ES。
我在 elasticsearch 日志中找不到任何内容。在浏览器 (Chrome) 上,网络中没有日志。它只是旋转,等待服务器,然后用 "ERR_EMPTY_RESPONSE".
捕捉做过这件事的任何人都可以解释一下吗?
更新: 这是我在 netstat 中看到的内容:
TCP 127.0.0.1:9200 machine-name:0 LISTENING
TCP 127.0.0.1:9300 machine-name:0 LISTENING
从ES 2.0开始,elasticsearch进程只有binds to localhost,这就解释了为什么只能从ES内部查询,而不能从外部查询。
您需要在 elasticsearch.yml
配置文件中更改以下设置:
network.host: 0.0.0.0
我建议将 network.host 设置为特殊值
例如
network.host: [_local_, _site_]
这对我有用。
请注意,对我来说,只有在设置
后才能成功http.host: 0.0.0.0
而不是
http.host: "localhost"
我有同样的情况。查看日志
tail -f /var/log/elasticsearch/NODE.log
我看到了这个:
[NODE_NAME] publish_address {10.XXX.XXX.XXX:9300}, bound_addresses {10.XXX.XXX.XXX:9300}
[NODE_NAME] bound or publishing to a non-loopback address, enforcing bootstrap checks
[NODE_NAME] node validation exception
[1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
[NODE_NAME] stopping ...
[NODE_NAME] stopped
解法:
修改发现种子行中的存档/etc/elasticsearch/elasticsearch.yml
:
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
完成。
在 Windows 服务器 2012 上为我解决了 Elasticsearch 7.1.1 在 C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml 中添加以下配置:
http.host: 0.0.0.0