Read More

Server Tuning

Table of Contents

OS Optimization

I/O Event Dispatcher | RAM Disk Path | Default SHM Directory

Connection

Max Connections | Max SSL Connections | Connection Timeout (secs) | Max Keep-Alive Requests | Smart Keep-Alive | Keep-Alive Timeout (secs) | Send Buffer Size (bytes) | Receive Buffer Size (bytes)

Request/Response Tuning

Max Request URL Length (bytes) | Max Request Header Size (bytes) | Max Request Body Size (bytes) | Max Dynamic Response Header Size (bytes) | Max Dynamic Response Body Size (bytes)

GZIP Compression Tuning

Enable Compression | Compression Level (Dynamic Content) | Compressible Types

SSL Global Setting

SSL Strong DH Key | Enable Multiple SSL Certificates | Enable Session Cache | Session Cache Size (bytes) | Session Cache Timeout (secs) | Enable Session Tickets | SSL Session Ticket Lifetime (secs) | SSL Session Ticket Key File

SSL Dynamic SNI

SSL Dynamic Certificates Base Dir | SSL Dynamic Certificates Levels | SSL Dynamic Certificates Expire Time (secs) | SSL Dynamic Certificates Refresh Time (secs)

QUIC

Enable QUIC | QUIC SHM Directory | QUIC Versions | Connection Flow Control Window | Max Connection Flow Control Window | Stream Flow Control Window | Max Stream Flow Control Window | Max Concurrent Streams Per Connection | Handshake Timeout | Idle Timeout

I/O Event Dispatcher

Description

Specifies which I/O event dispatcher to use. Different operating systems support different types of event dispatcher:

  • Linux kernel 2.4.x supports:
    • poll
  • Linux kernel 2.6.x supports:
    • poll
    • epoll
  • FreeBSD supports:
    • poll
    • kqueue
  • Solaris supports:
    • poll
    • devpoll
  • Mac OS X 10.3 and above supports:
    • poll
    • kqueue
poll is supported by all platforms, and is the default selection. For high traffic web sites, an altenative event dispatcher can be used to improve the scalability of the server.

Syntax

Select from drop down list

RAM Disk Path

Description

Setting the RAM Disk Path allows you to designate the location of a RAM disk. A RAM disk is a world-writable directory stored in memory. A server with excess RAM can reduce disk I/O by serving content from this RAM disk. Accessing content from RAM is much faster than reading data from the disk. LSWS will use this RAM disk to optimize performance when there is enough memory available.

(The RAM disk must be designated in your OS setup before it can be used by the web server. Many Linux distributions assign /dev/shm as a RAM disk by default, but these settings depend on your OS.)

Syntax

path

Default SHM Directory

Description

Changes shared memory's default directory to the specified path. If the directory does not exist, it will be created. All SHM data will be stored in this directory unless otherwise specified.

Syntax

Path

Max Connections

Description

Specifies the maximum number of concurrent connections that the server can accept. This includes both plain TCP connections and SSL connections. Once the maximum concurrent connections limit is reached, the server will close Keep-Alive connections when they complete active requests.

Syntax

Integer number

Tips

When the server is started by "root" user, the server will try to adjust the per-process file descriptor limits automatically, however, if this fails, you may need to increase this limit manually.

Max SSL Connections

Description

Specifies the maximum number of concurrent SSL connections the server will accept. Since total concurrent SSL and non-SSL connections cannot exceed the limit specified by Max Connections, the actual number of concurrent SSL connections allowed must be lower than this limit.

Syntax

Integer number

Connection Timeout (secs)

Description

Specifies the maximum connection idle time allowed during processing one request. The connection will be closed if it has been idle, i.e. no I/O activity, for this period of time.

Syntax

Integer number

Tips

Set this as low as you can to help recover dead connections during a potential DoS attack.

See Also

Keep-Alive Timeout (secs)

Max Keep-Alive Requests

Description

Specifies the maximum number of requests that can be served through a keep-alive (persistent) session. The connection will be closed once this limit is reached. You can set this limit for each virtual host as well.

Syntax

Integer number

Tips

Set this to a reasonably high value. A value of "1" or "0" will disable keep-alive.

See Also

Virtual Host Max Keep-Alive Requests

Smart Keep-Alive

Description

Specifies whether to turn on Smart Keep-Alive. This option is effective only if Max Keep-Alive Requests is greater than 1. If enabled, you can also enable/disable it at the virtual host level. Smart keep-alive will only establish keep-alive connections for requests of JavaScript, CSS Style Sheet, and image files. For html pages, the connection will not be kept alive. This will help serve more users more efficiently. Normally a web page contains multiple images and scripts that will be cached by the browser after the initial request. It is more efficient to send those non-html static files through a single keep-alive connection and have the text/html file sent through another non-keep-alive connection. This method will reduce idle connections and in turn increase the capacity to handle more concurrent requests and users.

Syntax

Select from radio box

Tips

