Як увімкнути віддалений доступ / запит у Elasticsearch 2.0?


96

Починаючи з версії 2.0 Elasticsearch за замовчуванням слухає лише на localhost, але я хотів би зробити запит за межами localhost.

Наприклад, такий запит дозволено:

http://localhost:9200/

Але це не так:

http://server_name:9200/ (ззовні сервера, наприклад: локальний комп’ютер у тій же локальній мережі).

Спасибі за вашу допомогу.


6
Це відповідь, яку ви шукаєте: stackoverflow.com/questions/33412549/…
Вал

Дякую! Це було саме те, що я шукав!
Авраам Дюран,

Відповіді:


152

У config/elasticsearch.ymlсайті

network.host: 0.0.0.0

3
network.host: 0.0.0.0 дозволяє всім локальним мережам отримати доступ до цього вузла. Це не рекомендується для виробничого режиму, я думаю.
Isengo

1
це означає, що всі ip-адреси дозволені. Не безпечно!
Явуз

1
Файл у моїй системі CentOS був знайдений у /etc/elasticsearch/elasticsearch.ymlта вмісті:network.host: ["0.0.0.0"]
AlikElzin-kilaka

не працює для мене. ES все ще працює 127.0.0.1T_T
E. Великий

Для тих, хто не може знайти файл конфігурації в Windows, перевірте C:\ProgramData\Elastic\Elasticsearch\configрозташування. Якщо ви хочете підключити програмно Elasticsearch вам може знадобитися встановити transport.host: 0.0.0.0в elasticsearch.ymlфайлі.
kojot

58

За замовчуванням http-транспорт і внутрішній еластичний пошуковий транспорт слухає лише localhost. Якщо ви хочете отримати доступ до Elasticsearch з хоста, відмінного від localhost, спробуйте додати наступні конфігурації в config / elasticsearch.yml .

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

Тут network.host як 0.0.0.0 надає доступ з будь-якого хоста в мережі.


2
Мені довелося явно встановити всі ці значення для можливості підключення з хост-машини VirtualBox go guest з еластичним. Дуже дякую!
Том,

Протестовано на Elasticsearch 7.1.0 - рішення чудово працює, підключаючись до ES на VirtualBox.
DB Prasad

Вище вказана конфігурація також працює з версією еластичного пошуку 7.2.0 :-)
dinu0101

2
Майже щомісяця я приходжу сюди, щоб скопіювати цю конфігурацію: D
Ніліш

дякую, це допомогло мені на тонну. Я боровся з проблемою винятку підключення; і нарешті змусив його працювати після додавання цих рядків у elasticsearch.ymlфайл
Спенсер Трін,

19

Перейменуйте файл elasticsearch.yml на elasticsearch.json всередині папки конфігурації та додайте:

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

Іншим варіантом є надання налаштувань зовні або за допомогою ES_JAVA_OPTS, або як параметри команди elasticsearch, наприклад:

$ elasticsearch -Des.network.host=10.0.0.4

Інший варіант - встановити es.default. префікс замість es. префікс, що означає, що параметр за замовчуванням використовуватиметься лише в тому випадку, якщо це явно не встановлено у файлі конфігурації.

Іншим варіантом є використання ${...}позначення у файлі конфігурації, яке перетвориться на налаштування середовища, наприклад:

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

Розташування файлу конфігурації можна встановити зовні, використовуючи системну властивість:

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

Для отримання додаткової інформації відвідайте https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html


Отримано: виняток у потоці "main" BindTransportException [Не вдалося прив'язати до [9300-9400]]; вкладений: ChannelException [Не вдалося прив’язати до: /10.0.0.4:9400]
mountrix

2
Як це можна зробити, я маю на увазі, ми не можемо просто перейменувати elasticsearch.ymlна, elasticsearch.jsonтому що перший, мммм, YAML, а другий - це JSON??
Шубхем А.

9

Як згадував @arsent, додайте цю ip-адресу до конфігураційного файлу:

sudo nano /etc/elasticsearch/elasticsearch.yml

Джей також додав важливий момент - якщо ви використовуєте брандмауер, не забудьте додати правило, що дозволяє трафік до цього порту.

Якщо ви хочете дозволити головному серверу отримувати доступ до ES через http, додайте правило, що дозволяє доступ лише до цієї конкретної адреси. Наприклад, скажімо, що ви використовуєте ufw, а потім виконайте цю команду, щоб додати свій порт:

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

Замініть xxx.xxx.xxx.xxx на IP-адресу головного сервера, а zzzz на порт, який ви налаштували в config/elasticsearch.yml

Рекомендується використовувати спеціальний порт і не зберігати стандартний 9200

Щоб протестувати його, вставте SSH на ваш головний сервер і відправте пінг ES ip з правильним портом, щоб побачити, чи отримаєте ви відповідь:

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

Ви також можете переконатися, що ES недоступний з інших IP-адрес, спробувавши його за допомогою браузера.

Є чудова стаття, яка показує, як налаштувати ES на Ubuntu на DigitalOcean


7

В /etc/elasticsearch/elasticsearch.yml встановіть таке значення:

network.host: [ localhost, _site_ ]

Цей параметр дозволяє отримати доступ як з локального хосту, так і з усіх комп’ютерів у локальній мережі (192.168.XX), але не ззовні.
Детальніше про цей та інші варіанти читайте в документації


7

У віддаленій машині, де встановлений еластичний пошук, просто додайте дві конфігурації нижче /etc/elasticsearch/elasticsearch.yml

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

Протестовано на еластичному пошуку 6.8.3 та AWS EC2 Linux AMI як віддалений апарат



2

Замініть localhost на 0.0.0.0 у двох місцях.

  1. Йти до /etc/elasticsearch/elasticsearch.yml . Шукайте значення в network.host і змініть його на 0.0.0.0

  2. Це крок, якщо ви використовуєте Kibana. Йти до/etc/kibana/kibana.yml . Шукайте значення в server.host і змініть його на 0.0.0.0

Тепер ви отримуєте доступ до віддаленого доступу за допомогою IP-адреси та хосту.


Важливо додати такі команди: ufw allow 9200 і ufw allow 5601
José T.

1

В config/elasticsearch.yml, покластиnetwork.host: 0.0.0.0 як сказав @arsent. А також додайте правило вхідного сигналу в брандмауер для вашого порту ElasticSearch (9200 за замовчуванням).

Це працювало в ElasticSearch версії 2.3.0


1

Для ElasticSearch 7.8 та новіших версій

Перевірте, чи перебуваєте ви на одному вузлі. додати наступний рядок

cluster.initial_master_nodes: node-1

Щоб отримати доступ до сервера Elasticsearch з іншого комп’ютера або програми, внесіть наступні зміни до вузла C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Додайте наступні рядки

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

Деякий час вам може знадобитися Увімкнути 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

Ось мій повний файл yml

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

Окрім налаштування network.host : 0.0.0.0

може знадобитися встановити наступні параметри

node.name: elasticsearch-node-1

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

Усі налаштування входять elasticsearch/elasticsearch.yml

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.