Nếu bạn muốn hiển thị API Elasticsearch dưới dạng chỉ đọc, tôi nghĩ cách tốt nhất là đặt Nginx ở phía trước nó và từ chối tất cả các yêu cầu ngoại trừ GET. Một cấu hình ví dụ như sau:
# Run me with:
#
# $ nginx -c path/to/this/file
#
# All requests except GET are denied.
worker_processes 1;
pid nginx.pid;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
server_name search.example.com;
error_log elasticsearch-errors.log;
access_log elasticsearch.log;
location/{
if ($request_method !~ "GET") {
return 403;
break;
}
proxy_pass http://localhost:9200;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
}
Sau đó:
curl -i -X GET http://localhost:8080/_search -d '{"query":{"match_all":{}}}'
HTTP/1.1 200 OK
curl -i -X POST http://localhost:8080/test/test/1 -d '{"foo":"bar"}'
HTTP/1.1 403 Forbidden
curl -i -X DELETE http://localhost:8080/test/
HTTP/1.1 403 Forbidden
Note, mà một người sử dụng độc hại có thể vẫn còn lộn xộn lên máy chủ của bạn, ví dụ gửi trọng tải kịch bản không chính xác, mà sẽ làm cho Elasticsearch gặp khó khăn, nhưng đối với hầu hết các mục đích, cách tiếp cận này sẽ ổn.
Nếu bạn cần kiểm soát nhiều hơn về proxy, bạn có thể sử dụng cấu hình Nginx phức tạp hơn hoặc viết một proxy chuyên dụng ví dụ. trong Ruby hoặc Node.js.
Xem điều này example cho proxy phức tạp hơn dựa trên Ruby.
Sử dụng nginx như một proxy mật khẩu bảo vệ là một giải pháp đơn giản . Sách dạy nấu ăn đầu bếp elasticsearch cũng hỗ trợ điều này. –