## LiteSpeed Web Server
Users' Manual

### Version 6.3 — Rev. 4

- License Enterprise
- Introduction
- Installation
- Administration
- Security
- Configuration
  - Server General
  - Server Log
  - Server Tuning
  - Server Security
  - Page Cache
  - PageSpeed Config
  - External Apps
  - Fast CGI App
  - Fast CGI Authorizer
  - LSAPI App
  - Servlet Engine
  - Web Server
  - Piped logger
  - Load Balancer
  - Script Handler
  - PHP
  - App Server Settings
  - Listener General
  - Listener SSL
  - Virtual Host Templates
  - Virtual Host Basic
  - Virtual Host General
  - Virtual Host Security
  - Virtual Host SSL
  - Virtual Host PageSpeed Config
  - Rewrite
  - Context
  - Static Context
  - Java Web App Context
  - Servlet Context
  - Fast CGI Context
  - LSAPI Context
  - Proxy Context
  - CGI Context
  - Load Balancer Context
  - Redirect Context
  - App Server Context
  - Rack/Rails Context
  - Add-ons
- Web Console
  - Admin Console General
  - Admin Console Security
  - Admin Listener General
  - Admin Listener SSL

# App Server Context

## Table of Contents

### App Server Context⇑

#### Description

An App Server Context provides an easy way to configure a Ruby Rack/Rails, WSGI, or Node.js application. To add a an application through an App Server Context, only mounting the URL and the application's root directory is required. There is no need to go through all the trouble to define an external application, add a 404 handler, and rewrite rules, etc.

### URI⇑

#### Description

Specifies the URI for this context.

#### Syntax

The URI can be a plain URI (starting with "/") or a Perl compatible regular expression URI (starting with "exp:"). If a plain URI ends with a "/", then this context will include all sub-URIs under this URI. If the context maps to a directory on the file system, a trailing "/" must be added.

#### See Also

Location

### Location⇑

#### Description

Specifies the corresponding location of this context in the file system.
Default value: $DOC_ROOT + URI

#### Syntax

It can be an absolute path or path relative to $SERVER_ROOT, $VH_ROOT, or $DOC_ROOT. $DOC_ROOT is the default relative path, and can be omitted.
If the URI is a regular expression, then the matched sub-string can be used to form the "Root" string. The matched sub-string can be referenced with the values "$1" - "$9". "$0" and "&" can be used to reference the whole matched string. Additionally, a query string can be set by appending a "?" followed by the query string. Be careful. "&" should be escaped as "\&" in the query string.

#### Example

A plain URI like /examples/ with Location set to /home/john/web_examples will map the request "/examples/foo/bar.html" to file "/home/john/web_examples/foo/bar.html".
To simulate Apache's mod_userdir, set URI to exp: ^/~([A-Za-z0-9]+)(.*), set Location to /home/$1/public_html$2. With these settings, a request of URI /~john/foo/bar.html will map to file /home/john/public_html/foo/bar.html.

#### See Also

URI

### Binary Path⇑

#### Description

The location of the App Server application binary.

### Application Type⇑

#### Description

The type of application used for this context. Rack/Rails, WSGI, or Node.js are supported.

### Startup File⇑

#### Description

The location of file used to start the application, relative to the application root directory.
Default startup file names include 'config.ru' for Rack/Rails, 'wsgi.py' and 'passenger_wsgi.py' for WSGI, and 'app.js' for NodeJS.

#### Syntax

Path relative to application root directory

### Run-Time Mode⇑

#### Description

Specifies which mode the application will be running as: "Development", "Production", or "Staging". The default is "Production".

#### Syntax

Select from drop down list

### Max Connections⇑

#### Description

Specifies the maximum number of concurrent connections that can be established between the server and an external application. This setting controls how many requests can be processed concurrently by an external application, however, the real limit also depends on the external application itself. Setting this value higher will not help if the external application is not fast enough or cannot scale to a large number of concurrent requests.

#### Syntax

Integer number

#### Tips

Setting a high value does not directly translate to higher performance. Setting the limit to a value that will not overload the external application will provide the best performance/throughput.

### Environment⇑

#### Description

Specifies extra environment variables for the external application.

#### Syntax

Key=value. Multiple variables can be separated by "ENTER"

### Enable Expires⇑

#### Description

