Ab Version 2.0 hört Elasticsearch standardmäßig nur auf localhost, aber ich möchte außerhalb von localhost eine Anfrage stellen.
Zum Beispiel ist eine Anfrage wie diese erlaubt:
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.
In config/elasticsearch.yml
setzen
network.Host: 0.0.0.0
HTTP-Transport und interner Elasticsearch-Transport überwacht standardmäßig nur localhost . Wenn Sie auf Elasticsearch vom Host außer localhost zugreifen möchten, fügen Sie folgende Konfigurationen in config/elasticsearch.yml hinzu.
transport.Host: localhost
transport.tcp.port: 9300
http.port: 9200
network.Host: 0.0.0.0
Hier erlaubt network.Host als 0.0.0.0 den Zugriff von jedem Host innerhalb des Netzwerks.
Benennen Sie die elasticsearch.yml-Datei im Konfigurationsordner in elasticsearch.json um und fügen Sie Folgendes hinzu:
{
"network" : {
"Host" : "10.0.0.4"
}
}
Eine weitere Option besteht darin, die Einstellungen extern bereitzustellen, entweder mit ES_Java_OPTS oder als Parameter für den Befehl elasticsearch. 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. 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/de/elasticsearch/reference/1.4/setup-configuration.html
Wie bei @arsent erwähnt, fügen Sie diese IP-Adresse zur Konfigurationsdatei hinzu:
Sudo nano /etc/elasticsearch/elasticsearch.yml
Jay fügte auch einen wichtigen Punkt hinzu: Wenn Sie eine Firewall verwenden, müssen Sie eine Regel hinzufügen, die den Verkehr zu diesem Port zulässt.
Wenn Sie einem Masterserver den Zugriff auf ES über http erlauben möchten, fügen Sie eine Regel hinzu, die den Zugriff nur von dieser bestimmten Adresse zulässt. Angenommen, Sie verwenden ufw. Führen Sie dann den folgenden 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 die IP-Adresse Ihres Masterservers und zzzz durch den in config/elasticsearch.yml
konfigurierten Port.
Es wird empfohlen, einen benutzerdefinierten Port zu verwenden und den Standard 9200 nicht beizubehalten
Um dies zu testen, setzen Sie SSH in Ihren Masterserver und pingen Sie die ES-IP mit dem richtigen Port an, um zu sehen, ob Sie eine Antwort erhalten:
curl -X GET 'http://xxx.xxx.xxx.xxx:zzzz'
Sie können auch sicherstellen, dass auf ES nicht von anderen IPs aus zugegriffen werden kann, indem Sie es mit Ihrem Browser versuchen.
Es gibt ein hervorragender Artikel der zeigt, wie Sie ES auf Ubuntu auf DigitalOcean einrichten
Im /etc/elasticsearch/elasticsearch.yml
:
network.Host: 0.0.0.0
network.bind_Host: 0.0.0.0
network.publish_Host: 0.0.0.0
Stellen Sie in /etc/elasticsearch/elasticsearch.yml den folgenden Wert ein:
network.Host: [ localhost, _site_ ]
Mit dieser Option können Sie sowohl vom lokalen Host als auch von allen Computern im lokalen Netzwerk (192.168.X.X) aus zugreifen, jedoch nicht von außen.
Lesen Sie mehr über diese und andere Optionen, lesen Sie die Dokumentation
Ersetzen Sie localhost an zwei Stellen durch .0.0..
Gehe zu /etc/elasticsearch/elasticsearch.yml
. Suchen Sie nach dem Wert in network.Host und ändern Sie ihn in .0.0.
Dies ist ein Schritt, wenn Sie Kibana verwenden. Gehe zu /etc/kibana/kibana.yml
. Suchen Sie nach dem Wert in server.Host und ändern Sie ihn in .0.0.
Jetzt greifen Sie mit IP-Adresse und Host über Fernzugriff zu.
Fügen Sie in config/elasticsearch.yml network.Host: 0.0.0.0, wie @arsent sagte, hinzu, und fügen Sie der Firewall für Ihren ElasticSearch-Port (9200 ByDefault) ..__ eine eingehende Regel hinzu