乐闻世界logo
搜索文章和话题

How can you enable cross-origin resource sharing (CORS) in Elasticsearch?

1个答案

1

In Elasticsearch, enabling Cross-Origin Resource Sharing (CORS) is a security feature that allows web pages from one domain to access resources from another domain. This is very common in modern web applications, especially in Single-Page Applications (SPAs) and microservice architectures. Here are the steps to enable CORS:

1. Modify the Elasticsearch Configuration File

First, locate the Elasticsearch configuration file elasticsearch.yml, typically found in the config folder within the Elasticsearch installation directory.

In the elasticsearch.yml file, add or modify settings related to CORS. Common configuration options include:

  • http.cors.enabled: Set to true to enable CORS.
  • http.cors.allow-origin: Specify the allowed origin, such as a specific URL or a wildcard (e.g., * for all domains).
  • http.cors.allow-methods: Define allowed HTTP methods, e.g., GET, POST, PUT, DELETE.
  • http.cors.allow-headers: List permitted HTTP headers.
  • http.cors.allow-credentials: Set whether to allow requests with credentials (e.g., cookies).

For example, to allow all domains to use GET and POST methods on your Elasticsearch instance, add:

yaml
http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: "GET, POST" http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"

3. Restart the Elasticsearch Service

After modifying the configuration, restart the Elasticsearch service to apply changes. Use service management tools (e.g., systemctl or service) or execute Elasticsearch's provided scripts via the command line.

4. Verify the CORS Settings

After enabling CORS, verify the configuration using browser developer tools or command-line tools like CURL. For example:

bash
curl -H "Origin: http://example.com" -I http://your.elasticsearch.server:9200

Check the response headers for Access-Control-Allow-Origin: *, confirming CORS is active.

Real-World Example

In my previous project, the frontend application was deployed on AWS S3 while the Elasticsearch cluster ran on EC2 instances. Due to the browser's same-origin policy, direct API calls from the frontend encountered cross-domain issues. By enabling and configuring CORS in the Elasticsearch configuration file, we resolved this, ensuring secure access from different sources. This improved application performance and enhanced overall security.

2024年8月13日 21:48 回复

你的答案