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


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

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

http://localhost:9200/

но это не так:

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

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

6 55

6 ответов:

на config/elasticsearch.yml put

network.host: 0.0.0.0

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

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

другой вариант - предоставить настройки извне либо с помощью ES_JAVA_OPTS, либо в качестве параметров для команды elasticsearch, например:

$ elasticsearch -Des.network.host=10.0.0.4

другой вариант-установить es.по умолчанию. префикс вместо 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

по умолчанию транспорт http и внутренний транспорт elasticsearch слушает только localhost. Если вы хотите получить доступ к Elasticsearch с хоста, отличного от localhost, попробуйте добавить следующие конфигурации в config / elasticsearch.в формате YML.

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

здесь сети.хоста 0.0.0.0 разрешить доступ с любого хоста в сети.

как упоминал @arsent, добавьте этот ip-адрес в файл конфигурации:

sudo nano /etc/elasticsearch/elasticsearch.yml

Джей и добавил важный момент - если вы используете фаервол, не забудьте добавить правило, разрешающее трафик на этот порт.

если вы хотите разрешить главному серверу доступ к ES через http, добавьте правило, разрешающее доступ только с этого конкретного адреса. Например, предположим, что вы используете ufw, а затем выполните эту команду, чтобы добавить свой порт:

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

замените ХХХ.ХХХ.ХХХ.ХХХ с ваш IP-адрес главного сервера и zzzz с портом, который вы настроили в config/elasticsearch.yml

рекомендуется использовать пользовательский порт и не сохранять значение по умолчанию 9200

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

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

вы также можете проверить, что ES недоступен с других IP-адресов, попробовав его с помощью браузера.

здесь отличная статья это показывает, как настроить ES на Ubuntu на DigitalOcean

на /etc/elasticsearch/elasticsearch.yml:

network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0

в config / elasticsearch.в формате YML, сеть выложить.ведущий: 0.0.0.0 как сказал @arsent. А также добавить правило для входящих подключений в брандмауэре для Elasticsearch в ваш порт(по умолчанию 9200). Он работал в ElasticSearch версии 2.3.0