changeset 953:aded7086e84f

Commercial version documentation.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 01 Aug 2013 16:31:02 +0400
parents 417dc982362e
children d4fb95e6067c
files dtd/content.dtd dtd/module.dtd xml/en/GNUmakefile xml/en/docs/http/ngx_http_f4f_module.xml xml/en/docs/http/ngx_http_hls_module.xml xml/en/docs/http/ngx_http_log_module.xml xml/en/docs/http/ngx_http_mp4_module.xml xml/en/docs/http/ngx_http_session_log_module.xml xml/en/docs/http/ngx_http_status_module.xml xml/en/docs/http/ngx_http_upstream_module.xml xml/en/docs/index.xml xml/en/docs/ngx_core_module.xml xsls/versions.xsls xslt/versions.xslt
diffstat 14 files changed, 1644 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/dtd/content.dtd
+++ b/dtd/content.dtd
@@ -13,7 +13,8 @@
 <!ELEMENT  para         (#PCDATA | link | links | br | list | note |
                          i | b | nobr | table | literal | command |
                          path | header | value | programlisting |
-                         initial | mainline_version | stable_version |
+                         initial |
+                         mainline_version | stable_version | commercial_version |
                          registered | c-func | http-status)* >
 
 <!ELEMENT  links        (link)+ >
