Come abilito l'accesso / richiesta remota in Elasticsearch 2.0?


97

A partire dalla v2.0 Elasticsearch è in ascolto solo su localhost per impostazione predefinita, ma mi piacerebbe fare richiesta al di fuori di localhost.

Ad esempio, una richiesta come questa è consentita:

http://localhost:9200/

Ma questo non è:

http://server_name:9200/ (dall'esterno del server, ad esempio: un computer locale nella stessa LAN).

Grazie per l'aiuto.


6
Questa è la risposta che stai cercando: stackoverflow.com/questions/33412549/…
Val

Grazie! Era esattamente quello che stavo cercando!
Abraham Duran

Risposte:


152

In config/elasticsearch.ymlput

network.host: 0.0.0.0

3
network.host: 0.0.0.0 consente a tutte le reti locali di accedere a questo nodo. Questo non è raccomandato per la modalità di produzione immagino.
Isengo

1
significa che tutti gli indirizzi IP sono consentiti. Non sicuro!
Yavuz

1
Il file sul mio sistema CentOS è stato trovato /etc/elasticsearch/elasticsearch.ymle contenuto:network.host: ["0.0.0.0"]
AlikElzin-kilaka

non funziona per me. ES è ancora in esecuzione su 127.0.0.1T_T
E.Big

Per coloro che non riescono a individuare il file di configurazione su Windows, controllare la C:\ProgramData\Elastic\Elasticsearch\configposizione. Se vuoi connetterti in modo programmatico a Elasticsearch potresti dover impostare transport.host: 0.0.0.0in elasticsearch.ymlfile.
kojot

58

Per impostazione predefinita, il trasporto http e il trasporto interno elasticsearch ascoltano solo localhost. Se desideri accedere a Elasticsearch da un host diverso da localhost, prova ad aggiungere le seguenti configurazioni in config / elasticsearch.yml .

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

Qui, network.host come 0.0.0.0 consente l'accesso da qualsiasi host all'interno della rete.


2
Ho dovuto impostare esplicitamente tutti quei valori per essere in grado di connettermi dalla macchina host VirtualBox andare ospite con elastico. Grazie mille!
Tom,

Testato su Elasticsearch 7.1.0: la soluzione funziona correttamente collegandosi a ES su VirtualBox.
DB Prasad

La configurazione sopra indicata funziona anche con la versione di ricerca elastica 7.2.0 :-)
dinu0101

2
Quasi ogni mese vengo qui per copiare questa configurazione: D
Neelesh

grazie questo mi ha aiutato un sacco. Stavo lottando con un problema di eccezione di connessione; e finalmente ha funzionato dopo aver aggiunto queste righe nel elasticsearch.ymlfile
Spencer Trinh

19

Rinomina il file elasticsearch.yml in elasticsearch.json all'interno della cartella di configurazione e aggiungi:

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

Un'altra opzione è fornire le impostazioni esternamente utilizzando ES_JAVA_OPTS o come parametri per il comando elasticsearch, ad esempio:

$ elasticsearch -Des.network.host=10.0.0.4

Un'altra opzione è impostare es.default. prefisso invece di es. prefisso, il che significa che l'impostazione predefinita verrà utilizzata solo se non esplicitamente impostata nel file di configurazione.

Un'altra opzione è usare la ${...}notazione all'interno del file di configurazione che si risolverà in un'impostazione di ambiente, ad esempio:

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

La posizione del file di configurazione può essere impostata esternamente utilizzando una proprietà di sistema:

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

Per maggiori informazioni, visita https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html


Ottenuto: eccezione nel thread "main" BindTransportException [Impossibile eseguire il binding a [9300-9400]]; nidificato: ChannelException [Impossibile eseguire il binding a: /10.0.0.4:9400]
mountrix

2
Come può essere fatto, voglio dire, non possiamo semplicemente rinominare elasticsearch.ymlin elasticsearch.jsonperché il primo, hmmm, YAML e il secondo è JSON??
Shubham A.

9

Come menzionato da @arsent, aggiungi quell'indirizzo ip al file di configurazione:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay ha anche aggiunto un punto importante: se stai utilizzando un firewall, ricordati di aggiungere una regola che consente il traffico verso quella porta.

Se si desidera consentire a un server master di accedere a ES su http, aggiungere una regola che consenta l'accesso solo da quel particolare indirizzo. Ad esempio, supponi di utilizzare ufw, quindi esegui questo comando per aggiungere la tua porta:

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

Sostituisci xxx.xxx.xxx.xxx con l'indirizzo IP del tuo server master e zzzz con la porta che hai configurato config/elasticsearch.yml

Si consiglia di utilizzare una porta personalizzata e di non mantenere la 9200 predefinita

Per testarlo, SSH nel tuo server principale ed esegui il ping dell'IP ES con la porta corretta per vedere se ottieni una risposta:

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

Puoi anche verificare che ES sia inaccessibile da altri IP provandolo con il tuo browser.

C'è un ottimo articolo che mostra come configurare ES su Ubuntu su DigitalOcean



7

Nella macchina remota in cui è installato elasticsearch è sufficiente aggiungere le due configurazioni seguenti in /etc/elasticsearch/elasticsearch.yml

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

Testato su elasticsearch 6.8.3 e AWS EC2 Linux AMI come macchina remota


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

Sostituisci localhost con 0.0.0.0 in due posizioni.

  1. Goto /etc/elasticsearch/elasticsearch.yml. Cerca il valore in network.host e modificalo in 0.0.0.0

  2. Questo è il passaggio se stai usando Kibana. Goto /etc/kibana/kibana.yml. Cerca il valore in server.host e modificalo in 0.0.0.0

Ora accedi da remoto con indirizzo IP e host.


È importante aggiungere i seguenti comandi: ufw allow 9200 e ufw allow 5601
José T.

1

In config/elasticsearch.yml, inserisci network.host: 0.0.0.0come ha detto @arsent. E aggiungi anche la regola in entrata nel firewall per la tua porta ElasticSearch (9200 ByDefault).

Funzionava con ElasticSearch versione 2.3.0


1

Per ElasticSearch 7.8 e versioni successive

Controlla se sei su un singolo nodo. aggiungi la riga seguente

cluster.initial_master_nodes: node-1

Per accedere al server Elasticsearch da un altro computer o applicazione, apportare le seguenti modifiche al file C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Aggiungi le seguenti righe

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

Qualche volta potrebbe essere necessario abilitare 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

Ecco il mio file yml completo

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

A parte l'impostazione network.host : 0.0.0.0

potrebbe essere necessario impostare i seguenti parametri

node.name: elasticsearch-node-1

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

Tutte le impostazioni entrano in gioco elasticsearch/elasticsearch.yml

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.