Bagaimana cara mengaktifkan akses / permintaan jarak jauh di Elasticsearch 2.0?


97

Mulai dari v2.0, Elasticsearch secara default hanya mendengarkan di localhost, tetapi saya ingin membuat permintaan di luar localhost.

Misalnya, permintaan seperti ini diperbolehkan:

http://localhost:9200/

Tapi ini bukan:

http://server_name:9200/ (dari luar server, misalnya: komputer lokal di LAN yang sama).

Terima kasih atas bantuan Anda.


6
Ini adalah jawaban yang Anda cari: stackoverflow.com/questions/33412549/…
Val

Terima kasih! Itu persis seperti yang saya cari!
Abraham Duran

Jawaban:


152

In config/elasticsearch.ymlput

network.host: 0.0.0.0

3
network.host: 0.0.0.0 memungkinkan semua jaringan lokal untuk mengakses node ini. Kurasa ini tidak disarankan untuk mode produksi.
Isengo

1
itu berarti semua alamat ip diperbolehkan. Tidak aman!
Yavuz

1
File di sistem CentOS saya ditemukan di /etc/elasticsearch/elasticsearch.ymldan isinya:network.host: ["0.0.0.0"]
AlikElzin-kilaka

tidak bekerja untuk saya. ES masih berjalan pada 127.0.0.1T_T
E. Big

Bagi mereka yang tidak dapat menemukan file konfigurasi di Windows, silakan periksa C:\ProgramData\Elastic\Elasticsearch\configlokasinya. Jika Anda ingin menyambung secara terprogram ke Elasticsearch, Anda mungkin perlu menyetelnya transport.host: 0.0.0.0di elasticsearch.ymlfile.
kojot

59

Secara default transport http dan transport elasticsearch internal hanya mendengarkan localhost. Jika Anda ingin mengakses Elasticsearch dari host selain localhost, coba tambahkan konfigurasi berikut di config / elasticsearch.yml .

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

Di sini, network.host sebagai 0.0.0.0 memungkinkan akses dari sembarang host dalam jaringan.


2
Saya harus secara eksplisit mengatur semua nilai itu untuk dapat terhubung dari mesin host VirtualBox menjadi tamu dengan elastis. Terima kasih banyak!
Tom

Diuji di Elasticsearch 7.1.0 - solusi berfungsi dengan baik saat menyambungkan ke ES di VirtualBox.
DB Prasad

Konfigurasi yang diberikan di atas juga berfungsi dengan pencarian elastis versi 7.2.0 :-)
dinu0101

2
Hampir setiap bulan saya datang ke sini untuk menyalin konfigurasi ini: D
Neelesh

terima kasih ini membantu saya satu ton. Saya berjuang dengan masalah pengecualian koneksi; dan akhirnya berhasil setelah menambahkan baris-baris ini dalam elasticsearch.ymlfile
Spencer Trinh

19

Ubah nama file elasticsearch.yml menjadi elasticsearch.json di dalam folder config dan tambahkan:

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

Pilihan lainnya adalah memberikan pengaturan secara eksternal baik menggunakan ES_JAVA_OPTS atau sebagai parameter ke perintah elasticsearch, misalnya:

$ elasticsearch -Des.network.host=10.0.0.4

Pilihan lainnya adalah mengatur es.default. awalan, bukan es. prefix, yang berarti setelan default hanya akan digunakan jika tidak disetel secara eksplisit di file konfigurasi.

Pilihan lainnya adalah dengan menggunakan ${...}notasi dalam file konfigurasi yang akan menghasilkan pengaturan lingkungan, misalnya:

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

Lokasi file konfigurasi dapat disetel secara eksternal menggunakan properti sistem:

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

Untuk info lebih lanjut, lihat https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html


Mendapat: Pengecualian dalam utas "main" BindTransportException [Gagal mengikat ke [9300-9400]]; bersarang: ChannelException [Gagal mengikat ke: /10.0.0.4:9400]
mountrix

2
Bagaimana ini bisa dilakukan, maksud saya, kita tidak bisa begitu saja mengganti nama elasticsearch.ymlmenjadi elasticsearch.jsonkarena yang pertama, hmmm, YAML dan yang kedua adalah JSON??
Shubham A.

9

Seperti yang disebutkan @arsent, tambahkan alamat ip itu ke file konfigurasi:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay juga menambahkan poin penting - jika Anda menggunakan firewall, ingatlah untuk menambahkan aturan yang mengizinkan lalu lintas ke port tersebut.

Jika Anda ingin mengizinkan server master mengakses ES melalui http, tambahkan aturan yang hanya mengizinkan akses dari alamat tertentu itu. Misalnya, Anda menggunakan ufw, lalu jalankan perintah ini untuk menambahkan port Anda:

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

Ganti xxx.xxx.xxx.xxx dengan alamat IP server master Anda dan zzzz dengan port yang Anda konfigurasikan config/elasticsearch.yml

Direkomendasikan untuk menggunakan port kustom dan tidak menyimpan default 9200

Untuk mengujinya, SSH ke server master Anda dan ping ip ES dengan port yang benar untuk melihat apakah Anda mendapatkan respons:

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

Anda juga dapat memverifikasi ES tidak dapat diakses dari IP lain dengan mencobanya menggunakan browser Anda.

Ada artikel bagus yang menunjukkan cara mengatur ES di Ubuntu di DigitalOcean



7

Di mesin jarak jauh tempat elasticsearch diinstal, tambahkan saja dua konfigurasi di bawah ini /etc/elasticsearch/elasticsearch.yml

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

Diuji di elasticsearch 6.8.3 dan AMI Linux AWS EC2 sebagai mesin jarak jauh


5

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

Ganti localhost dengan 0.0.0.0 di dua tempat.

  1. Pergi /etc/elasticsearch/elasticsearch.yml. Cari nilai di network.host dan ubah ke 0.0.0.0

  2. Ini adalah langkah jika Anda menggunakan Kibana. Pergi /etc/kibana/kibana.yml. Cari nilai di server.host dan ubah ke 0.0.0.0

Sekarang Anda mengakses akses jarak jauh dengan alamat IP dan host.


Penting untuk menambahkan perintah berikut: ufw allow 9200 dan ufw allow 5601
José T.19

1

Masuk config/elasticsearch.yml, masukkan network.host: 0.0.0.0sebagai kata @arsent. Dan juga tambahkan Aturan Masuk di firewall untuk port ElasticSearch (9200 ByDefault).

Ini bekerja di ElasticSearch versi 2.3.0


1

Untuk ElasticSearch 7.8 dan yang lebih baru

Periksa apakah Anda berada di satu node. tambahkan baris berikut

cluster.initial_master_nodes: node-1

Untuk mengakses server Elasticsearch dari komputer atau aplikasi lain, lakukan perubahan berikut pada node C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Tambahkan baris berikut

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

Suatu saat Anda mungkin perlu Mengaktifkan 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

Ini file yml lengkap saya

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

Selain pengaturan network.host : 0.0.0.0

mungkin perlu menyetel parameter berikut

node.name: elasticsearch-node-1

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

Semua pengaturan masuk elasticsearch/elasticsearch.yml

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.