### LiteSpeed Web Server Users' Manual

##### Version 5.0 Rev. 1

- License Std / Ent
- Introduction
- Installation
- Administration
  - Service Manager
- Security
- Configuration
  - Server General
  - Server Tuning
  - Server Security
  - Request Filter
  - Page Cache
  - External Apps
  - Fast CGI App
  - Fast CGI Authorizer
  - LSAPI App
  - Servlet Engine
  - Web Server
  - Pipped logger
  - Load Balancer
  - Script Handler
  - Rack/Rails Settings
  - Listeners
  - Templates
  - Virtual Host Basic
  - Virtual Host General
  - Virtual Host Security
  - Rewrite
  - Context
  - Static Context
  - Java Web App Context
  - Servlet Context
  - Fast CGI Context
  - LSAPI Context
  - Proxy Context
  - CGI Context
  - Load Balancer Context
  - Redirect Context
  - Rack/Rails Context
  - Web Socket Proxy
  - Add-ons
  - Admin Server
  - Admin Listeners

# Server Tuning

#### Table of Contents

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

SSL Hardware Accelerator
Description: Enterprise Edition Only Specifies which SSL hardware acceleration device to use. Only devices supported by OpenSSL can be used. Select OpenSSL internal engine if no device is installed.
Syntax: Select from drop down list

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, setting should be set to "No".
Syntax: radio

Max Connections
Description: Specifies the maximum number of concurrent connections that the server can accept. This includes both plain TCP connections and SSL connections. This setting should not be set to exceed the hard limit set by the server software edition or license: 150 for Standard Edition, 500 for VPS license, 800 for Ultra VPS license. 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: [Security] Set this as low as you can to help recover dead connections during a potential DoS attack.
See Also:

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: [Performance] 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: [Performance] 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.
Syntax: Integer number
Tips: [Security & Performance] We recommend you to set the value just long enough to handle all requests for a single page view. It is unnecessary to keep connections alive for an extended period of time. A smaller value can reduce idle connections, increase capacity to service more users, and guard against 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. Set to 0 to use the default buffer size of the operating system. 65535 is the maximum allowed buffer size.
Syntax: Integer number
Tips: [Performance] If your web site serves large static files, increase the send buffer size to improve performance.

Receive Buffer Size (bytes)
Description: The receiving buffer size of each TCP socket. Set to 0 to use the default buffer size of the operating system. 65535 is the maximum allowed buffer size.
Syntax: Integer number
Tips: [Performance] A large receive buffer will increase performance when processing incoming requests with large payloads, i.e. file uploads.

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: [Security & Performance] 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 a HTTP request header including request URL. Hard limit is 16380 bytes.
Syntax: Integer number
Tips: [Security & Performance] 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 a HTTP request body. For a 32Bit OS, 2GB is the hard limit. For a 64Bit OS, it is virtually unlimited.
Syntax: Integer number
Tips: [Security] 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: [Reliability & Performance] 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: [Reliability & Performance] 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.

Max Cached Small File Size (bytes)
Description: Specifies the largest static file that will be cached in a pre-allocated memory buffer. Static files can be served in four different ways: memory buffer cache, memory-mapped cache, plain read/write, and sendfile(). Files whose size is smaller than this setting are served from memory buffer cache. Files whose size is larger than this setting, but smaller than the Max MMAP File Size (bytes) will be served from memory-mapped cache. Files whose size is larger than the Max MMAP File Size (bytes) will be served via plain read/write or sendfile(). It is optimal to serve static files smaller than 4K from the memory buffer cache.
Syntax: Integer number

Total Small File Cache Size (bytes)
Description: Specifies the total memory that can be allocated to the buffer cache in order to cache/serve small static files.
Syntax: Integer number