Enable this for high-load web sites.

See Also

Virtual Host Smart Keep-Alive

Keep-Alive Timeout (secs)

Description

Specifies the maximum idle time between requests from a keep-alive connection. If no new request is received during this period of time, the connection will be closed. This setting only applies to HTTP/1.1 connections. HTTP/2 connections have long keep-alive timeouts by design and are not affected by this setting.

Syntax

Integer number

Tips

We recommend that you set this value just long enough to wait for subsequent requests from a client when there are more assets referenced by a single page that need to be loaded. Do not set this too long hoping that the next page will be served over the keep-alive connection. Keeping many idle keep-alive connections is a waste of server resources and could be taken advantage of by (D)DoS attacks. 2-5 seconds is a reasonable range for most applications. LiteSpeed is highly efficient in a non-keep-alive environment.

Send Buffer Size (bytes)

Description

The sending buffer size of each TCP socket. 512K is the maximum allowed buffer size.

Syntax

Integer number

Tips

It is recommended to leave this value as "Not Set" or set to 0 to use the operating system's default buffer size.
If your web site serves large static files, increase the send buffer size to improve performance.
Setting this to a lower value will reduce throughput and memory usage per socket allowing the server to have more concurrent sockets when memory is a bottleneck.

Receive Buffer Size (bytes)

Description

The receiving buffer size of each TCP socket. 512K is the maximum allowed buffer size.

Syntax

Integer number

Tips

It is recommended to leave this value as "Not Set" or set to 0 to use the operating system's default buffer size.
A large receive buffer will increase performance when processing incoming requests with large payloads, i.e. file uploads.
Setting this to a lower value will reduce throughput and memory usage per socket allowing the server to have more concurrent sockets when memory is a bottleneck.

Max Request URL Length (bytes)

Description

Specifies the maximum size of a request URL. URL is the full text address used to access a server resource including the query string. 8192 bytes is the hard limit.

Syntax

Integer number

Tips

Set it reasonably low to reduce memory usage and help identify bogus requests and DoS attacks.
2-3K is big enough for most web sites unless the HTTP GET method is used with large query strings instead of POST.

Max Request Header Size (bytes)

Description

Specifies the maximum size of an HTTP request header including request URL. Hard limit is 16380 bytes.

Syntax

Integer number

Tips

Set it reasonably low to reduce memory usage and help identify bogus requests and DoS attacks.
4-8K is big enough for most web sites.

Max Request Body Size (bytes)

Description

Specifies the maximum size of an HTTP request body. For a 32Bit OS, 2GB is the hard limit. For a 64Bit OS, it is virtually unlimited.

Syntax

Integer number

Tips

To help prevent DoS attacks, try to constrain this limit to only what is really needed. Your swapping space must have enough free space to accommodate this limit.

Max Dynamic Response Header Size (bytes)

Description

Specifies the maximum header size of a dynamically generated response. Hard limit is 8KB.

Syntax

Integer number

Tips

Set it reasonably low to help recognize bad responses dynamically generated by external applications.

Max Dynamic Response Body Size (bytes)

Description

Specifies the maximum body size of a dynamically generated response. Hard limit is 2047MB.

Syntax

Integer number

Tips

Set the limit reasonably low to help identify bad responses. It is not uncommon to malformed scripts to contain an infinite loop which leads to infinity-sized responses.

Enable Compression

Description

Controls GZIP compression for both static and dynamic HTTP responses.

Syntax

Select from radio box

Tips

Enable it to save network bandwidth. Text-based responses such as html, css, and javascript files benefit the most and on average can be compressed to half of their original size.

Compression Level (Dynamic Content)

Description

Specifies the level of compression for dynamic content. Ranges from 1 (lowest) to 9 (highest). The default is 2.

Syntax

Number between 1 and 9.

Tips

Higher compression level will use more memory and CPU cycles. You can set it to a higher level if your machine has additional power. There is not much difference between 6 and 9, except 9 uses many more CPU cycles.

Compressible Types

Description

Specifies what MIME types are allowed to be compressed.

Syntax

