Wie aktiviere ich den Fernzugriff / die Anforderung in Elasticsearch 2.0?


93

Ab Version 2.0 hört Elasticsearch standardmäßig nur noch localhost ab, aber ich möchte eine Anfrage außerhalb von localhost stellen.

Eine solche Anfrage ist beispielsweise zulässig:

http://localhost:9200/

Das ist aber nicht:

http://server_name:9200/ (von außerhalb des Servers, z. B. ein lokaler Computer im selben LAN).

Danke für Ihre Hilfe.


6
Dies ist die Antwort, die Sie suchen: stackoverflow.com/questions/33412549/…
Val

Vielen Dank! Es war genau das, wonach ich gesucht habe!
Abraham Duran

Antworten:


150

In config/elasticsearch.ymlput

network.host: 0.0.0.0

3
network.host: 0.0.0.0 ermöglicht allen lokalen Netzwerken den Zugriff auf diesen Knoten. Dies wird für den Produktionsmodus nicht empfohlen, denke ich.
Isengo

1
Dies bedeutet, dass alle IP-Adressen zulässig sind. Nicht sicher!
Yavuz

1
Die Datei auf meinem CentOS-System wurde gefunden in /etc/elasticsearch/elasticsearch.ymlund Inhalt:network.host: ["0.0.0.0"]
AlikElzin-kilaka

funktioniert bei mir nicht ES läuft noch am 127.0.0.1T_T
E.Big

Für diejenigen, die die Konfigurationsdatei unter Windows nicht finden können, überprüfen Sie bitte den C:\ProgramData\Elastic\Elasticsearch\configSpeicherort. Wenn Sie programmatisch Elasticsearch verbinden möchten müssen Sie festlegen , transport.host: 0.0.0.0in elasticsearch.ymlDatei.
Kojot

50

Standardmäßig hört der HTTP-Transport und der interne Elasticsearch-Transport nur auf localhost. Wenn Sie von einem anderen Host als localhost auf Elasticsearch zugreifen möchten, fügen Sie die folgenden Konfigurationen in config / elasticsearch.yml hinzu .

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

Hier ermöglicht network.host als 0.0.0.0 den Zugriff von jedem Host innerhalb des Netzwerks.


2
Ich musste alle diese Werte explizit so einstellen, dass eine Verbindung von einem VirtualBox-Hostcomputer hergestellt werden kann. Vielen Dank!
Tom

Getestet mit Elasticsearch 7.1.0 - Die Lösung funktioniert einwandfrei mit ES auf VirtualBox.
DB Prasad

Die oben angegebene Konfiguration funktioniert auch mit der elastischen Suchversion 7.2.0 :-)
dinu0101

2
Fast jeden Monat komme ich hierher, um diese Konfiguration zu kopieren: D
Neelesh

Danke, das hat mir sehr geholfen. Ich hatte Probleme mit einer Verbindungsausnahme. und schließlich funktionierte es, nachdem diese Zeilen in die elasticsearch.ymlDatei aufgenommen wurden
Spencer Trinh

19

Benennen Sie die Datei elasticsearch.yml im Konfigurationsordner in elasticsearch.json um und fügen Sie Folgendes hinzu:

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

Eine andere Möglichkeit besteht darin, die Einstellungen extern entweder mit ES_JAVA_OPTS oder als Parameter für den Befehl elasticsearch bereitzustellen, zum Beispiel:

$ elasticsearch -Des.network.host=10.0.0.4

Eine weitere Option ist das Festlegen von es.default. Präfix statt es. Präfix, dh die Standardeinstellung wird nur verwendet, wenn sie nicht explizit in der Konfigurationsdatei festgelegt ist.

Eine andere Option ist die Verwendung der ${...}Notation in der Konfigurationsdatei, die in eine Umgebungseinstellung aufgelöst wird, zum Beispiel:

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

Der Speicherort der Konfigurationsdatei kann mithilfe einer Systemeigenschaft extern festgelegt werden:

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

Weitere Informationen finden Sie unter https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html


