Как включить удаленный доступ / запрос в Elasticsearch 2.0?


97

Начиная с версии 2.0 Elasticsearch по умолчанию прослушивает только локальный хост, но я хотел бы сделать запрос за пределами локального хоста.

Например, разрешен такой запрос:

http://localhost:9200/

Но это не так:

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

Спасибо за вашу помощь.


6
Вот ответ, который вы ищете: stackoverflow.com/questions/33412549/…
Val

Благодарность! Это было именно то, что я искал!
Abraham Duran

Ответы:


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"]
содержал

у меня не работает. ES все еще работает на 127.0.0.1T_T
E.Big

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

59

По умолчанию транспорт http и внутренний транспорт elasticsearch слушают только 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 в гостевом режиме с эластичными. Большое спасибо!
Tom

Протестировано на Elasticsearch 7.1.0 - решения отлично работают при подключении к ES на VirtualBox.
DB Prasad


2
Почти каждый месяц я прихожу сюда, чтобы скопировать эту конфигурацию: D
Нилеш

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

19

Переименуйте файл elasticsearch.yml в elasticsearch.json внутри папки config и добавьте:

{
    "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 к вашему главному серверу и пропингуйте IP-адрес ES с правильным портом, чтобы увидеть, получите ли вы ответ:

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

На удаленном компьютере, где установлен elasticsearch, просто добавьте две конфигурации ниже в /etc/elasticsearch/elasticsearch.yml

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

Протестировано на elasticsearch 6.8.3 и AWS EC2 Linux AMI в качестве удаленного компьютера



2

Замените localhost на 0.0.0.0 в двух местах.

  1. Goto /etc/elasticsearch/elasticsearch.yml. Найдите значение в network.host и измените его на 0.0.0.0

  2. Это шаг, если вы используете Kibana. Goto /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 ByDefault).

Он работал в 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.