Max MMAP File Size (bytes)
Description: Specifies the largest static file that will be memory mapped (MMAP). Static files can be served in four different ways: memory buffer cache, memory-mapped cache, plain read/write, and sendfile(). Files whose size is smaller than the Max Cached Small File Size (bytes) are served from memory buffer cache. Files whose size is larger than the Max Cached Small File Size (bytes), but smaller than the Max MMAP File Size will be served from memory-mapped cache. Files whose size is larger than the Max MMAP File Size will be served via plain read/write or sendfile(). Since the server has a 32bit address space (2GB), it is not recommended to memory map very large files.
Syntax: Integer number

Total MMAP Cache Size (bytes)
Description: Specifies the total memory that can be allocated for memory- mapped cache in order to cache/serve medium sized static files.
Syntax: Integer number

Use sendfile()
Description: Specifies whether to use the sendfile() system call to serve static files. Static files can be served in four different ways: memory buffer cache, memory-mapped cache, plain read/write, and sendfile(). Files smaller than the Max Cached Small File Size (bytes) are served from memory buffer cache. Files larger than the Max Cached Small File Size (bytes) but smaller than the Max MMAP File Size (bytes) will be served from memory-mapped cache. Files larger than the Max MMAP File Size (bytes) will be served via plain read/write or sendfile(). Sendfile() is a "zero copy" system call that can greatly reduce CPU utilization when serving very large static files. Sendfile() requires an optimized network card kernel driver and thus may not be suitable for some small-vendor network adapters.
Syntax: Select from radio box

Use AIO
Description: Specifies whether to use AIO to serve static files. AIO will help if your server has a high I/O wait. For 64bit operation system, there is an option to keep files mapped in process address space to improve AIO performance.
Syntax: Select from drop down list
See Also: AIO Block Size

AIO Block Size
Description: Specifies the sent block size for AIO. This block size multiplied by the total files being processed should be less than the physical memory of the server, otherwise, AIO will not help. If your server has enough memory, you can choose a bigger size. Default value is "1M".
Syntax: Select from drop down list
See Also: Use AIO

File ETag
Description: Specifies whether to use a file's inode, last-modified time, and size attributes to generate the ETag HTTP response header for static files. All three attributes are enabled by default. If you plan to serve the same file out of mirrored servers, you should not include inode; otherwise, the ETag generated for one file will be different on different servers.
Syntax: Select from checkbox

Enable Compression
Description: Controls GZIP compression for both static and dynamic HTTP responses.
Syntax: Select from radio box
Tips: [Performance] 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.

Enable Dynamic Compression
Description: Controls GZIP compression for dynamically generated HTTP response. Enable Compression must be set to Yes in order to enable dynamic GZIP compression.
Syntax: Select from radio box
Tips: [Performance] Compressing dynamic responses increases CPU and memory utilization but saves network bandwidth.

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: [Performance] 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: [Performance] 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.

Auto Update Static File
Description: Specifies whether to let the server automatically create/update GZIP-compressed versions of compressible static files or not. If set to Yes, when a file with a MIME type listed in Compressible Types is requested, the server may create or update the corresponding compressed version of the file depending on the compressed file's timestamp. This compressed file is created under the Static GZIP Cache Directory. The file name is based on a MD5 hash of the path of the original file.
Syntax: Select from radio box

Static GZIP Cache Directory
Description: Specifies the path of the directory used to store compressed files for static content. The default is Swapping Directory.
Syntax: Directory Path

Compression Level (Static Content)
Description: Specifies the level of compression for static content. Ranges from 1 (lowest) to 9 (highest). The default is 6.
Syntax: Number between 1 and 9.

Max Static File Size (bytes)
Description: Specifies the maximum size of a static file for which the server will create a compressed file automatically.
Syntax: Number in bytes not less than 1K.
Tips: [Performance] It is not recommended to have the server create/update compressed files for large files. Compressing blocks an entire server process and no further requests can be processed until the compression is completed.

Min Static File Size (bytes)
Description: Specifies the minimum size of a static file for which the server will create a corresponding compressed file.
Syntax: Number in bytes not less than 200.
Tips: It is not necessary to compress very small files as the bandwidth saving is negligible.