Erhalten: Ausnahme im Thread "main" BindTransportException [Fehler beim Binden an [9300-9400]]; verschachtelt: ChannelException [Fehler beim Binden an: /10.0.0.4:9400]
mountrix

2
Wie kann das gemacht werden, ich meine, wir können nicht einfach umbenennen elasticsearch.yml, elasticsearch.jsonweil der erste, hmmm, YAML und der zweite ist JSON?
Shubham A.

9

Wie @arsent erwähnt, fügen Sie diese IP-Adresse zur Konfigurationsdatei hinzu:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay hat auch einen wichtigen Punkt hinzugefügt: Wenn Sie eine Firewall verwenden, müssen Sie eine Regel hinzufügen, die den Datenverkehr zu diesem Port zulässt.

Wenn Sie einem Master-Server erlauben möchten, über http auf ES zuzugreifen, fügen Sie eine Regel hinzu, die den Zugriff nur von dieser bestimmten Adresse aus erlaubt. Angenommen, Sie verwenden ufw, und führen Sie diesen Befehl aus, um Ihren Port hinzuzufügen:

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

Ersetzen Sie xxx.xxx.xxx.xxx durch Ihre Master-Server-IP-Adresse und zzzz durch den Port, in dem Sie konfiguriert haben config/elasticsearch.yml

Es wird empfohlen, einen benutzerdefinierten Port zu verwenden und den Standard 9200 nicht beizubehalten

Um es zu testen, SSH in Ihren Master-Server und pingen Sie die ES-IP mit dem richtigen Port, um zu sehen, ob Sie eine Antwort erhalten:

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

Sie können auch überprüfen, ob auf ES von anderen IP-Adressen aus nicht zugegriffen werden kann, indem Sie es mit Ihrem Browser versuchen.

Es gibt einen ausgezeichneten Artikel , der zeigt, wie man ES unter Ubuntu auf DigitalOcean einrichtet



7

Fügen Sie auf dem Remote-Computer, auf dem elasticsearch installiert ist, einfach die folgenden zwei Konfigurationen hinzu /etc/elasticsearch/elasticsearch.yml

network.host: xx.xx.xx.xx #remote elastic machine's internal IP
discovery.type: single-node

Getestet auf elasticsearch 6.8.3 und AWS EC2 Linux AMI als Remote-Maschine


5

In /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

Ersetzen Sie localhost an zwei Stellen durch 0.0.0.0 .

  1. Gehe zu /etc/elasticsearch/elasticsearch.yml. Suchen Sie in network.host nach einem Wert und ändern Sie ihn in 0.0.0.0

  2. Dies ist ein Schritt, wenn Sie Kibana verwenden. Gehe zu /etc/kibana/kibana.yml. Suchen Sie in server.host nach einem Wert und ändern Sie ihn in 0.0.0.0

Jetzt greifen Sie mit IP-Adresse und Host auf den Remotezugriff zu.


Es ist wichtig, die folgenden Befehle hinzuzufügen: ufw allow 9200 und ufw allow 5601
José T.

1

In config/elasticsearch.ymllegte network.host: 0.0.0.0als @arsent sagte. Fügen Sie außerdem eine eingehende Regel in der Firewall für Ihren ElasticSearch-Port (9200 ByDefault) hinzu.

Es funktionierte in ElasticSearch Version 2.3.0


0

Abgesehen von der Einstellung network.host : 0.0.0.0

Möglicherweise müssen folgende Parameter festgelegt werden

node.name: elasticsearch-node-1

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

Alle Einstellungen gehen rein elasticsearch/elasticsearch.yml


0

Für ElasticSearch 7.8 und höher

Überprüfen Sie, ob Sie sich auf einem einzelnen Knoten befinden. Fügen Sie die folgende Zeile hinzu

cluster.initial_master_nodes: node-1

Nehmen Sie die folgenden Änderungen am Knoten vor, um von einem anderen Computer oder einer anderen Anwendung auf den Elasticsearch-Server zuzugreifen C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Fügen Sie die folgenden Zeilen hinzu

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

Einige Zeit müssen Sie möglicherweise CORS aktivieren

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

Hier ist meine vollständige yml-Datei

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.