ฉันจะเปิดใช้งานการเข้าถึงระยะไกล / คำขอใน Elasticsearch 2.0 ได้อย่างไร


97

เริ่มจาก v2.0 Elasticsearch จะฟังเฉพาะบน localhost ตามค่าเริ่มต้น แต่ฉันต้องการส่งคำขอจากภายนอก localhost

ตัวอย่างเช่นคำขอเช่นนี้ได้รับอนุญาต:

http://localhost:9200/

แต่นี่ไม่ใช่:

http://server_name:9200/ (จากภายนอกเซิร์ฟเวอร์เช่นคอมพิวเตอร์ในระบบ LAN เดียวกัน)

ขอบคุณสำหรับความช่วยเหลือของคุณ.


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 ทั้งหมด ไม่ปลอดภัย!
Yavuz

1
พบไฟล์ในระบบ CentOS ของฉัน/etc/elasticsearch/elasticsearch.ymlและเนื้อหา:network.host: ["0.0.0.0"]
AlikElzin-kilaka

ไม่ได้ผลสำหรับฉัน ES ยังคงทำงานในวันที่ 127.0.0.1T_T
E. Big

สำหรับผู้ที่ไม่พบไฟล์ config ใน 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 ไปเป็นแขกรับเชิญด้วยความยืดหยุ่น ขอบคุณมาก!
ทอม

ทดสอบกับ Elasticsearch 7.1.0 - โซลูชันทำงานได้ดีในการเชื่อมต่อกับ ES บน VirtualBox
DB Prasad

การกำหนดค่าที่ระบุข้างต้นยังทำงานร่วมกับการค้นหาแบบยืดหยุ่นเวอร์ชัน 7.2.0 :-)
dinu0101

2
เกือบทุกเดือนฉันมาที่นี่เพื่อคัดลอกการกำหนดค่านี้: D
Neelesh

ขอบคุณสิ่งนี้ช่วยฉันได้มาก ฉันกำลังดิ้นรนกับปัญหาข้อยกเว้นการเชื่อมต่อ และในที่สุดก็ใช้งานได้หลังจากเพิ่มบรรทัดเหล่านี้ในelasticsearch.ymlไฟล์
Spencer Trinh

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


มี: ข้อยกเว้นในเธรด "หลัก" BindTransportException [ไม่สามารถผูกกับ [9300-9400]]; ซ้อนกัน: ChannelException [ไม่สามารถเชื่อมโยงกับ: /10.0.0.4:9400]
mountrix

2
จะทำได้อย่างไรฉันหมายความว่าเราไม่สามารถเปลี่ยนชื่อelasticsearch.ymlเป็นได้elasticsearch.jsonเพราะอันแรกอืม YAML และอันที่สองคือJSON??
Shubham A.

9

ดังที่ @arsent กล่าวถึงให้เพิ่มที่อยู่ IP นั้นลงในไฟล์กำหนดค่า:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay ยังเพิ่มประเด็นสำคัญ - หากคุณใช้ไฟร์วอลล์อย่าลืมเพิ่มกฎที่อนุญาตให้รับส่งข้อมูลไปยังพอร์ตนั้น

หากคุณต้องการอนุญาตให้เซิร์ฟเวอร์หลักเข้าถึง 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 ในเซิร์ฟเวอร์หลักของคุณและ ping 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_ ]

ตัวเลือกนี้ช่วยให้คุณสามารถเข้าถึงได้จากทั้ง localhost และจากคอมพิวเตอร์ทุกเครื่องในเครือข่ายท้องถิ่น (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. /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 กล่าวว่า และยังเพิ่ม Inbound Rule ในไฟร์วอลล์สำหรับพอร์ต ElasticSearch ของคุณ (9200 ByDefault)

ทำงานได้ใน ElasticSearch เวอร์ชัน 2.3.0


1

สำหรับElasticSearch 7.8.2ขึ้นไป

ตรวจสอบว่าคุณอยู่ในโหนดเดียวหรือไม่ เพิ่มบรรทัดต่อไปนี้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.