Specifies whether to generate an Expires header for static files. If enabled, an Expires header will be generated based on Expires Default and Expires By Type.
This can be set at server, virtual host and context level. Lower level settings will override higher level ones, i.e. context settings will override virtual host settings and virtual host settings will override server settings.

#### Syntax

Select from radio box

### Expires Default⇑

#### Description

Specifies default settings for Expires header generation. This setting takes effect when Enable Expires is set to "Yes". It can be overridden by Expires By Type. Do not set this default at the server or virtual host level unless you have to, since it will generate Expires headers for all pages. Most of time this should be set at the context level for certain directories that do not change often. If there is no default setting, no Expires header will be generated for types not specified in Expires By Type.

#### Syntax

A|Mseconds
The file will expire after base time(A|M) plus specified seconds. Base time "A" sets the value to the client's access time and "M" to the file's last modified time.

### Expires By Type⇑

#### Description

Specifies Expires header settings for individual MIME types.

#### Syntax

Comma delimited list of "MIME-type=A|Mseconds". The file will expire after base time (A|M) plus specified seconds.
Base time "A" sets the value to the client's access time and "M" to the file's last modified time. MIME-type accepts wildcard "*", like image/*.

### Header Operations⇑

#### Description

Specifies additional response/request headers to be added. Multiple header directives can be added with one directive per line. "NONE" can be used to disable parent header inheritance. If no directive is provided 'Header' is assumed.

#### Syntax

[Header]|RequestHeader [condition] set|append|merge|add|unset header [value] [early|env=[!]variable]

#### Example

set Cache-control no-cache
append Cache-control no-store
Header set My-header cust_header_val
RequestHeader set My-req-header cust_req_header_val

#### Tips

Syntax and usage are similar to Apache's mod_headers directives for supported operations.
The 'Header' directive is is optional and can be excluded or left in when copying rules from elsewhere without issue.

### Index Files⇑

#### Description

Specifies names of index files that will be searched sequentially when a URL is mapped to a directory. You can customize it at the server, virtual host, and context level.

#### Syntax

Comma-delimited list of index filenames.

#### Tips

Only set index files that you need.

### Auto Index⇑

#### Description

Specifies whether to generate a directory index on the fly when index files listed in Index Files are not available in a directory. This option is customizable at the virtual host and context level, and is inherited along the directory tree until it is explicitly overridden. You can customize the generated index page. Please check online wiki How-tos.

#### Syntax

Select from radio box

#### Tips

It is recommended to turn off Auto Index wherever possible to prevent revealing confidential data.

#### See Also

Index Files, Auto Index URI

### Allow Override⇑

#### Description

Specifies what directives in an access control file are allowed. An access control file can be placed in a directory to control the accessibility of files under that directory.

- When nothing is checked, inherited default settings will be used.
- When None is checked, access control files will be ignored.
- When Limit is checked, directives "Allow", "Deny", and "Order" are allowed. <Limit> and <LimitExcept> directives are also allowed with limited support for GET, HEAD, and POST requests.
- When Auth is checked, directives "AuthGroupFile", "AuthName", "AuthType", "AuthUserFile", "Require", and "Satisfy" are allowed. <Limit> and <LimitExcept> directives are also allowed with limited support for GET, HEAD, and POST requests.
- When FileInfo is checked, directives "AddDefaultCharset", "AddType", "DefaultType", "ForceType", "Redirect", "RedirectPermanent", "RedirectTemp", "RewriteBase", "RewriteCond", "RewriteEngine", "RewriteOptions", and "RewriteRule" are allowed.
- When Indexes is checked, directives "DirectoryIndex", "ExpiresActive", "ExpiresByType", and "ExpiresDefault" are allowed.
- When Options is checked, directive "Options" is allowed.

Allow Override configuration is available at the Server, Virtual Host, and Context levels. If a configuration is unchecked at the Server level, those controlled directives will be disabled for the entire server regardless of settings at lower levels. Lower levels can disable a setting that is enabled at a higher level, but cannot enable a setting that is disabled at an upper level.
Default values:
Server level: "None" (ignore access control file)
VH level: Inherit Server level setting
Context level Inherit VH level setting

#### Syntax

Select from checkbox

#### Tips

If there is no need for directory level configuration customization, check None.

### Realm⇑

#### Description

Specifies the authorization realm for this context. When specified, a valid username and password must be provided in order to access this context. Authorization Realms are set up in the Virtual Host Security section. This setting uses each realm's Realm Name.

#### Syntax

Select from drop down list

### Authentication Name⇑

#### Description

Specifies an alternative name for the authorization realm for the current context. If not specified, the original realm name will be used. The authentication name is displayed on the browser's login pop-up.

### Require (Authorized Users/Groups)⇑

#### Description

Specifies which user/group can access this context. This allows you to use one user/group database (specified in Realm) across a number of contexts, but only allow certain users/groups from that database to access this context.

#### Syntax

Syntax is compatible with Apache's Require directive. For example:

- user username [username ...]
  Only listed users can access this context.
- group groupid [groupid ...]
  Only users belonging to the listed groups can access this context.

If this setting is not specified, all valid users will be allowed to access this resource.

### Access Allowed⇑

#### Description

Specifies which IPs or sub-networks are allowed to access resources under this context. Together with Access Denied and server/virtual host level access control, accessibility is determined by the smallest scope that a client's IP address falls into.

#### Syntax

Comma-delimited list of IPs/sub-networks.

#### Example

Sub-networks can be written as 192.168.1.0/255.255.255.0, 192.168.1, or 192.168.1.*.

### Access Denied⇑

#### Description

Specifies which IPs or sub-networks are NOT allowed to access resources under this context. Together with Access Allowed and server/virtual host-level access control, accessibility is determined by the smallest scope that a client's IP address falls into.

#### Syntax

Comma-delimited list of IPs/sub-networks.

#### Example

Sub-networks can be written as 192.168.1.0/255.255.255.0, 192.168.1, or 192.168.1.*.

### Authorizer⇑

#### Description

Specifies an external application that can be used to generate authorized/unauthorized decisions. Currently, only the FastCGI Authorizer is available. For more details about the FastCGI Authorizer role, please visit https://fastcgi-archives.github.io/ .

#### Syntax

Select from drop down list

### Enable Rewrite⇑

#### Description

Specifies whether to enable LiteSpeed's URL rewrite engine. This option can be customized at the virtual host or context level, and is inherited along the directory tree until it is explicitly overridden.

#### Syntax

Select from radio box

### Rewrite Inherit⇑

#### Description

Specifies whether to inherit rewrite rules from parent contexts. If rewrite is enabled and not inherited, rewrite base and rewrite rules defined in this context will be used.

#### Syntax

Select from radio box

### Rewrite Base⇑

#### Description

Specifies the base URL for rewrite rules.

#### Syntax

URL

### Rewrite Rules⇑

#### Description

Specifies a list of rewrite rules at the virtual host level.
Do NOT add any document root level rewrite rules here. If you have any document root level rewrite rules from .htaccess, you should instead create a static context with uri "/" and add the rewrite rules there.
A rewrite rule is comprised of one RewriteRule directive and optionally preceded by multiple RewriteCond directives.

- Each directive should take only one line.
- RewriteCond and RewriteRule follow Apache's rewrite directive syntax. Just copy and paste rewrite directives from your Apache configuration files.
- There are minor differences between LiteSpeed and Apache mod_rewrite implementation:
  - %\{LA-U:variable\} and %\{LA-F:variable\} are ignored by the LiteSpeed rewrite engine
  - Two new server variables are added in the LiteSpeed rewrite engine: %\{CURRENT_URI\} represents the current URI being processed by the rewrite engine and %\{SCRIPT_NAME\} has the same meaning as the corresponding CGI environment variable.
  - The LiteSpeed rewrite engine will stop processing rewrite rules after encountering an [L] flag to avoid looping while Apache mod_rewrite will stop processing rewrite rules for the current iteration only. This behavior is similar to that of the [END] flag in Apache mod_rewrite.

The implementation of LiteSpeed's rewrite engine follows Apache's rewrite engine specifications. For more details about rewrite rules, please refer to Apache's mod_rewrite document and Apache's URL rewriting guide .

#### Syntax

string

### Check Public Cache⇑

#### Description

Specifies whether to check against the public cache for URLs requested in the current context. Can be set at the server level, virtual host level, or context level.

#### Syntax

Select from radio box

### Check Private Cache⇑

#### Description

Specifies whether to check against the private cache for URLs requested in the current context. Can be set at the server, virtual host, or context level.

#### Syntax

Select from radio box

### Respect Cacheable⇑

#### Description

Respect the value of regular "Cache-Control" response headers when LiteSpeed-specific cache control has not been provided.
LiteSpeed-specific cache control includes the X-litespeed-cache-control response header and the cache-control environment variable set via rewrite rule.

#### Syntax

Select from radio box

#### Tips

This setting is enabled by default.

### Max Object Size⇑

#### Description

Specifies the maximum size of an object, up to 100M, that can be stored in the cache directory.
Default value: 10M

#### Syntax

Integer number

### Cache Stale Age (seconds)⇑

#### Description

Specifies how long an object will continue to be served from cache after it has expired but before a new cached copy is available. The default is "10" seconds.

#### Syntax

Integer number

### Cache Key Modifications⇑

#### Description

Makes some requests more cache-friendly by allowing junk query string parameters to be dropped from URLs.

#### Syntax

clear discards all previous configurations, -qs:[string] drop all query strings where the name matches [string] exactly, or -qs:utm* drop all query strings where the name part starts with [string]. Input one rule per line.

#### Example

-qs:utm* drops all query strings where the name part starts with "utm".
-qs:gclid drops all query strings where the name matches "gclid" exactly.

### Publicly Cache All⇑

#### Description

Publicly cache all URLs served under the current context (virtual host, or context level).
Virtual hosts configured through Apache's httpd.conf can use the "CacheEnable" and "CacheDisable" directives at the server, virtual host, context, file, and location level or in .htaccess. "CacheEnable" and "CacheDisable" directives are compatible with Apache mod_cache directives. However, when used at the context, file, or location level, or in .htaccess, "CacheEnable" and "CacheDisable" will only be applied to directories below the current level. URL parameters will be ignored.

#### Syntax

Select from radio box

#### Tips

Disabled by default. Do not enabled this setting if you are using any LSCache plugins.

### Cache Expire Time (seconds)⇑

#### Description

Specifies how long an object will be cached. The default is "86400" seconds (one day).

#### Syntax

Integer number

### Privately Cache All⇑

#### Description

Privately cache all URLs served under the current context (virtual host, or context level).
A separate cached copy will be made per user based on their IP and set cookies.
Virtual hosts configured through Apache's httpd.conf can use the "CacheEnable private /url" and "CacheDisable private /url" directives at server, virtual host, directory, file, and location levels or in a .htaccess file. "CacheEnable private" and "CacheDisable private" are compatible with Apache's mod_cache directives and will be applied to all directories below the current level. However, when used at the directory, file, or location level, or in a .htaccess file, "CacheEnable private" and "CacheDisable private" will only be applied to directories below the current level. URL parameters will be ignored.

#### Syntax

Select from radio box

#### Tips

Disabled by default. Do not enabled this setting if you are using any LSCache plugins.

### Private Cache Expire Time (seconds)⇑

#### Description

Specifies how long an object will be cached in private cache. The default is "60" seconds.

#### Syntax

Integer number

### Micro Cache 5XX Response⇑

#### Description

Cache pages responding with HTTP status code 5xx (500, 503, etc) for 10 seconds when the cache response header indicates that the page is cacheable.
Default values:
Server level: Yes
VH level: Inherit Server level setting
Context-level Inherit VH level setting

#### Syntax

Select from radio box

#### Tips

Enabling this setting is useful for avoiding bad requests but can also act as some added DDoS protection.

### Enable POST cache⇑

#### Description

Specifies if POST requests can be cached using the "x-litespeed-cache-control" header.
Default value: No

#### Syntax

Select from radio box

### Add Default Charset⇑

#### Description

Specifies whether to add a character set tag to the "Content-Type" response header, when content type is either "text/html" or "text/plain" without any parameters. When set to Off, this function is disabled. When set to On, either the character set specified by Customized Default Charset or the default "iso-8859-1" will be added.

#### Syntax

Select from radio box

### Customized Default Charset⇑

#### Description

Specifies a character set to be used when Add Default Charset is On. This is optional. The default value is iso-8859-1. This entry has no effect when Add Default Charset is Off.

#### Syntax

Name of a character set.

#### Example

utf-8

### Enable GeoLocation Lookup⇑

#### Description

Enterprise Edition Only Specifies whether to enable/disable IP Geolocation lookup. Can be set at server, virtual host, or context level. IP Geolocation is disabled by default when using value "Not Set".

#### Syntax

Select from radio box

#### See Also

Use Client IP in Header, DB File Path,