Allow configuring max request header size (#7249)

* Allow configuring max request header size

This allows configuring the HTTP max request header size from the jetty
server.
By default it uses 8192, the same jetty default.
This commit is contained in:
Sergi Castro 2021-07-06 09:10:15 +02:00 committed by GitHub
parent 5dd56a5ca4
commit d15b67bd97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 29 additions and 2 deletions

View File

@ -73,6 +73,7 @@ Release Notes.
* Fix InfluxDB storage-plugin Metrics#multiGet issue.
* Replace zuul proxy with spring cloud gateway 2.x. in webapp module.
* Upgrade etcd cluster coordinator and dynamic configuration to v3.x.
* Configuration: Allow to configure server maximum request header size.
#### UI

View File

@ -12,6 +12,7 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`. **Receiver** mode
| - | - | restIdleTimeOut| Connector idle timeout in milliseconds of restful service| SW_CORE_REST_JETTY_IDLE_TIMEOUT|30000|
| - | - | restAcceptorPriorityDelta| Thread priority delta to give to acceptor threads of restful service| SW_CORE_REST_JETTY_DELTA|0|
| - | - | restAcceptQueueSize| ServerSocketChannel backlog of restful service| SW_CORE_REST_JETTY_QUEUE_SIZE|0|
| - | - | httpMaxRequestHeaderSize| Maximum request header size accepted| SW_CORE_HTTP_MAX_REQUEST_HEADER_SIZE|8192|
| - | - | gRPCHost|Binding IP of gRPC service. Services include gRPC data report and internal communication among OAP nodes|SW_CORE_GRPC_HOST|0.0.0.0|
| - | - | gRPCPort| Binding port of gRPC service | SW_CORE_GRPC_PORT|11800|
| - | - | gRPCSslEnabled| Activate SSL for gRPC service | SW_CORE_GRPC_SSL_ENABLED|false|
@ -175,6 +176,7 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`. **Receiver** mode
| - | - | restIdleTimeOut| Connector idle timeout in milliseconds of restful service| SW_RECEIVER_SHARING_JETTY_IDLE_TIMEOUT|30000|
| - | - | restAcceptorPriorityDelta| Thread priority delta to give to acceptor threads of restful service| SW_RECEIVER_SHARING_JETTY_DELTA|0|
| - | - | restAcceptQueueSize| ServerSocketChannel backlog of restful service| SW_RECEIVER_SHARING_JETTY_QUEUE_SIZE|0|
| - | - | httpMaxRequestHeaderSize| Maximum request header size accepted| SW_RECEIVER_SHARING_HTTP_MAX_REQUEST_HEADER_SIZE|8192|
| - | - | gRPCHost|Binding IP of gRPC service. Services include gRPC data report and internal communication among OAP nodes| SW_RECEIVER_GRPC_HOST | 0.0.0.0. Not Activated |
| - | - | gRPCPort| Binding port of gRPC service | SW_RECEIVER_GRPC_PORT | Not Activated |
| - | - | gRPCThreadPoolSize|Pool size of gRPC server| SW_RECEIVER_GRPC_THREAD_POOL_SIZE | CPU core * 4|

View File

@ -71,6 +71,7 @@ core:
restIdleTimeOut: ${SW_CORE_REST_JETTY_IDLE_TIMEOUT:30000}
restAcceptorPriorityDelta: ${SW_CORE_REST_JETTY_DELTA:0}
restAcceptQueueSize: ${SW_CORE_REST_JETTY_QUEUE_SIZE:0}
httpMaxRequestHeaderSize: ${SW_CORE_HTTP_MAX_REQUEST_HEADER_SIZE:8192}
gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
maxConcurrentCallsPerConnection: ${SW_CORE_GRPC_MAX_CONCURRENT_CALL:0}
@ -296,6 +297,7 @@ receiver-sharing-server:
restIdleTimeOut: ${SW_RECEIVER_SHARING_JETTY_IDLE_TIMEOUT:30000}
restAcceptorPriorityDelta: ${SW_RECEIVER_SHARING_JETTY_DELTA:0}
restAcceptQueueSize: ${SW_RECEIVER_SHARING_JETTY_QUEUE_SIZE:0}
httpMaxRequestHeaderSize: ${SW_RECEIVER_SHARING_HTTP_MAX_REQUEST_HEADER_SIZE:8192}
# For gRPC server
gRPCHost: ${SW_RECEIVER_GRPC_HOST:0.0.0.0}
gRPCPort: ${SW_RECEIVER_GRPC_PORT:0}

View File

@ -182,6 +182,12 @@ public class CoreModuleConfig extends ModuleConfig {
@Setter
private boolean enableEndpointNameGroupingByOpenapi = true;
/**
* The maximum size in bytes allowed for request headers.
* Use -1 to disable it.
*/
private int httpMaxRequestHeaderSize = 8192;
public CoreModuleConfig() {
this.downsampling = new ArrayList<>();
}

View File

@ -221,6 +221,8 @@ public class CoreModuleProvider extends ModuleProvider {
.jettyMaxThreads(moduleConfig.getRestMaxThreads())
.jettyAcceptQueueSize(
moduleConfig.getRestAcceptQueueSize())
.jettyHttpMaxRequestHeaderSize(
moduleConfig.getHttpMaxRequestHeaderSize())
.build();
jettyServer = new JettyServer(jettyServerConfig);
jettyServer.initialize();

View File

@ -23,6 +23,8 @@ import org.apache.skywalking.oap.server.library.server.Server;
import org.apache.skywalking.oap.server.library.server.ServerException;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.servlet.ServletMapping;
@ -60,7 +62,10 @@ public class JettyServer implements Server {
server = new org.eclipse.jetty.server.Server(threadPool);
ServerConnector connector = new ServerConnector(server);
HttpConfiguration httpConfiguration = new HttpConfiguration();
httpConfiguration.setRequestHeaderSize(jettyServerConfig.getJettyHttpMaxRequestHeaderSize());
ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration));
connector.setHost(jettyServerConfig.getHost());
connector.setPort(jettyServerConfig.getPort());
connector.setIdleTimeout(jettyServerConfig.getJettyIdleTimeOut());

View File

@ -41,4 +41,6 @@ public class JettyServerConfig {
private int jettyAcceptorPriorityDelta = 0;
@Builder.Default
private int jettyAcceptQueueSize = 0;
@Builder.Default
private int jettyHttpMaxRequestHeaderSize = 8192;
}

View File

@ -50,4 +50,10 @@ public class SharingServerConfig extends ModuleConfig {
private boolean gRPCSslEnabled = false;
private String gRPCSslKeyPath;
private String gRPCSslCertChainPath;
/**
* The maximum size in bytes allowed for request headers.
* Use -1 to disable it.
*/
private int httpMaxRequestHeaderSize = 8192;
}

View File

@ -78,7 +78,8 @@ public class SharingServerModuleProvider extends ModuleProvider {
.jettyAcceptQueueSize(config.getRestAcceptQueueSize())
.jettyAcceptorPriorityDelta(
config.getRestAcceptorPriorityDelta())
.jettyIdleTimeOut(config.getRestIdleTimeOut()).build();
.jettyIdleTimeOut(config.getRestIdleTimeOut())
.jettyHttpMaxRequestHeaderSize(config.getHttpMaxRequestHeaderSize()).build();
jettyServerConfig.setHost(Strings.isBlank(config.getRestHost()) ? "0.0.0.0" : config.getRestHost());
jettyServerConfig.setPort(config.getRestPort());
jettyServerConfig.setContextPath(config.getRestContextPath());