Elasticsearch Configuring HTTP Settings in Elasticsearch

By Opster Team

Updated: Nov 5, 2023

| 2 min read

Quick Links

Overview

Elasticsearch, by default, uses HTTP as its primary communication protocol with the outside world. It listens on port 9200 for incoming HTTP requests and responds accordingly. However, there are several HTTP settings that can be configured to fine-tune the behavior of Elasticsearch. This article will delve into the details of these settings and how they can be adjusted to meet specific requirements.

HTTP Module Settings

The HTTP module settings are the primary configurations that control the behavior of the HTTP interface in Elasticsearch. These settings can be adjusted in the `elasticsearch.yml` configuration file. Here are some of the key settings:

– `http.port`: This setting specifies the port on which Elasticsearch listens for HTTP traffic. The default value is 9200.

– `http.publish_port`: This setting specifies the port that Elasticsearch advertises to other nodes in the cluster. If not specified, the value of `http.port` is used.

– `http.bind_host` and `http.publish_host`: These settings specify the host address that Elasticsearch binds to for HTTP traffic and the host address that Elasticsearch advertises to other nodes in the cluster, respectively.

– `http.max_content_length`: This setting specifies the maximum size of an HTTP request body that Elasticsearch will accept. The default value is 100mb.

– `http.max_initial_line_length`: This setting specifies the maximum size of an HTTP URL that Elasticsearch will accept. The default value is 4kb.

– `http.max_header_size`: This setting specifies the maximum size of all HTTP headers in a single HTTP request that Elasticsearch will accept. The default value is 8kb.

Configuring HTTP Compression

HTTP compression can be enabled in Elasticsearch to reduce the size of the data being transferred over the network. This can significantly improve the performance of Elasticsearch, especially in environments where network bandwidth is a limiting factor. The `http.compression` setting can be used to enable or disable HTTP compression. By default, this setting is set to `false` when security and HTTPS is enabled, meaning that HTTP compression is disabled, and to `true` otherwise. To enable HTTP compression, set `http.compression` to `true` in the `elasticsearch.yml` configuration file.

Configuring HTTP CORS

Cross-Origin Resource Sharing (CORS) is a security feature that allows or denies requests from different origins. By default, Elasticsearch does not allow any cross-origin requests. However, this behavior can be changed by adjusting the `http.cors.enabled` and `http.cors.allow-origin` settings. To enable CORS, set `http.cors.enabled` to `true` and specify the allowed origins in the `http.cors.allow-origin` setting as shown below:

http.cors.enabled: true
http.cors.allow-origin: /https?:\/\/www.my-domain.com(:[0-9]+)?/

Configuring HTTP Pipelining

HTTP pipelining is a technique that allows multiple HTTP requests to be sent on a single TCP connection without waiting for the corresponding responses. This can significantly improve the performance of Elasticsearch in certain scenarios. The `http.pipelining.max_events` setting can be used to configure HTTP pipelining. By default, this setting is set to `10000`, meaning that up to 10,000 HTTP events can be queued up in memory before the connection is closed.

Conclusion

In conclusion, Elasticsearch provides a wide range of HTTP settings that can be configured to fine-tune its behavior. These settings can be adjusted in the `elasticsearch.yml` configuration file to meet specific requirements. Always remember to restart Elasticsearch after making any changes to the configuration file for the changes to take effect.