MIME type list separated by commas. Wild card "*" and negate sign "!" are allowed, such as text/*, !text/js.

Example

If you want to compress text/* but not text/css, you can have a rule like text/*, !text/css. "!" will exclude that MIME type.

Tips

Only allow types that will benefit from GZIP compression. Binary files such as gif/png/jpeg images and flash files do not benefit from compression.

SSL Strong DH Key

Description

Specifies whether to use 2048 or 1024 bit DH keys for SSL handshakes. If set to "Yes", 2048 bit DH keys will be used for 2048 bit SSL keys and certificates. 1024 bit DH keys will still be used in other situations. Default is "Yes".

Earlier versions of Java do not support DH key size higher than 1024 bits. If Java client compatibility is required, this should be set to "No".

Syntax

radio

Enable Multiple SSL Certificates

Description

Allows listeners/vhosts to set multiple SSL certificates. If multiple certificates are enabled, the certificates/keys are expected to follow a naming scheme. If the cert is named server.crt, other possible cert names are server.crt.rsa, server.crt.dsa, server.crt.ecc. If "Not Set", defaults to "No".

Syntax

Select from radio box

Enable Session Cache

Description

Enables session id caching. If "Not Set", defaults to "No". (Openssl Default)

Syntax

Select from radio box

Session Cache Size (bytes)

Description

Sets the maximum number of SSL session IDs to store in the cache. Default is 1,000,000.

Syntax

Integer number

Session Cache Timeout (secs)

Description

This value determines how long a session ID will be valid within the cache before renegotiation is required. Default is 3,600.

Syntax

Integer number

Enable Session Tickets

Description

Enables session tickets. If "Not Set", the server will use openSSL's default ticket.

Syntax

Select from radio box

SSL Session Ticket Lifetime (secs)

Description

This value determines how long a session ticket will be valid before a renegotiation is required. Default is 3,600.

Syntax

Integer number

SSL Session Ticket Key File

Description

Allows the SSL Ticket Key to be created/maintained by an administrator. The file must be 48 bytes long. If this option is left empty, the load balancer will generate and rotate its own set of keys.

IMPORTANT: To maintain forward secrecy, it is strongly recommended to change the key every SSL Session Ticket Lifetime seconds. If this cannot be done, it is recommended to leave this field empty.

Syntax

Path

SSL Dynamic SNI

Description

SSL Dynamic SNI enables you to avoid using the load balancer's generic certificates by specifying a directory that the load balancer can then use to serve clients site specific certificates when handling requests.

SSL Dynamic Certificates Base Dir

Description

Sets the base directory that dynamic ssl certificates will be stored in. Certificates, keys, and CA Bundles are expected to be named "cert", "key", and "ca", respectively.

Syntax

Path

Example

$SERVER_ROOT/certStore/

SSL Dynamic Certificates Levels

Description

The number of directory levels the certificate files will be in.

This is similar to PHP's Session.save_path

Syntax

Integer number

Example

If set to 2, "example.com" would be in BaseDir/e/x/example.com/

SSL Dynamic Certificates Expire Time (secs)

Description

Sets the expire time of a dynamically loaded certificate before it is invalidated.

Syntax

Integer number

SSL Dynamic Certificates Refresh Time (secs)

Description

Sets the refresh time of a dynamically loaded certificate before it will check for file validity. If the file is removed before refresh time, the cert will be invalidated. If the file is updated before refresh time, the cert will be updated.

Syntax

Integer number

Enable QUIC

Description

Enables the QUIC network protocol server wide. Default value is Yes.

Syntax

Select from radio box

Tips

When this setting is set to Yes, QUIC can still be disabled at the listener level through the Allow QUIC setting, or at the virtual host level through the Enable QUIC setting.

QUIC SHM Directory

Description

Specifies the directory used to save QUIC data to shared memory.

By default, the server's default SHM directory, /dev/shm, will be used.

Syntax

Path

Tips

A RAM based partition, such as /dev/shm, is recommended.

QUIC Versions

Description

A list of enabled QUIC versions. Supported versions are Q035 and Q037, other values will be ignored.

By default all supported versions are enabled. (New versions coming soon)

Syntax

Comma-separated list

Example

Q035, Q037

Tips

Leave a supported version out of this list to disable it.

Connection Flow Control Window

Description

The initial size of the buffer allocated for a QUIC connection. Default value is 1.5M.

Syntax

Number between 64K and 512M

Tips

A larger a window size will use more memory.

Max Connection Flow Control Window

Description

Specifies the maximum size that a connection flow control window buffer is allowed to reach due to window auto-tuning.

Default value is 0, which means that the value of Connection Flow Control Window is used and no auto-tuning is performed.

Syntax

0 or a number between 64K and 512M

Tips

A larger a window size will use more memory.

Stream Flow Control Window

Description

The initial amount of data a QUIC connection is willing to receive per stream. Default value is 1M.

Syntax

Number between 64K and 128M

Tips

A larger a window size will use more memory.

Max Stream Flow Control Window

Description

Specifies the maximum size that a stream flow control window is allowed to reach due to window auto-tuning.

Default value is 0, which means that the value of Stream Flow Control Window is used and no auto-tuning is performed.

Syntax

0 or a number between 64K and 128M

Tips

A larger a window size will use more memory.

Max Concurrent Streams Per Connection

Description

The maximum number of concurrent streams allowed per QUIC connection. Default value is 100.

Syntax

Integer number between 10 and 1000

Handshake Timeout

Description

The time in seconds a new QUIC connection is given to complete its handshake, after which the connection is aborted. Default value is 10.

Syntax

Integer number between 1 and 15

Idle Timeout

Description

The time in seconds after which an idle QUIC connection will be closed. Default value is 30.

Syntax

Integer number between 10 and 600

Accelerate your internet now.