@@ -30,7 +31,8 @@
 <!ELEMENT  i            (#PCDATA) >
 <!ELEMENT  b            (#PCDATA) >
 <!ELEMENT  command      (#PCDATA | value)* >
-<!ELEMENT  path         (#PCDATA | value | mainline_version | stable_version)* >
+<!ELEMENT  path         (#PCDATA | value |
+                         mainline_version | stable_version | commercial_version)* >
 <!ELEMENT  literal      (#PCDATA | value)* >
 <!ELEMENT  header       (#PCDATA) >
 <!ELEMENT  initial      (#PCDATA) >
@@ -47,7 +49,7 @@
 >
 
 <!ELEMENT  programlisting  (#PCDATA | i | b | path |
-                            mainline_version | stable_version)* >
+                            mainline_version | stable_version | commercial_version)* >
 
 <!ELEMENT  nobr         (#PCDATA | b | command | i | literal | path)* >
 
@@ -59,7 +61,8 @@
 
 <!ELEMENT  listitem     (#PCDATA | para | br | nobr | list | i | b |
                          path | literal | value | var | programlisting |
-                         link | registered)* >
+                         link | registered |
+                         mainline_version | stable_version | commercial_version)* >
 <!ATTLIST  listitem
            id           ID #IMPLIED
 >
@@ -67,7 +70,7 @@
 <!ELEMENT  note         (#PCDATA | para | br | list | i | b | link |
                          nobr | table | literal | command | path |
                          header | programlisting | initial | paypal |
-                         mainline_version | stable_version )* >
+                         mainline_version | stable_version | commercial_version)* >
 
 <!ELEMENT  table        (tr+) >
 <!ATTLIST  table
@@ -83,8 +86,9 @@
 
 <!ELEMENT  paypal       EMPTY >
 
-<!ELEMENT  mainline_version  EMPTY >
-<!ELEMENT  stable_version    EMPTY >
+<!ELEMENT  mainline_version    EMPTY >
+<!ELEMENT  stable_version      EMPTY >
+<!ELEMENT  commercial_version  EMPTY >
 
 <!ELEMENT  book         EMPTY >
 <!ATTLIST  book
--- a/dtd/module.dtd
+++ b/dtd/module.dtd
@@ -38,7 +38,8 @@
 
 <!ELEMENT   para        (#PCDATA | c-def | c-func | command |
                          emphasis | example | header | http-status | link |
-                         list | literal | note | path | value | var)* >
+                         list | literal | note | path | value | var |
+                         mainline_version | stable_version | commercial_version)* >
 
 <!ELEMENT   c-def       (#PCDATA)* >
 
@@ -95,3 +96,7 @@
 
 <!ENTITY    nbsp        "&#xA0;" >
 <!ENTITY    mdash       "&nbsp;- " >
+
+<!ELEMENT   mainline_version    EMPTY >
+<!ELEMENT   stable_version      EMPTY >
+<!ELEMENT   commercial_version  EMPTY >
--- a/xml/en/GNUmakefile
+++ b/xml/en/GNUmakefile
@@ -42,6 +42,7 @@ REFS =									\
 		http/ngx_http_dav_module				\
 		http/ngx_http_empty_gif_module				\
 		http/ngx_http_fastcgi_module				\
+		http/ngx_http_f4f_module				\
 		http/ngx_http_flv_module				\
 		http/ngx_http_geo_module				\
 		http/ngx_http_geoip_module				\
@@ -49,6 +50,7 @@ REFS =									\
 		http/ngx_http_gzip_module				\
 		http/ngx_http_gzip_static_module			\
 		http/ngx_http_headers_module				\
+		http/ngx_http_hls_module				\
 		http/ngx_http_image_filter_module			\
 		http/ngx_http_index_module				\
 		http/ngx_http_limit_conn_module				\
@@ -65,9 +67,11 @@ REFS =									\
 		http/ngx_http_rewrite_module				\
 		http/ngx_http_secure_link_module			\
 		http/ngx_http_spdy_module				\
+		http/ngx_http_session_log_module			\
 		http/ngx_http_split_clients_module			\
 		http/ngx_http_ssi_module				\
 		http/ngx_http_ssl_module				\
+		http/ngx_http_status_module				\
 		http/ngx_http_sub_module				\
 		http/ngx_http_upstream_module				\
 		http/ngx_http_userid_module				\
new file mode 100644
--- /dev/null
+++ b/xml/en/docs/http/ngx_http_f4f_module.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+
+<!--
+  Copyright (C) Nginx, Inc.
+  -->
+
+<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
+
+<module name="Module ngx_http_f4f_module"
+        link="/en/docs/http/ngx_http_f4f_module.html"
+        lang="en"
+        rev="1">
+
+<section id="summary">
+
+<para>
+The module <literal>ngx_http_f4f_module</literal> provides
+server-side support for Adobe HTTP Dynamic Streaming (HDS).
+</para>
+
+<para>
+This module implements handling of HTTP Dynamic Streaming requests in a
+“<literal>/videoSeg1-Frag1</literal>” form, extracting needed fragment
+from the <path>videoSeg1.f4f</path> file using the <path>videoSeg1.f4x</path>
+index file.
+This module is an alternative to the Adobe’s f4f module (HTTP Origin Module)
+for Apache.
+</para>
+
+<para>
+Usual pre-processing with Adobe’s f4fpackager is required, see relevant
+documentation for details.
+</para>
+
+<para>
+<note>
+This module is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</section>
+
+
+<section id="example" name="Example Configuration">
+
+<para>
+<example>
+location /video/ {
+    f4f;
+    ...
+}
+</example>
+</para>
+
+</section>
+
+
+<section id="directives" name="Directives">
+
+<directive name="f4f">
+<syntax/>
+<default/>
+<context>location</context>
+
+<para>
+Turns on module processing in a surrounding location.
+</para>
+
+</directive>
+
+
+<directive name="f4f_buffer_size">
+<syntax><value>size</value></syntax>
+<default>512k</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Sets the size of a memory buffer used for reading <path>.f4x</path> index file.
+</para>
+
+</directive>
+
+</section>
+
+</module>
new file mode 100644
--- /dev/null
+++ b/xml/en/docs/http/ngx_http_hls_module.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0"?>
+
+<!--
+  Copyright (C) Nginx, Inc.
+  -->
+
+<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
+
+<module name="Module ngx_http_hls_module"
+        link="/en/docs/http/ngx_http_hls_module.html"
+        lang="en"
+        rev="1">
+
+<section id="summary">
+
+<para>
+The module <literal>ngx_http_hls_module</literal> provides HTTP Live Streaming
+(HLS) server-side support for H.264/AAC files typically having filename
+extensions <path>.mp4</path>, <path>.m4v</path>, and <path>.m4a</path>.
+</para>
+
+<para>
+Two URIs are supported for each MP4 file:
+<list type="bullet">
+
+<listitem>
+The playlist URI that ends with “<literal>.m3u8</literal>” and accepts
+the optional “<literal>len</literal>” argument that defines fragment length
+in seconds;
+</listitem>
+
+<listitem>
+The fragment URI that ends with “<literal>.ts</literal>” and accepts
+“<literal>start</literal>” and “<literal>end</literal>” arguments that
+define fragment boundaries in seconds.
+</listitem>
+
+</list>
+</para>
+
+<para>
+<note>
+This module is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</section>
+
+
+<section id="example" name="Example Configuration">
+
+<para>
+<example>
+location /video/ {
+    hls;
+    hls_fragment            5s;
+    hls_buffers             10 10m;
+    hls_mp4_buffer_size     1m;
+    hls_mp4_max_buffer_size 5m;
+    alias /var/video/;
+}
+</example>
+For example, the following URIs are supported for
+the “<path>/var/video/test.mp4</path>” file:
+<example>
+http://hls.example.com/video/test.mp4.m3u8?len=8.000
+http://hls.example.com/video/test.mp4.ts?start=1.000&amp;end=2.200
+</example>
+</para>
+
+</section>
+
+
+<section id="directives" name="Directives">
+
+<directive name="hls">
+<syntax/>
+<default/>
+<context>location</context>
+
+<para>
+Turns on HLS streaming in a surrounding location.
+</para>
+
+</directive>
+
+
+<directive name="hls_buffers">
+<syntax><value>number</value> <value>size</value></syntax>
+<default>8 2m</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Sets the maximum <value>number</value> and <value>size</value> of buffers
+for reading and writing data frames.
+</para>
+
+</directive>
+
+
+<directive name="hls_fragment">
+<syntax><value>time</value></syntax>
+<default>5s</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Defines fragment length for playlist URIs requested without the
+“<literal>len</literal>” argument.
+</para>
+
+</directive>
+
+
+<directive name="hls_mp4_buffer_size">
+<syntax><value>size</value></syntax>
+<default>512k</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Sets the initial <value>size</value> of a memory buffer used to
+process MP4 files.
+</para>
+
+</directive>
+
+
+<directive name="hls_mp4_max_buffer_size">
+<syntax><value>size</value></syntax>
+<default>10m</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+During metadata processing, a larger buffer may become necessary.
+Its size cannot exceed the specified <value>size</value>,
+or else nginx will return the server error
+<http-status code="500" text="Internal Server Error"/>,
+and log the following:
+<example>
+"/some/movie/file.mp4" mp4 moov atom is too large:
+12583268, you may want to increase hls_mp4_max_buffer_size
+</example>
+</para>
+
+</directive>
+
+</section>
+
+</module>
--- a/xml/en/docs/http/ngx_http_log_module.xml
+++ b/xml/en/docs/http/ngx_http_log_module.xml
@@ -10,7 +10,7 @@
 <module name="Module ngx_http_log_module"
         link="/en/docs/http/ngx_http_log_module.html"
         lang="en"
-        rev="9">
+        rev="10">
 
 <section id="summary">
 
@@ -58,6 +58,9 @@ access_log /spool/logs/nginx-access.log 
     <literal>gzip[=<value>level</value>]</literal>
     [<literal>buffer</literal>=<value>size</value>]
     [<literal>flush</literal>=<value>time</value>]</syntax>
+<syntax>
+    <literal>syslog:</literal><literal>server</literal>=<value>address</value>[,<value>parameter</value>=<value>value</value>]
+    [<value>format</value>]</syntax>
 <syntax><literal>off</literal></syntax>
 <default>logs/access.log combined</default>
 <context>http</context>
@@ -69,6 +72,8 @@ access_log /spool/logs/nginx-access.log 
 <para>
 Sets the path, format, and configuration of the buffered log writes.
 Several logs can be specified on the same level.
+Logging to syslog can be configured by specifying
+the “<literal>syslog:</literal>” prefix in the first parameter.
 The special value <literal>off</literal> cancels all
 <literal>access_log</literal> directives on the current level.
 If format is not specified then the predefined format
@@ -174,6 +179,75 @@ server {
 </list>
 </para>
 
+<para>
+The following parameters configure logging to syslog:
+<list type="tag">
+
+<tag-name><literal>server=</literal><value>address</value></tag-name>
+<tag-desc>
+Defines an address of a syslog server.
+An address can be specified as a domain name or IP address,
+and an optional port, or as a UNIX-domain socket path
+specified after the “<literal>unix:</literal>” prefix.
+If port is not specified, the port 514 is used.
+If a domain name resolves to several IP addresses, the first resolved
+address is used.
+</tag-desc>
+
+<tag-name><literal>facility=</literal><value>string</value></tag-name>
+<tag-desc>
+Sets facility of syslog messages, as defined in
+<link url="http://tools.ietf.org/html/rfc3164#section-4.1.1">RFC 3164</link>.
+Facility can be one of “<literal>kern</literal>”, “<literal>user</literal>”,
+“<literal>mail</literal>”, “<literal>daemon</literal>”,
+“<literal>auth</literal>”, “<literal>intern</literal>”,
+“<literal>lpr</literal>”, “<literal>news</literal>”, “<literal>uucp</literal>”,
+“<literal>clock</literal>”, “<literal>authpriv</literal>”,
+“<literal>ftp</literal>”, “<literal>ntp</literal>”, “<literal>audit</literal>”,
+“<literal>alert</literal>”, “<literal>cron</literal>”,
+“<literal>local0</literal>”..“<literal>local7</literal>”.
+Default is “<literal>local7</literal>”.
+</tag-desc>
+
+<tag-name><literal>severity=</literal><value>string</value></tag-name>
+<tag-desc>
+Sets severity of syslog messages, as defined in
+<link url="http://tools.ietf.org/html/rfc3164#section-4.1.1">RFC 3164</link>.
+Possible values are the same as for the second parameter (level) of the
+<link doc="../ngx_core_module.xml" id="error_log"/> directive.
+Default is “<literal>info</literal>”.
+</tag-desc>
+
+<tag-name><literal>tag=</literal><value>string</value></tag-name>
+<tag-desc>
+Sets tag of syslog messages.
+Default is “<literal>nginx</literal>”.
+</tag-desc>
+
+<!--
+<tag-name><literal>bare=</literal><literal>on</literal> |
+<literal>off</literal></tag-name>
+<tag-desc>
+If enabled, messages are sent without syslog headers.
+Default is <literal>off</literal>.
+</tag-desc>
+-->
+
+</list>
+Example syslog configuration:
+<example>
+access_log syslog:server=192.168.1.1;
+access_log syslog:server=unix:/var/log/nginx.sock;
+access_log syslog:server=[2001:db8::1]:12345,facility=local7,tag=nginx,severity=info combined;
+</example>
+</para>
+
+<para>
+<note>
+Logging to syslog is available as part of our <commercial_version/> only.
+</note>
+</para>
+
 </directive>
 
 
--- a/xml/en/docs/http/ngx_http_mp4_module.xml
+++ b/xml/en/docs/http/ngx_http_mp4_module.xml
@@ -9,7 +9,7 @@
 <module name="Module ngx_http_mp4_module"
         link="/en/docs/http/ngx_http_mp4_module.html"
         lang="en"
-        rev="1">
+        rev="2">
 
 <section id="summary">
 
@@ -100,8 +100,10 @@ A similar pseudo-streaming support for F
 <example>
 location /video/ {
     mp4;
-    mp4_buffer_size     1m;
-    mp4_max_buffer_size 5m;
+    mp4_buffer_size       1m;
+    mp4_max_buffer_size   5m;
+    mp4_limit_rate        on;
+    mp4_limit_rate_after  30s;
 }
 </example>
 </para>
@@ -158,6 +160,53 @@ 12583268, you may want to increase mp4_m
 
 </directive>
 
+
+<directive name="mp4_limit_rate">
+<syntax>
+    <literal>on</literal> |
+    <literal>off</literal> |
+    <value>factor</value></syntax>
+<default>off</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Enables or disables rate limiting based on an average bitrate of the
+MP4 file served.
+To calculate the rate, bitrate is multiplied by the specified
+<value>factor</value>.
+The special value “<literal>on</literal>” corresponds to a factor of 1.1.
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
+<directive name="mp4_limit_rate_after">
+<syntax><value>time</value></syntax>
+<default>1m</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Limits rate after sending the specified amount of media data.
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
 </section>
 
 </module>
new file mode 100644
--- /dev/null
+++ b/xml/en/docs/http/ngx_http_session_log_module.xml
@@ -0,0 +1,155 @@
+<?xml version="1.0"?>
+
+<!--
+  Copyright (C) Nginx, Inc.
+  -->
+
+<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
+
+<module name="Module ngx_http_session_log_module"
+        link="/en/docs/http/ngx_http_session_log_module.html"
+        lang="en"
+        rev="1">
+
+<section id="summary">
+
+<para>
+The module <literal>ngx_http_session_log_module</literal> allows to log
+sessions (i.e. aggregates of multiple HTTP requests) instead of
+individual HTTP requests.
+</para>
+
+<para>
+<note>
+This module is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</section>
+
+
+<section id="example" name="Example Configuration">
+
+<para>
+Log sessions based on client address and <header>User-Agent</header>
+request header field:
+<example>
+    session_log_zone /path/to/log format=combined
+                     zone=one:1m timeout=30s
+                     md5=$binary_remote_addr$http_user_agent;
+
+    location /media/ {
+        session_log one;
+    }
+</example>
+</para>
+
+</section>
+
+
+<section id="directives" name="Directives">
+
+<directive name="session_log_format">
+<syntax>
+    <value>name</value>
+    <value>string</value> ...</syntax>
+<default>combined "..."</default>
+<context>http</context>
+
+<para>
+Specifies format of a log.
+Value of the <var>$body_bytes_sent</var> variable is aggregated across
+all requests in the session.
+Everything else corresponds to the first request that started a session.
+</para>
+
+</directive>
+
+
+<directive name="session_log_zone">
+<syntax>
+    <value>path</value>
+    <literal>zone</literal>=<value>name</value>:<value>size</value>
+    [<literal>format</literal>=<value>format</value>]
+    [<literal>timeout</literal>=<value>time</value>]
+    [<literal>id</literal>=<value>id</value>]
+    [<literal>md5</literal>=<value>md5</value>]
+</syntax>
+<default/>
+<context>http</context>
+
+<para>
+Sets path to log file and shared memory zone used to store currently active
+sessions.
+</para>
+
+<para>
+Sessions are considered active for as long as the time elapsed since
+the last request in the session does not exceed a specified
+<literal>timeout</literal> (by default, 30 seconds).
+Session is logged once it is no longer active.
+</para>
+
+<para>
+Requests are mapped into sessions based on the value of the
+<literal>id</literal> parameter.
+If <literal>id</literal> is not specified or does not represent the valid
+MD5 hash, a new session is created using MD5 hash computed from the value
+of the <literal>md5</literal> parameter.
+Both <literal>id</literal> and <literal>md5</literal> parameters
+can contain variables.
+</para>
+
+<para>
+The <literal>format</literal> parameter can be used to set custom session log
+format.
+If <literal>format</literal> is not specified then the predefined format
+“<literal>combined</literal>” is used.
+</para>
+
+</directive>
+
+
+<directive name="session_log">
+<syntax><value>name</value> | <literal>off</literal></syntax>
+<default>off</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+Use the specified session log.
+The special value <literal>off</literal> cancels all
+<literal>session_log</literal> directives inherited from the previous
+configuration level.
+</para>
+
+</directive>
+
+</section>
+
+
+<section id="variables" name="Embedded Variables">
+
+<para>
+The <literal>ngx_http_session_log_module</literal> module supports
+two embedded variables:
+
+<list type="tag">
+
+<tag-name><var>$session_log_id</var></tag-name>
+<tag-desc>
+current session ID;
+</tag-desc>
+
+<tag-name><var>$session_log_binary_id</var></tag-name>
+<tag-desc>
+current session ID in binary form (16 bytes).
+</tag-desc>
+
+</list>
+</para>
+
+</section>
+
+</module>
new file mode 100644
--- /dev/null
+++ b/xml/en/docs/http/ngx_http_status_module.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0"?>
+
+<!--
+  Copyright (C) Nginx, Inc.
+  -->
+
+<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
+
+<module name="Module ngx_http_status_module"
+        link="/en/docs/http/ngx_http_status_module.html"
+        lang="en"
+        rev="1">
+
+<section id="summary">
+
+<para>
+The module <literal>ngx_http_status_module</literal> provides
+access to various status information.
+</para>
+
+<para>
+<note>
+This module is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</section>
+
+
+<section id="example" name="Example Configuration">
+
+<para>
+<example>
+location = /status {
+    status;
+}
+</example>
+</para>
+
+<para>
+The simple monitoring page is shipped with this distribution,
+accessible as “<literal>/status.html</literal>” in the default configuration.
+It requires the location “<literal>/status</literal>” to be configured
+as shown above.
+</para>
+
+</section>
+
+
+<section id="directives" name="Directives">
+
+<directive name="status">
+<syntax/>
+<default/>
+<context>location</context>
+
+<para>
+The status information will be accessible from the surrounding location.
+</para>
+
+</directive>
+
+
+<directive name="status_format">
+<syntax><literal>json</literal></syntax>
+<syntax><literal>jsonp</literal> [<value>callback</value>]</syntax>
+<default>json</default>
+<context>http</context>
+<context>server</context>
+<context>location</context>
+
+<para>
+By default, status information is output in the JSON format.
+</para>
+
+<para>
+Alternatively, data may be output as JSONP.
+The <value>callback</value> parameter specifies the name of a callback function.
+The value can contain variables.
+If parameter is omitted, or the computed value is an empty string,
+then “<literal>ngx_status_jsonp_callback</literal>” is used.
+</para>
+
+</directive>
+
+</section>
+
+
+<section id="data" name="Data">
+
+<para>
+The following status information is provided:
+<list type="tag">
+
+<tag-name><literal>version</literal></tag-name>
+<tag-desc>
+Version of the provided data set.
+The current version is 1.
+</tag-desc>
+
+<tag-name><literal>nginx_version</literal></tag-name>
+<tag-desc>
+Version of nginx.
+</tag-desc>
+
+<tag-name><literal>address</literal></tag-name>
+<tag-desc>
+An address of the server that accepted status request.
+</tag-desc>
+
+<tag-name><literal>timestamp</literal></tag-name>
+<tag-desc>
+Current time in milliseconds since Epoch.
+</tag-desc>
+
+<tag-name><literal>connections</literal></tag-name>
+<tag-desc>
+<list type="tag">
+
+<tag-name><literal>accepted</literal></tag-name>
+<tag-desc>
+The total number of accepted client connections.
+</tag-desc>
+
+<tag-name><literal>dropped</literal></tag-name>
+<tag-desc>
+The total number of dropped client connections.
+</tag-desc>
+
+<tag-name><literal>active</literal></tag-name>
+<tag-desc>
+The current number of active client connections.
+</tag-desc>
+
+<tag-name><literal>idle</literal></tag-name>
+<tag-desc>
+The current number of idle client connections.
+</tag-desc>
+
+</list>
+</tag-desc>
+
+<tag-name><literal>requests</literal></tag-name>
+<tag-desc>
+<list type="tag">
+
+<tag-name><literal>total</literal></tag-name>
+<tag-desc>
+The total number of client requests.
+</tag-desc>
+
+<tag-name><literal>current</literal></tag-name>
+<tag-desc>
+The current number of client requests.
+</tag-desc>
+
+</list>
+</tag-desc>
+
+<tag-name><literal>upstreams</literal></tag-name>
+<tag-desc>
+For each
+<link doc="ngx_http_upstream_module.xml" id="server"/>
+in the
+<link doc="ngx_http_upstream_module.xml" id="zone">dynamically
+configurable</link>
+<link doc="ngx_http_upstream_module.xml" id="upstream">group</link>,
+the following data are provided:
+<list type="tag">
+
+<tag-name><literal>server</literal></tag-name>
+<tag-desc>
+An address of the
+<link doc="ngx_http_upstream_module.xml" id="server"/>.
+</tag-desc>
+
+<tag-name><literal>weight</literal></tag-name>
+<tag-desc>
+Weight of the
+<link doc="ngx_http_upstream_module.xml" id="server"/>.
+</tag-desc>
+
+<tag-name><literal>state</literal></tag-name>
+<tag-desc>
+Current state, which may be one of
+“<literal>up</literal>”,
+“<literal>down</literal>”,
+“<literal>unavail</literal>”,
+or
+“<literal>unhealthy</literal>”.
+</tag-desc>
+
+<tag-name><literal>active</literal></tag-name>
+<tag-desc>
+The current number of active connections.
+</tag-desc>
+
+<tag-name><literal>keepalive</literal></tag-name>
+<tag-desc>
+The current number of
+idle <link doc="ngx_http_upstream_module.xml" id="keepalive"/> connections.
+</tag-desc>
+
+<tag-name><literal>requests</literal></tag-name>
+<tag-desc>
+The total number of
+client requests forwarded to this server.
+</tag-desc>
+
+<tag-name><literal>responses</literal></tag-name>
+<tag-desc>
+<list type="tag">
+
+<tag-name><literal>total</literal></tag-name>
+<tag-desc>
+The total number of
+responses obtained from this server.
+</tag-desc>
+
+<tag-name>
+<literal>1xx</literal>,
+<literal>2xx</literal>,
+<literal>3xx</literal>,
+<literal>4xx</literal>,
+<literal>5xx</literal>
+</tag-name>
+<tag-desc>
+The number of responses with status codes 1xx, 2xx, 3xx, 4xx, and 5xx.
+</tag-desc>
+
+</list>
+</tag-desc>
+
+<tag-name><literal>sent</literal></tag-name>
+<tag-desc>
+The total bytes sent to this server.
+</tag-desc>
+
+<tag-name><literal>received</literal></tag-name>
+<tag-desc>
+The total bytes received from this server.
+</tag-desc>
+
+<tag-name><literal>fails</literal></tag-name>
+<tag-desc>
+The total number of
+unsuccessful attempts to communicate with the server.
+</tag-desc>
+
+<tag-name><literal>unavail</literal></tag-name>
+<tag-desc>
+How many times
+the server became unavailable for client requests
+(state “<literal>unavail</literal>”)
+due to the number of unsuccessful attempts reaching
+the <literal>max_fails</literal> threshold.
+</tag-desc>
+
+<tag-name><literal>health_checks</literal></tag-name>
+<tag-desc>
+<list type="tag">
+
+<tag-name><literal>checks</literal></tag-name>
+<tag-desc>
+The total number of
+<link doc="ngx_http_upstream_module.xml" id="health_check">health check</link>
+requests made.
+</tag-desc>
+
+<tag-name><literal>fails</literal></tag-name>
+<tag-desc>
+The number of failed health checks.
+</tag-desc>
+
+<tag-name><literal>unhealthy</literal></tag-name>
+<tag-desc>
+How many times
+the server became unhealthy (state “<literal>unhealthy</literal>”).
+</tag-desc>
+
+<tag-name><literal>last_passed</literal></tag-name>
+<tag-desc>
+Boolean indicating
+if the last health check request was successful and passed
+<link doc="ngx_http_upstream_module.xml" id="match">tests</link>.
+</tag-desc>
+
+</list>
+</tag-desc>
+
+</list>
+</tag-desc>
+
+<tag-name><literal>downtime</literal></tag-name>
+<tag-desc>
+Total time
+the server was in the “<literal>unavail</literal>”
+and “<literal>unhealthy</literal>” states.
+</tag-desc>
+
+<tag-name><literal>downstart</literal></tag-name>
+<tag-desc>
+The time (in milliseconds since Epoch)
+when the server became
+“<literal>unavail</literal>”
+or “<literal>unhealthy</literal>”.
+</tag-desc>
+
+</list>
+</para>
+
+</section>
+
+</module>
--- a/xml/en/docs/http/ngx_http_upstream_module.xml
+++ b/xml/en/docs/http/ngx_http_upstream_module.xml
@@ -10,7 +10,7 @@
 <module name="Module ngx_http_upstream_module"
         link="/en/docs/http/ngx_http_upstream_module.html"
         lang="en"
-        rev="4">
+        rev="5">
 
 <section id="summary">
 
@@ -46,6 +46,36 @@ server {
 </example>
 </para>
 
+<para>
+Dynamically configurable group,
+available as part of our <commercial_version/> only:
+<example>
+upstream <emphasis>appservers</emphasis> {
+    zone appservers 64k;
+
+    server appserv1.example.com      weight=5;
+    server appserv2.example.com:8080 fail_timeout=5s;
+    server 192.0.2.1                 max_fails=3;
+
+    server reserve1.example.com:8080 backup;
+    server reserve2.example.com:8080 backup;
+}
+
+server {
+    location / {
+        proxy_pass http://<emphasis>appservers</emphasis>;
+        health_check;
+    }
+
+    location /upstream_conf {
+        upstream_conf;
+        allow 127.0.0.1;
+        deny all;
+    }
+}
+</example>
+</para>
+
 </section>
 
 
@@ -180,6 +210,30 @@ upstream backend {
 </directive>
 
 
+<directive name="zone">
+<syntax><value>name</value> <value>size</value></syntax>
+<default/>
+<context>upstream</context>
+
+<para>
+Makes the group dynamically configurable.
+Defines the <value>name</value> and <value>size</value> of a shared
+memory zone that keeps group’s configuration and run-time state that are
+shared between worker processes.
+Such groups allow to add, remove, and modify servers at run time.
+The configuration is accessible via a special location handled by
+<link id="upstream_conf"/>.
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
 <directive name="ip_hash">
 <syntax/>
 <default/>
@@ -364,6 +418,640 @@ weighted round-robin balancing method.
 
 </directive>
 
+
+<directive name="health_check">
+<syntax>
+    [<literal>interval=</literal><value>time</value>]
+<!--
+    [<literal>jitter=</literal><value>time</value>]
+-->
+    [<literal>fails=</literal><value>number</value>]
+    [<literal>passes=</literal><value>number</value>]
+    [<literal>uri=</literal><value>uri</value>]
+    [<literal>match=</literal><value>name</value>]</syntax>
+
+<default/>
+<context>location</context>
+
+<para>
+Enables periodic health checks of servers in a
+<link id="upstream">group</link> referenced in the surrounding location.
+</para>
+
+<para>
+The following optional parameters are supported:
+<list type="bullet">
+
+<listitem>
+<literal>interval</literal>
+sets interval between two consecutive health checks,
+defaults to five seconds;
+</listitem>
+
+<listitem>
+<literal>fails</literal>
+sets a number of consecutive failed health checks
+after which the server will be considered unhealthy,
+defaults to 1;
+</listitem>
+
+<listitem>
+<literal>passes</literal>
+sets a number of consecutive passed health checks
+after which the server will be considered healthy,
+defaults to 1;
+</listitem>
+
+<listitem>
+<literal>uri</literal>
+defines the URI used in health check requests,
+defaults to “<literal>/</literal>”;
+</listitem>
+
+<listitem>
+<literal>match</literal>
+names tests that a response should
+pass in order for a health check to pass,
+defaults to responses with status codes 2xx and 3xx.
+</listitem>
+
+</list>
+</para>
+
+<para>
+For example,
+<example>
+location / {
+    proxy_pass http://backend;
+    health_check;
+}
+</example>
+will send “<literal>/</literal>” requests to each
+server in the group <literal>backend</literal> every five seconds.
+If any communication errors or timeouts occur, or if a
+proxied server responds with the status code other than
+2xx or 3xx, health check will fail, and the server will
+become unhealthy.
+Client requests will not be passed to unhealthy servers.
+</para>
+
+<para>
+Health checks can be configured to test status code of a response,
+presence of certain header fields and their values,
+and/or the body contents.
+Tests are configured separately with the <link id="match"/> directives
+and referenced in the <literal>match</literal> parameter.
+For example,
+<example>
+http {
+    server {
+    ...
+        location / {
+            proxy_pass http://backend;
+            health_check match=welcome;
+        }
+    }
+
+    match welcome {
+        status 200;
+        header Content-Type = text/html;
+        body ~ "Welcome to nginx!";
+    }
+}
+</example>
+tells that for a health check to pass, a response should succeed,
+have status 200, content type “<literal>text/html</literal>”,
+and contain “<literal>Welcome to nginx!</literal>” in the body.
+</para>
+
+<para>
+It is required that a group be in <link id="zone">shared memory</link>.
+</para>
+
+<para>
+If several health checks are defined for the same group of servers,
+a single failure of any check will make the corresponding server
+to become unhealthy.
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
+<directive name="match">
+<syntax block="yes"><value>name</value></syntax>
+<default/>
+<context>http</context>
+
+<para>
+Defines the named test set used to verify responses to health check requests.
+</para>
+
+<para>
+The following can be tested in a response:
+<list type="tag">
+
+<tag-name><literal>status 200;</literal></tag-name>
+<tag-desc>status is 200</tag-desc>
+
+<tag-name><literal>status ! 500;</literal></tag-name>
+<tag-desc>status is not 500</tag-desc>
+
+<tag-name><literal>status 200 204;</literal></tag-name>
+<tag-desc>status is 200 or 204</tag-desc>
+
+<tag-name><literal>status ! 301 302;</literal></tag-name>
+<tag-desc>status is neither 301 nor 302</tag-desc>
+
+<tag-name><literal>status 200-399;</literal></tag-name>
+<tag-desc>status is in the 200..399 range</tag-desc>
+
+<tag-name><literal>status ! 400-599;</literal></tag-name>
+<tag-desc>status is not in the 400..599 range</tag-desc>
+
+<tag-name><literal>status 301-303 307;</literal></tag-name>
+<tag-desc>status is one of 301, 302, 303, or 307</tag-desc>
+
+</list>
+
+<list type="tag">
+
+<tag-name><literal>header Content-Type = text/html;</literal></tag-name>
+<tag-desc>
+header contains <header>Content-Type</header>
+with value <literal>text/html</literal>
+</tag-desc>
+
+<tag-name><literal>header Content-Type != text/html;</literal></tag-name>
+<tag-desc>
+header contains <header>Content-Type</header>
+with value other than <literal>text/html</literal>
+</tag-desc>
+
+<tag-name><literal>header Connection ~ close;</literal></tag-name>
+<tag-desc>
+header contains <header>Connection</header>
+with value matching regular expression <literal>close</literal>
+</tag-desc>
+
+<tag-name><literal>header Connection !~ close;</literal></tag-name>
+<tag-desc>
+header contains <header>Connection</header>
+with value not matching regular expression <literal>close</literal>
+</tag-desc>
+
+<tag-name><literal>header Host;</literal></tag-name>
+<tag-desc>header contains <header>Host</header></tag-desc>
+
+<tag-name><literal>header ! X-Accel-Redirect;</literal></tag-name>
+<tag-desc>header lacks <header>X-Accel-Redirect</header></tag-desc>
+
+</list>
+
+<list type="tag">
+
+<tag-name><literal>body ~ "Welcome to nginx!";</literal></tag-name>
+<tag-desc>
+body matches regular expression “<literal>Welcome to nginx!</literal>”
+</tag-desc>
+
+<tag-name><literal>body !~ "Welcome to nginx!";</literal></tag-name>
+<tag-desc>
+body does not match regular expression “<literal>Welcome to nginx!</literal>”
+</tag-desc>
+
+</list>
+</para>
+
+<para>
+If several tests are specified,
+the response matches only if it passes all tests.
+<note>
+Only the first 256k of body are examined.
+</note>
+</para>
+
+<para>
+Examples:
+<example>
+# status is 200, content type is "text/html",
+# and body contains "Welcome to nginx!"
+match welcome {
+    status 200;
+    header Content-Type = text/html;
+    body ~ "Welcome to nginx!";
+}
+</example>
+
+<example>
+# status is not one of 301, 302, 303, or 307, and header does not have "Refresh:"
+match not_redirect {
+    status ! 301-303 307;
+    header ! Refresh;
+}
+</example>
+
+<example>
+# status ok and not in maintenance mode
+match server_ok {
+    status 200-399;
+    body !~ "maintenance mode";
+}
+</example>
+
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
+<directive name="sticky">
+<syntax/>
+<default/>
+<context>upstream</context>
+
+<para>
+Enables session affinity support.
+The session is an object that is used to uniquely identify and maintain the
+state of a client during a given period of time.
+If session affinity is enabled, a client’s requests are always passed to the
+same server (in a group of servers) once a session has been created.
+Method used to create and track sessions must be specified by a separate
+directive, for example, <link id="sticky_cookie_insert"/>.
+<example>
+upstream backend {
+    server backend1.example.com;
+    server backend2.example.com;
+
+    sticky;
+    sticky_cookie_insert "sticky";
+}
+
+server {
+    location / {
+        proxy_pass http://backend;
+    }
+}
+</example>
+The directive must be specified after the <link id="ip_hash"/> or the
+<link id="least_conn"/> directives.
+</para>
+
+<para>
+Requests are processed as follows with the session affinity enabled:
+<list type="enum">
+
+<listitem>
+The lookup of session corresponding to request is performed.
+If the session is found, server identification data is extracted from it.
+This data is used by the server selection algorithm.
+</listitem>
+
+<listitem>
+The server to process the request is chosen according to the configured
+balancing method, server information from session and the real state of
+servers in a group (up or down, failed, etc.).
+</listitem>
+
+<listitem>
+The request is passed to the chosen server for processing.
+If the chosen server does not match specified in the session
+(due to being down, for example), the session is cleared
+and the request is processed as it had no session.
+</listitem>
+
+<listitem>
+The server returns the response.
+</listitem>
+
+<listitem>
+If there was no session for the request, new session
+is created and server identification data is stored in it.
+</listitem>
+
+</list>
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
+<directive name="sticky_cookie_insert">
+<syntax><value>name</value>
+[<literal>expires=</literal><value>time</value>]
+[<literal>domain=</literal><value>host</value>]
+[<literal>path=</literal><value>path</value>]</syntax>
+<default/>
+<context>upstream</context>
+
+<para>
+Enables and configures the session tracking method, based on keeping
+session information in HTTP cookies.
+The directive must be specified after the <link id="ip_hash"/> or the
+<link id="least_conn"/> directives.
+Example:
+<example>
+sticky_cookie_insert "srv_id" "expires=1h 7m" domain=example.com path=/;
+</example>
+The first parameter sets the name of the cookie to be inserted or inspected.
+Additional parameters may be as follows:
+<list type="tag">
+
+<tag-name><literal>expires</literal></tag-name>
+<tag-desc>
+Sets a time during which a browser should keep the cookie.
+The parameter “<literal>max</literal>” sets the time to
+“<literal>31 Dec 2037 23:55:55 GMT</literal>”.
+This is the maximum time understood by old browsers.
+</tag-desc>
+
+<tag-name><literal>domain</literal></tag-name>
+<tag-desc>
+Defines a domain for which the cookie is set.
+</tag-desc>
+
+<tag-name><literal>path</literal></tag-name>
+<tag-desc>
+Defines a path for which the cookie is set.
+</tag-desc>
+
+</list>
+If some parameter is omitted, then the corresponding cookie field is not set.
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
+<directive name="sticky_log_requests">
+<syntax><literal>debug</literal> |
+<literal>info</literal> |
+<literal>notice</literal> |
+<literal>warn</literal> |
+<literal>error</literal></syntax>
+<default/>
+<context>upstream</context>
+
+<para>
+Enables logging of session-related operations and sets the desired
+logging level.
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
+
+<directive name="upstream_conf">
+<syntax/>
+<default/>
+<context>location</context>
+
+<para>
+Turns on upstream configuration HTTP interface in a surrounding location.
+Access to this location should be
+<link doc="ngx_http_core_module.xml" id="satisfy">limited</link>.
+</para>
+
+<para>
+Configuration commands allow to:
+<list type="bullet">
+
+<listitem>view all primary or backup servers in a group;</listitem>
+
+<listitem>view an individual server;</listitem>
+
+<listitem>modify an individual server;</listitem>
+
+<listitem>add a new server (see note below);</listitem>
+
+<listitem>remove an individual server.</listitem>
+
+</list>
+<note>
+As noted in the <link id="server"/> directive, adding a server specified
+as a domain name may result in several servers being added.
+Since addresses in a group are not required to be unique, individual
+servers in a group can be uniquely referenced to only by their ID.
+IDs are assigned automatically and shown when viewing group configuration.
+</note>
+</para>
+
+<para>
+A command consists of parameters passed as request arguments, for example:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers
+</example>
+</para>
+
+<para>
+The following parameters are supported:
+
+<list type="tag" compact="no">
+
+<tag-name>
+<literal>upstream=</literal><value>name</value></tag-name>
+<tag-desc>
+Selects a group.
+This parameter is mandatory.
+</tag-desc>
+
+<tag-name>
+<literal>backup=</literal>
+</tag-name>
+<tag-desc>
+If unset, selects primary servers in the group.
+If set, selects backup servers in the group.
+</tag-desc>
+
+<tag-name>
+<literal>id=</literal><value>number</value></tag-name>
+<tag-desc>
+Selects an individual primary or backup server in the group.
+</tag-desc>
+
+<tag-name>
+<literal>remove=</literal></tag-name>
+<tag-desc>
+Removes an individual primary or backup server from the group.
+</tag-desc>
+
+<tag-name>
+<literal>add=</literal></tag-name>
+<tag-desc>
+Adds a new primary or backup server to the group.
+</tag-desc>
+
+<tag-name>
+<literal>server=</literal><value>address</value></tag-name>
+<tag-desc>
+Same as the “<literal>address</literal>” parameter
+of the <link id="server"/> directive.
+</tag-desc>
+
+<tag-name>
+<literal>weight=</literal><value>number</value></tag-name>
+<tag-desc>
+Same as the “<literal>weight</literal>” parameter
+of the <link id="server"/> directive.
+</tag-desc>
+
+<tag-name>
+<literal>max_fails=</literal><value>number</value></tag-name>
+<tag-desc>
+Same as the “<literal>max_fails</literal>” parameter
+of the <link id="server"/> directive.
+</tag-desc>
+
+<tag-name>
+<literal>fail_timeout=</literal><value>time</value></tag-name>
+<tag-desc>
+Same as the “<literal>fail_timeout</literal>” parameter
+of the <link id="server"/> directive.
+</tag-desc>
+
+<tag-name>
+<literal>down=</literal></tag-name>
+<tag-desc>
+Same as the “<literal>down</literal>” parameter
+of the <link id="server"/> directive.
+</tag-desc>
+
+<tag-name>
+<literal>up=</literal></tag-name>
+<tag-desc>
+The opposite of the “<literal>down</literal>” parameter
+of the <link id="server"/> directive.
+</tag-desc>
+
+</list>
+
+The first three parameters select a target the command applies to.
+Without other parameters, configuration of the selected target
+is shown.
+</para>
+
+<para>
+For example, to view the primary servers in the group:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers
+</example>
+
+To view the backup servers in the group:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers&amp;backup=
+</example>
+
+To view an individual primary server in the group:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers&amp;id=42
+</example>
+
+To view an individual backup server in the group:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers&amp;backup=&amp;id=42
+</example>
+</para>
+
+<para>
+To add a new primary or backup server to the group,
+its address should be specified in the “<literal>server=</literal>” parameter.
+Without other parameters specified, a server will be added with other
+parameters set to their default values (see the <link id="server"/> directive).
+</para>
+
+<para>
+For example, to add a new primary server to the group:
+<example>
+http://127.0.0.1/upstream_conf?add=&amp;upstream=appservers&amp;server=127.0.0.1:8080
+</example>
+
+To add a new backup server to the group:
+<example>
+http://127.0.0.1/upstream_conf?add=&amp;upstream=appservers&amp;backup=&amp;server=127.0.0.1:8080
+</example>
+
+To add a new primary server to the group,
+set its parameters to non-default values
+and mark it “<literal>down</literal>”:
+<example>
+http://127.0.0.1/upstream_conf?add=&amp;upstream=appservers&amp;server=127.0.0.1:8080&amp;weight=2&amp;max_fails=3&amp;fail_timeout=3s&amp;down=
+</example>
+</para>
+
+<para>
+To remove an individual primary or backup server from the group,
+it should be selected with the <literal>id=</literal> parameter.
+</para>
+
+<para>
+For example, to remove an individual primary server from the group:
+<example>
+http://127.0.0.1/upstream_conf?remove=&amp;upstream=appservers&amp;id=42
+</example>
+
+To remove an individual backup server from the group:
+<example>
+http://127.0.0.1/upstream_conf?remove=&amp;upstream=appservers&amp;backup=&amp;id=42
+</example>
+</para>
+
+<para>
+To modify an individual primary or backup server in the group,
+it should be selected with the <literal>id=</literal> parameter.
+</para>
+
+<para>
+For example, to modify an individual primary server in the group
+by marking it “<literal>down</literal>”:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers&amp;id=42&amp;down=
+</example>
+
+To modify address of an individual backup server in the group:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers&amp;backup=&amp;id=42&amp;server=192.0.2.3:8123
+</example>
+
+To modify other parameters of an individual primary server in the group:
+<example>
+http://127.0.0.1/upstream_conf?upstream=appservers&amp;id=42&amp;max_fails=3&amp;weight=4
+</example>
+
+</para>
+
+<para>
+<note>
+This directive is available as part of our <commercial_version/> only.
+</note>
+</para>
+
+</directive>
+
 </section>
 
 
--- a/xml/en/docs/index.xml
+++ b/xml/en/docs/index.xml
@@ -8,7 +8,7 @@
 <article name="nginx documentation"
          link="/en/docs/"
          lang="en"
-         rev="8"
+         rev="9"
          toc="no">
 
 
@@ -196,6 +196,11 @@ ngx_http_empty_gif_module</link>
 </listitem>
 
 <listitem>
+<link doc="http/ngx_http_f4f_module.xml">
+ngx_http_f4f_module</link>
+</listitem>
+
+<listitem>
 <link doc="http/ngx_http_fastcgi_module.xml">
 ngx_http_fastcgi_module</link>
 </listitem>
@@ -236,6 +241,11 @@ ngx_http_headers_module</link>
 </listitem>
 
 <listitem>
+<link doc="http/ngx_http_hls_module.xml">
+ngx_http_hls_module</link>
+</listitem>
+
+<listitem>
 <link doc="http/ngx_http_image_filter_module.xml">
 ngx_http_image_filter_module</link>
 </listitem>
@@ -311,6 +321,11 @@ ngx_http_secure_link_module</link>
 </listitem>
 
 <listitem>
+<link doc="http/ngx_http_session_log_module.xml">
+ngx_http_session_log_module</link>
+</listitem>
+
+<listitem>
 <link doc="http/ngx_http_spdy_module.xml">
 ngx_http_spdy_module</link>
 </listitem>
@@ -331,6 +346,11 @@ ngx_http_ssl_module</link>
 </listitem>
 
 <listitem>
+<link doc="http/ngx_http_status_module.xml">
+ngx_http_status_module</link>
+</listitem>
+
+<listitem>
 <link doc="http/ngx_http_sub_module.xml">
 ngx_http_sub_module</link>
 </listitem>
--- a/xml/en/docs/ngx_core_module.xml
+++ b/xml/en/docs/ngx_core_module.xml
@@ -10,7 +10,7 @@
 <module name="Core functionality"
         link="/en/docs/ngx_core_module.html"
         lang="en"
-        rev="8">
+        rev="9">
 
 <section id="example" name="Example Configuration">
 
@@ -144,7 +144,8 @@ analysis using a system debugger.
 
 <directive name="error_log">
 <syntax>
-<value>file</value> | <literal>stderr</literal>
+<value>file</value> | <literal>stderr</literal> |
+<literal>syslog:</literal><literal>server</literal>=<value>address</value>[,<value>parameter</value>=<value>value</value>]
 [<literal>debug</literal> |
 <literal>info</literal> |
 <literal>notice</literal> |
@@ -170,6 +171,8 @@ The first parameter defines a file that 
 If filename is not absolute, it is prefixed with the prefix path.
 -->
 The special value <literal>stderr</literal> selects the standard error file.
+Logging to syslog can be configured by specifying
+the “<literal>syslog:</literal>” prefix.
 </para>
 
 <para>
@@ -189,6 +192,66 @@ see “<link doc="debugging_log.xml"/>”.
 </note>
 </para>
 
+<para>
+The following parameters configure logging to syslog:
+<list type="tag">
+
+<tag-name><literal>server=</literal><value>address</value></tag-name>
+<tag-desc>
+Defines an address of a syslog server.
+An address can be specified as a domain name or IP address,
+and an optional port, or as a UNIX-domain socket path
+specified after the “<literal>unix:</literal>” prefix.
+If port is not specified, the port 514 is used.
+If a domain name resolves to several IP addresses, the first resolved
+address is used.
+</tag-desc>
+
+<tag-name><literal>facility=</literal><value>string</value></tag-name>
+<tag-desc>
+Sets facility of syslog messages, as defined in
+<link url="http://tools.ietf.org/html/rfc3164#section-4.1.1">RFC 3164</link>.
+Facility can be one of “<literal>kern</literal>”, “<literal>user</literal>”,
+“<literal>mail</literal>”, “<literal>daemon</literal>”,
+“<literal>auth</literal>”, “<literal>intern</literal>”,
+“<literal>lpr</literal>”, “<literal>news</literal>”, “<literal>uucp</literal>”,
+“<literal>clock</literal>”, “<literal>authpriv</literal>”,
+“<literal>ftp</literal>”, “<literal>ntp</literal>”, “<literal>audit</literal>”,
+“<literal>alert</literal>”, “<literal>cron</literal>”,
+“<literal>local0</literal>”..“<literal>local7</literal>”.
+Default is “<literal>local7</literal>”.
+</tag-desc>
+
+<tag-name><literal>tag=</literal><value>string</value></tag-name>
+<tag-desc>
+Sets tag of syslog messages.
+Default is “<literal>nginx</literal>”.
+</tag-desc>
+
+<!--
+<tag-name><literal>bare=</literal><literal>on</literal> |
+<literal>off</literal></tag-name>
+<tag-desc>
+If enabled, messages are sent without syslog headers.
+Default is <literal>off</literal>.
+</tag-desc>
+-->
+
+</list>
+Example syslog configuration:
+<example>
+error_log syslog:server=192.168.1.1 debug;
+error_log syslog:server=unix:/var/log/nginx.sock;
+error_log syslog:server=[2001:db8::1]:12345,facility=local7,tag=nginx error;
+</example>
+</para>
+
+<para>
+<note>
+Logging to syslog is available as part of our <commercial_version/> only.
+</note>
+</para>
+
 </directive>
 
 
--- a/xsls/versions.xsls
+++ b/xsls/versions.xsls
@@ -15,4 +15,8 @@ X:template = "stable_version" {
                 /versions/download[@tag='stable'][1]/item[1]/@ver";
 }
 
+X:template = "commercial_version" {
+    <a href="http://nginx.com/products/">commercial subscription</a>
 }
+
+}
--- a/xslt/versions.xslt
+++ b/xslt/versions.xslt
@@ -11,4 +11,9 @@
       <xsl:apply-templates select="document(concat($XML, '/versions.xml'))                 /versions/download[@tag='stable'][1]/item[1]/@ver"/>
    </xsl:template>
 
+   <xsl:template match="commercial_version">
+
+      <a href="http://nginx.com/products/">commercial subscription</a>
+   </xsl:template>
+
 </xsl:stylesheet>