|  | <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>HTTP Core Module</title></head><body><center><h3>HTTP Core Module</h3></center><a name="directives"></a><center><h4>Directives</h4></center><hr><a name="aio"></a><strong>syntax</strong>: | 
|  | <code>aio | 
|  | <code>on</code> | | 
|  | <code>off</code> | | 
|  | <code>sendfile</code></code><br><strong>default</strong>: | 
|  | <code>aio off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><strong>appeared in version</strong>: | 
|  | 0.8.11<p> | 
|  | Enables or disables the use of asynchronous file I/O (AIO) | 
|  | on FreeBSD and Linux. | 
|  | </p><p> | 
|  | On FreeBSD, AIO is usable starting from FreeBSD 4.3. | 
|  | AIO can either be linked statically into a kernel: | 
|  | <blockquote><pre> | 
|  | options VFS_AIO | 
|  | </pre></blockquote> | 
|  | or loaded dynamically as a kernel loadable module: | 
|  | <blockquote><pre> | 
|  | kldload aio | 
|  | </pre></blockquote></p><p> | 
|  | In FreeBSD versions 5 and 6, enabling AIO statically, or dynamically | 
|  | when booting the kernel, will cause the entire networking subsystem | 
|  | to use the Giant lock that can impact overall performance negatively. | 
|  | This limitation has been removed in FreeBSD 6.4-STABLE in 2009, and in | 
|  | FreeBSD 7. | 
|  | However, starting from FreeBSD 5.3 it is possible to enable AIO | 
|  | without the penalty of running the networking subsystem under a | 
|  | Giant lock - for this to work, the AIO module needs to be loaded | 
|  | after the kernel has booted. | 
|  | In this case, the following message will appear in | 
|  | <code>/var/log/messages</code><blockquote><pre> | 
|  | WARNING: Network stack Giant-free, but aio requires Giant. | 
|  | Consider adding 'options NET_WITH_GIANT' or setting debug.mpsafenet=0 | 
|  | </pre></blockquote> | 
|  | and can safely be ignored. | 
|  |  | 
|  | The requirement to use the Giant lock with AIO is related to the | 
|  | fact that FreeBSD supports asynchronous calls | 
|  | <code>aio_read()</code> | 
|  | and | 
|  | <code>aio_write()</code> | 
|  | when working with sockets. | 
|  | However, since nginx only uses AIO for disk I/O, no problems should arise. | 
|  | </p><p> | 
|  | For AIO to work, | 
|  | <a href="#sendfile">sendfile</a> | 
|  | needs to be disabled: | 
|  | <blockquote><pre> | 
|  | location /video/ { | 
|  | sendfile       off; | 
|  | aio            on; | 
|  | output_buffers 1 64k; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | In addition, starting from FreeBSD 5.2.1 and nginx 0.8.12, AIO can | 
|  | also be used to pre-load data for <code>sendfile()</code>: | 
|  | <blockquote><pre> | 
|  | location /video/ { | 
|  | sendfile       on; | 
|  | tcp_nopush     on; | 
|  | aio            sendfile; | 
|  | } | 
|  | </pre></blockquote> | 
|  | In this configuration, <code>sendfile()</code> is called with | 
|  | the <code>SF_NODISKIO</code> flag which causes it not to | 
|  | block on disk I/O and instead report back when the data are not in | 
|  | memory; nginx then initiates an asynchronous data load by reading | 
|  | one byte. The FreeBSD kernel then loads the first 128K bytes | 
|  | of a file into memory, however next reads will only load data | 
|  | in 16K chunks. This can be tuned using the | 
|  | <a href="#read_ahead">read_ahead</a> | 
|  | directive. | 
|  | </p><p> | 
|  | On Linux, AIO is usable starting from kernel version 2.6.22; | 
|  | plus, it is also necessary to enable | 
|  | <a href="#directio">directio</a>, | 
|  | otherwise reading will be blocking: | 
|  | <blockquote><pre> | 
|  | location /video/ { | 
|  | aio            on; | 
|  | directio       512; | 
|  | output_buffers 1 128k; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | On Linux, | 
|  | <a href="#directio">directio</a> | 
|  | can only be used for reading blocks that are aligned on 512-byte | 
|  | boundaries (or 4K for XFS). | 
|  | Reading of unaligned file's end is still made in blocking mode. | 
|  | The same holds true for byte range requests, and for FLV requests | 
|  | not from the beginning of a file: reading of unaligned data at the | 
|  | beginning and end of a file will be blocking. | 
|  | There is no need to turn off | 
|  | <a href="#sendfile">sendfile</a> | 
|  | explicitly as it is turned off automatically when | 
|  | <a href="#directio">directio</a> | 
|  | is used. | 
|  | </p><hr><a name="alias"></a><strong>syntax</strong>: | 
|  | <code>alias <code><i>path</i></code></code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>location</code><br><p> | 
|  | Defines a replacement for the specified location. | 
|  | For example, with the following configuration | 
|  | <blockquote><pre> | 
|  | location /i/ { | 
|  | alias /data/w3/images/; | 
|  | } | 
|  | </pre></blockquote> | 
|  | the request of | 
|  | “<code>/i/top.gif</code>” will be responded | 
|  | with the file | 
|  | “<code>/data/w3/images/top.gif</code>”. | 
|  | </p><p> | 
|  | The <code><i>path</i></code> value can contain variables. | 
|  | </p><p> | 
|  | If <code>alias</code> is used inside a location defined | 
|  | with a regular expression then such regular expression should | 
|  | contain captures and <code>alias</code> should refer to | 
|  | these captures (0.7.40), for example: | 
|  | <blockquote><pre> | 
|  | location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ { | 
|  | alias /data/w3/images/$1; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | When location matches the last part of the directive's value: | 
|  | <blockquote><pre> | 
|  | location /images/ { | 
|  | alias /data/w3/images/; | 
|  | } | 
|  | </pre></blockquote> | 
|  | it is better to use the | 
|  | <a href="#root">root</a> | 
|  | directive instead: | 
|  | <blockquote><pre> | 
|  | location /images/ { | 
|  | root /data/w3; | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="client_body_in_file_only"></a><strong>syntax</strong>: | 
|  | <code>client_body_in_file_only | 
|  | <code>on</code> | | 
|  | <code>clean</code> | | 
|  | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>client_body_in_file_only off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Determines whether nginx should save the entire client request body | 
|  | into a file. | 
|  | This directive can be used during debugging, or when using the | 
|  | <code>$request_body_file</code> | 
|  | variable, or the | 
|  | <a href="ngx_http_perl_module.html#methods">$r->request_body_file</a> | 
|  | method of the module | 
|  | <a href="ngx_http_perl_module.html">ngx_http_perl_module</a>. | 
|  | </p><p> | 
|  | When set to the value <code>on</code>, temporary files are not | 
|  | removed after request processing. | 
|  | </p><p> | 
|  | The value <code>clean</code> will cause the temporary files | 
|  | left after request processing to be removed. | 
|  | </p><hr><a name="client_body_in_single_buffer"></a><strong>syntax</strong>: | 
|  | <code>client_body_in_single_buffer <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>client_body_in_single_buffer off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Determines whether nginx should save the entire client request body | 
|  | in a single buffer. | 
|  | The directive is recommended when using the | 
|  | <code>$request_body</code> | 
|  | variable, to save the number of copy operations involved. | 
|  | </p><hr><a name="client_body_buffer_size"></a><strong>syntax</strong>: | 
|  | <code>client_body_buffer_size <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>client_body_buffer_size 8k/16k</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets buffer size for reading client request body. | 
|  | In case request body is larger than the buffer, | 
|  | the whole body or only its part is written to a temporary file. | 
|  |  | 
|  | By default, buffer size is equal to two memory pages. | 
|  | This is 8K on x86, other 32-bit platforms, and x86-64. | 
|  | It is usually 16K on other 64-bit platforms. | 
|  | </p><hr><a name="client_body_temp_path"></a><strong>syntax</strong>: | 
|  | <code>client_body_temp_path | 
|  | <code><i>path</i></code> | 
|  | [<code><i>level1</i></code> | 
|  | [<code><i>level2</i></code> | 
|  | [<code><i>level3</i></code>]]] | 
|  | </code><br><strong>default</strong>: | 
|  | <code>client_body_temp_path client_body_temp</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Defines a directory for storing temporary files holding client request bodies. | 
|  | Up to three-level subdirectory hierarchy can be used underneath the specified | 
|  | directory. | 
|  | For example, in the following configuration | 
|  | <blockquote><pre> | 
|  | client_body_temp_path /spool/nginx/client_temp 1 2; | 
|  | </pre></blockquote> | 
|  | a temporary file might look like this: | 
|  | <blockquote><pre> | 
|  | /spool/nginx/client_temp/7/45/00000123457 | 
|  | </pre></blockquote></p><hr><a name="client_body_timeout"></a><strong>syntax</strong>: | 
|  | <code>client_body_timeout <code><i>time</i></code></code><br><strong>default</strong>: | 
|  | <code>client_body_timeout 60</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Defines a timeout for reading client request body. | 
|  | A timeout is only set between two successive read operations, | 
|  | not for the transmission of the whole request body. | 
|  | If a client does not transmit anything within this time, | 
|  | the client error | 
|  | 408 (Request Time-out) | 
|  | is returned. | 
|  | </p><hr><a name="client_header_buffer_size"></a><strong>syntax</strong>: | 
|  | <code>client_header_buffer_size <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>client_header_buffer_size 1k</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code><br><p> | 
|  | Sets buffer size for reading client request header. | 
|  | For most requests, a buffer of 1K bytes is enough. | 
|  | However, if a request includes long cookies, or comes from a WAP client, | 
|  | it may not fit into 1K. | 
|  | If a request line, or a request header field do not fit entirely into | 
|  | this buffer then larger buffers are allocated, configured by the | 
|  | <a href="#large_client_header_buffers">large_client_header_buffers</a> | 
|  | directive. | 
|  | </p><hr><a name="client_header_timeout"></a><strong>syntax</strong>: | 
|  | <code>client_header_timeout <code><i>time</i></code></code><br><strong>default</strong>: | 
|  | <code>client_header_timeout 60</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code><br><p> | 
|  | Defines a timeout for reading client request header. | 
|  | If a client does not transmit the entire header within this time, | 
|  | the client error | 
|  | 408 (Request Time-out) | 
|  | is returned. | 
|  | </p><hr><a name="client_max_body_size"></a><strong>syntax</strong>: | 
|  | <code>client_max_body_size <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>client_max_body_size 1m</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets the maximum allowed size of the client request body, | 
|  | specified in the | 
|  | <code>Content-Length</code> | 
|  | request header field. | 
|  | If it exceeds the configured value, the client error | 
|  | 413 (Request Entity Too Large) | 
|  | is returned. | 
|  | Please be aware that | 
|  | <a href="/web/upload.html">browsers cannot correctly display | 
|  | this error</a>. | 
|  | </p><hr><a name="default_type"></a><strong>syntax</strong>: | 
|  | <code>default_type <code><i>mime-type</i></code></code><br><strong>default</strong>: | 
|  | <code>default_type text/plain</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Defines a default MIME-type of a response. | 
|  | </p><hr><a name="directio"></a><strong>syntax</strong>: | 
|  | <code>directio <code><i>size</i></code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>directio off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><strong>appeared in version</strong>: | 
|  | 0.7.7<p> | 
|  | Enables the use of | 
|  | the <code>O_DIRECT</code> flag (FreeBSD, Linux), | 
|  | the <code>F_NOCACHE</code> flag (Mac OS X), | 
|  | or the <code>directio()</code> function (Solaris), | 
|  | when reading files that are larger than the specified <code><i>size</i></code>. | 
|  | It automatically disables (0.7.15) the use of | 
|  | <a href="#sendfile">sendfile</a> | 
|  | for a given request. | 
|  | It could be useful for serving large files: | 
|  | <blockquote><pre> | 
|  | directio 4m; | 
|  | </pre></blockquote> | 
|  | or when using <a href="#aio">aio</a> on Linux. | 
|  | </p><hr><a name="directio_alignment"></a><strong>syntax</strong>: | 
|  | <code>directio_alignment <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>directio_alignment 512</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><strong>appeared in version</strong>: | 
|  | 0.8.11<p> | 
|  | Sets an alignment for | 
|  | <a href="#directio">directio</a>. | 
|  | In most cases, a 512-byte alignment is enough, however, when | 
|  | using XFS under Linux, it needs to be increased to 4K. | 
|  | </p><hr><a name="error_page"></a><strong>syntax</strong>: | 
|  | <code>error_page | 
|  | <code><i>code</i></code> ... | 
|  | [<code>=</code>[<code><i>response</i></code>]] | 
|  | <code><i>uri</i></code></code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code>, <code>if in location</code><br><p> | 
|  | Defines the URI that will be shown for the specified errors. | 
|  | These directives are inherited from the previous level if and | 
|  | only if there are no | 
|  | <code>error_page</code> | 
|  | directives on | 
|  | the current level. | 
|  | A URI value can contain variables. | 
|  | </p><p> | 
|  | Example: | 
|  | <blockquote><pre> | 
|  | error_page 404         /404.html; | 
|  | error_page 502 503 504 /50x.html; | 
|  | error_page 403         http://example.com/forbidden.html; | 
|  | </pre></blockquote></p><p> | 
|  | Furthermore, it is possible to change the response code to another, for example: | 
|  | <blockquote><pre> | 
|  | error_page 404 =200 /empty.gif; | 
|  | </pre></blockquote></p><p> | 
|  | If an error response is processed by a proxied server, or a FastCGI server, | 
|  | and the server may return different response codes (e.g., 200, 302, 401 | 
|  | or 404), it is possible to respond with a returned code: | 
|  | <blockquote><pre> | 
|  | error_page 404 = /404.php; | 
|  | </pre></blockquote></p><p> | 
|  | If there is no need to change URI during redirection it is possible to redirect | 
|  | error processing into a named location: | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | error_page 404 = @fallback; | 
|  | } | 
|  |  | 
|  | location @fallback { | 
|  | proxy_pass http://backend; | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="if_modified_since"></a><strong>syntax</strong>: | 
|  | <code>if_modified_since | 
|  | <code>off</code> | | 
|  | <code>exact</code> | | 
|  | <code>before</code></code><br><strong>default</strong>: | 
|  | <code>if_modified_since exact</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><strong>appeared in version</strong>: | 
|  | 0.7.24<p> | 
|  | Specifies how to compare modification time of a response | 
|  | with the time in the | 
|  | <code>If-Modified-Since</code> | 
|  | request header: | 
|  |  | 
|  | <dl compact><dt><code>off</code></dt><dd> | 
|  | the | 
|  | <code>If-Modified-Since</code> request header is ignored (0.7.34); | 
|  | </dd><dt><code>exact</code></dt><dd> | 
|  | exact match; | 
|  | </dd><dt><code>before</code></dt><dd> | 
|  | modification time of a response is | 
|  | less than or equal to the time in the <code>If-Modified-Since</code> | 
|  | request header. | 
|  | </dd></dl></p><hr><a name="internal"></a><strong>syntax</strong>: | 
|  | <code>internal</code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>location</code><br><p> | 
|  | Specifies that a given location can only be used for internal requests. | 
|  | For external requests, the client error | 
|  | 404 (Not Found) | 
|  | is returned. | 
|  | Internal requests are the following: | 
|  |  | 
|  | <ul><li> | 
|  | requests redirected by the <a href="#error_page">error_page</a> directive; | 
|  | </li><li> | 
|  | subrequests formed by the | 
|  | <code>include virtual</code> | 
|  | command of the module | 
|  | <a href="ngx_http_ssi_module.html">ngx_http_ssi_module</a>; | 
|  | </li><li> | 
|  | requests changed by the | 
|  | <a href="ngx_http_rewrite_module.html#rewrite">rewrite</a> | 
|  | directive of the module | 
|  | <a href="ngx_http_rewrite_module.html">ngx_http_rewrite_module</a>. | 
|  | </li></ul></p><p> | 
|  | Example: | 
|  | <blockquote><pre> | 
|  | error_page 404 /404.html; | 
|  |  | 
|  | location /404.html { | 
|  | internal; | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="keepalive_requests"></a><strong>syntax</strong>: | 
|  | <code>keepalive_requests <code><i>number</i></code></code><br><strong>default</strong>: | 
|  | <code>keepalive_requests 100</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><strong>appeared in version</strong>: | 
|  | 0.8.0<p> | 
|  | Sets the maximum number of requests that can be | 
|  | made through one keep-alive connection. | 
|  | </p><hr><a name="keepalive_timeout"></a><strong>syntax</strong>: | 
|  | <code>keepalive_timeout | 
|  | <code><i>time</i></code> | 
|  | [<code><i>time</i></code>] | 
|  | </code><br><strong>default</strong>: | 
|  | <code>keepalive_timeout 75</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | The first argument sets a timeout during which a keep-alive | 
|  | client connection will stay open on the server side. | 
|  | The optional second argument sets a value in the | 
|  | “<code>Keep-Alive: timeout=<code><i>time</i></code></code>” | 
|  | response header. | 
|  | Two arguments may differ. | 
|  | </p><p> | 
|  | The | 
|  | “<code>Keep-Alive: timeout=</code>” | 
|  | is understood by Mozilla and Konqueror. | 
|  | MSIE will close keep-alive connection in about 60 seconds. | 
|  | </p><hr><a name="large_client_header_buffers"></a><strong>syntax</strong>: | 
|  | <code>large_client_header_buffers <code><i>number size</i></code></code><br><strong>default</strong>: | 
|  | <code>large_client_header_buffers 4 4k/8k</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code><br><p> | 
|  | Sets the maximum <code><i>number</i></code> and <code><i>size</i></code> of | 
|  | buffers used when reading large client request headers. | 
|  | A request line cannot exceed the size of one buffer, or the client error | 
|  | 414 (Request-URI Too Large) | 
|  | is returned. | 
|  | A request header field cannot exceed the size of one buffer as well, or the | 
|  | client error | 
|  | 400 (Bad Request) | 
|  | is returned. | 
|  | Buffers are allocated only on demand. | 
|  | By default, the buffer size is equal to one memory page size. | 
|  | It is either 4K or 8K, platform dependent. | 
|  | If after the end of request processing a connection is transitioned | 
|  | into the keep-alive state, these buffers are freed. | 
|  | </p><hr><a name="limit_except"></a><strong>syntax</strong>: | 
|  | <code>limit_except <code><i>method</i></code> ... { ... }</code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>location</code><br><p> | 
|  | Limits allowed HTTP methods inside a location. | 
|  | The GET method also implies the HEAD method. | 
|  | Access to other methods can be limited using the | 
|  | <a href="ngx_http_access_module.html">ngx_http_access_module</a> | 
|  | and | 
|  | <a href="ngx_http_auth_basic_module.html">ngx_http_auth_basic_module</a> | 
|  | modules directives: | 
|  | <blockquote><pre> | 
|  | limit_except GET { | 
|  | allow 192.168.1.0/32; | 
|  | deny  all; | 
|  | } | 
|  | </pre></blockquote> | 
|  | Please note that this will limit access to all methods | 
|  | <strong>except</strong> GET and HEAD. | 
|  | </p><hr><a name="limit_rate"></a><strong>syntax</strong>: | 
|  | <code>limit_rate <code><i>rate</i></code></code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code>, <code>if in location</code><br><p> | 
|  | Rate limits the transmission of a response to a client. | 
|  | The <code><i>rate</i></code> is specified in bytes per second. | 
|  |  | 
|  | The limit is per connection, so if a single client opens 2 connections, | 
|  | an overall rate will be 2x more than specified. | 
|  | </p><p> | 
|  | This directive is not applicable if one wants to rate limit | 
|  | a group of clients on the | 
|  | <a href="#server">server</a> | 
|  | level. | 
|  | If that is the case, the desired limit can be specified in the | 
|  | <code>$limit_rate</code> | 
|  | variable: | 
|  | <blockquote><pre> | 
|  | server { | 
|  |  | 
|  | if ($slow) { | 
|  | set $limit_rate 4k; | 
|  | } | 
|  |  | 
|  | ... | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="limit_rate_after"></a><strong>syntax</strong>: | 
|  | <code>limit_rate_after <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code>, <code>if in location</code><br><strong>appeared in version</strong>: | 
|  | 0.8.0<p> | 
|  | Sets the initial amount after which the further transmission | 
|  | of a response to a client will be rate limited. | 
|  | </p><p> | 
|  | Example: | 
|  | <blockquote><pre> | 
|  | location /flv/ { | 
|  | flv; | 
|  | limit_rate_after 500k; | 
|  | limit_rate       50k; | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="listen"></a><strong>syntax</strong>: | 
|  | <code>listen | 
|  | <code><i>address</i></code>[:<code><i>port</i></code>] | 
|  | [<code>default</code> | <code>default_server</code> | 
|  | [<code>backlog</code>=<code><i>number</i></code>] | 
|  | [<code>rcvbuf</code>=<code><i>size</i></code>] | 
|  | [<code>sndbuf</code>=<code><i>size</i></code>] | 
|  | [<code>accept_filter</code>=<code><i>filter</i></code>] | 
|  | [<code>deferred</code>] | 
|  | [<code>bind</code>] | 
|  | [<code>ipv6only</code>=<code>on</code>|<code>off</code>] | 
|  | [<code>ssl</code>]] | 
|  | </code><br><code>       </code><code>listen | 
|  | <code><i>port</i></code> | 
|  | [<code>default</code> | <code>default_server</code> | 
|  | [<code>backlog</code>=<code><i>number</i></code>] | 
|  | [<code>rcvbuf</code>=<code><i>size</i></code>] | 
|  | [<code>sndbuf</code>=<code><i>size</i></code>] | 
|  | [<code>accept_filter</code>=<code><i>filter</i></code>] | 
|  | [<code>deferred</code>] | 
|  | [<code>bind</code>] | 
|  | [<code>ipv6only</code>=<code>on</code>|<code>off</code>] | 
|  | [<code>ssl</code>]] | 
|  | </code><br><strong>default</strong>: | 
|  | <code>listen *:80 | *:8000</code><br><strong>context</strong>: | 
|  | <code>server</code><br><p> | 
|  | Sets an <code><i>address</i></code> and a <code><i>port</i></code>, on which | 
|  | the server will accept requests. | 
|  | Only one of <code><i>address</i></code> or <code><i>port</i></code> can be | 
|  | specified. | 
|  | An <code><i>address</i></code> may also be a hostname, for example: | 
|  | <blockquote><pre> | 
|  | listen 127.0.0.1:8000; | 
|  | listen 127.0.0.1; | 
|  | listen 8000; | 
|  | listen *:8000; | 
|  | listen localhost:8000; | 
|  | </pre></blockquote> | 
|  | IPv6 addresses (0.7.36) are specified in square brackets: | 
|  | <blockquote><pre> | 
|  | listen [::]:8000; | 
|  | listen [fe80::1]; | 
|  | </pre></blockquote></p><p> | 
|  | If only <code><i>address</i></code> is given, the port 80 is used. | 
|  | </p><p> | 
|  | If directive is not present then either the <code>*:80</code> is used | 
|  | if nginx runs with superuser privileges, or <code>*:8000</code> otherwise. | 
|  | </p><p> | 
|  | The <code>default</code> parameter, if present, | 
|  | will cause the server to become the default server for the specified | 
|  | <code><i>address</i></code>:<code><i>port</i></code> pair. | 
|  | If none of the directives have the <code>default</code> | 
|  | parameter then the first server with the | 
|  | <code><i>address</i></code>:<code><i>port</i></code> pair will be | 
|  | the default server for this pair. | 
|  | Starting from version 0.8.21 it is possible to use the | 
|  | <code>default_server</code> | 
|  | parameter. | 
|  | </p><p> | 
|  | A <code>listen</code> directive which has the <code>default</code> | 
|  | parameter can have several additional parameters specific to system calls | 
|  | <code>listen()</code> and <code>bind()</code>. | 
|  | Starting from version 0.8.21, these parameters can be specified in any | 
|  | <code>listen</code> directive, but only once for the given | 
|  | <code><i>address</i></code>:<code><i>port</i></code> pair. | 
|  | <dl compact><dt><code>backlog</code>=<code><i>number</i></code></dt><dd> | 
|  | sets the <code>backlog</code> parameter in the | 
|  | <code>listen()</code> call. | 
|  | By default, <code>backlog</code> equals -1 on FreeBSD | 
|  | and 511 on other platforms. | 
|  | </dd><dt><code>rcvbuf</code>=<code><i>size</i></code></dt><dd> | 
|  | sets the <code>SO_RCVBUF</code> parameter for the listening socket. | 
|  | </dd><dt><code>sndbuf</code>=<code><i>size</i></code></dt><dd> | 
|  | sets the <code>SO_SNDBUF</code> parameter for the listening socket. | 
|  | </dd><dt><code>accept_filter</code>=<code><i>filter</i></code></dt><dd> | 
|  | sets the name of the accept filter. | 
|  | This works only on FreeBSD, acceptable values are <code>dataready</code> | 
|  | and <code>httpready</code>. | 
|  | On receipt of the <code>SIGHUP</code> signal, an accept filter can only be | 
|  | changed in recent versions of FreeBSD, starting from 6.0, 5.4-STABLE | 
|  | and 4.11-STABLE. | 
|  | </dd><dt><code>deferred</code></dt><dd> | 
|  | instructs to use a deferred <code>accept()</code> on Linux | 
|  | using the <code>TCP_DEFER_ACCEPT</code> option. | 
|  | </dd><dt><code>bind</code></dt><dd> | 
|  | specifies to make a separate <code>bind()</code> call for a given | 
|  | <code><i>address</i></code>:<code><i>port</i></code> pair. | 
|  | This is because nginx will only <code>bind()</code> to | 
|  | <code>*</code>:<code><i>port</i></code> | 
|  | if there are several <code>listen</code> directives with | 
|  | the same port but different addresses, and one of the | 
|  | <code>listen</code> directives listens on all addresses | 
|  | for the given port (<code>*</code>:<code><i>port</i></code>). | 
|  | It should be noted that in this case a <code>getsockname()</code> | 
|  | system call will be made to determine an address that accepted a | 
|  | connection. | 
|  | If parameters <code>backlog</code>, <code>rcvbuf</code>, | 
|  | <code>sndbuf</code>, <code>accept_filter</code>, or | 
|  | <code>deferred</code> are used then for a given | 
|  | <code><i>address</i></code>:<code><i>port</i></code> pair | 
|  | a separate <code>bind()</code> call will always be made. | 
|  | </dd><dt><code>ipv6only</code>=<code>on</code>|<code>off</code></dt><dd> | 
|  | this parameter (0.7.42) sets the value of the <code>IPV6_V6ONLY</code> | 
|  | parameter for the listening socket. | 
|  | This parameter can only be set once on start. | 
|  | </dd><dt><code>ssl</code></dt><dd> | 
|  | this parameter (0.7.14) does not relate to system calls | 
|  | <code>listen()</code> and <code>bind()</code>, but allows to | 
|  | specify that all connections accepted on this port should work in | 
|  | the SSL mode. | 
|  | This allows for a more compact configuration for the server operating | 
|  | in both HTTP and HTTPS modes simultaneously. | 
|  | <blockquote><pre> | 
|  | listen 80; | 
|  | listen 443 default ssl; | 
|  | </pre></blockquote></dd></dl></p><p> | 
|  | Example: | 
|  | <blockquote><pre> | 
|  | listen 127.0.0.1 default accept_filter=dataready backlog=1024; | 
|  | </pre></blockquote></p><hr><a name="location"></a><strong>syntax</strong>: | 
|  | <code>location [ | 
|  | <code>=</code> | | 
|  | <code>~</code> | | 
|  | <code>~*</code> | | 
|  | <code>^~</code> | | 
|  | <code>@</code> | 
|  | ] <code><i>uri</i></code> | 
|  | { ... }</code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>server</code><br><p> | 
|  | Sets a configuration based on a request URI. | 
|  | A location can either be defined by a prefix string, or by a regular expression. | 
|  | Regular expressions are specified by prepending them with the | 
|  | “<code>~*</code>” prefix (for case-insensitive matching), or with the | 
|  | “<code>~</code>” prefix (for case-sensitive matching). | 
|  | To find a location matching a given request, nginx first checks | 
|  | locations defined using the prefix strings (prefix locations). | 
|  | Amongst them, the most specific one is searched. | 
|  | Then regular expressions are checked, in the order of their appearance | 
|  | in a configuration file. | 
|  | A search terminates on the first match, and its corresponding | 
|  | configuration is used. | 
|  | If no match with a regular expression location is found then a | 
|  | configuration of the most specific prefix location is used. | 
|  | </p><p> | 
|  | For case-insensitive operating systems such as Mac OS X and Cygwin, | 
|  | the string matching ignores a case (0.7.7). | 
|  | However, comparison is limited to one-byte locales. | 
|  | </p><p> | 
|  | Regular expressions can contain captures (0.7.40) that can later | 
|  | be used in other directives. | 
|  | </p><p> | 
|  | If the most specific prefix location has the “<code>^~</code>” prefix | 
|  | then regular expressions are not checked. | 
|  | </p><p> | 
|  | Also, using the “<code>=</code>” prefix it is possible to define | 
|  | an exact match of URI and location. | 
|  | If an exact match is found, the search terminates. | 
|  | For example, if a “<code>/</code>” request happens frequently, | 
|  | defining “<code>location = /</code>” will speed up the processing | 
|  | of these requests, as search terminates right after the first | 
|  | comparison. | 
|  | </p><p> | 
|  | In versions from 0.7.1 to 0.8.41, if a request matched the prefix | 
|  | location without the “<code>=</code>” and “<code>^~</code>” | 
|  | prefixes, the search also terminated and regular expressions were | 
|  | not checked. | 
|  | </p><p> | 
|  | Let's illustrate the above by example: | 
|  | <blockquote><pre> | 
|  | location = / { | 
|  | [ configuration A ] | 
|  | } | 
|  |  | 
|  | location / { | 
|  | [ configuration B ] | 
|  | } | 
|  |  | 
|  | location ^~ /images/ { | 
|  | [ configuration C ] | 
|  | } | 
|  |  | 
|  | location ~* \.(gif|jpg|jpeg)$ { | 
|  | [ configuration D ] | 
|  | } | 
|  | </pre></blockquote> | 
|  | The “<code>/</code>” request will match configuration A, | 
|  | the “<code>/documents/document.html</code>” request will match | 
|  | configuration B, | 
|  | the “<code>/images/1.gif</code>” request will match configuration C, and | 
|  | the “<code>/documents/1.jpg</code>” request will match configuration D. | 
|  | </p><p> | 
|  | The “<code>@</code>” prefix defines a named location. | 
|  | Such a location is not used for a regular request processing, but instead | 
|  | used for request redirection. | 
|  | </p><hr><a name="log_not_found"></a><strong>syntax</strong>: | 
|  | <code>log_not_found <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>log_not_found on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables logging of errors about not found files into the | 
|  | <a href="../ngx_core_module.html#error_log">error_log</a>. | 
|  | </p><hr><a name="log_subrequest"></a><strong>syntax</strong>: | 
|  | <code>log_subrequest <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>log_subrequest off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables logging of subrequests into the | 
|  | <a href="ngx_http_log_module.html#access_log">access_log</a>. | 
|  | </p><hr><a name="merge_slashes"></a><strong>syntax</strong>: | 
|  | <code>merge_slashes <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>merge_slashes on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code><br><p> | 
|  | Enables or disables compression of two or more adjacent slashes | 
|  | in a URI into a single slash. | 
|  | </p><p> | 
|  | Note that compression is essential for the correct prefix string | 
|  | and regular expressions location matching. | 
|  | Without it, the “<code>//scripts/one.php</code>” request would not match | 
|  | <blockquote><pre> | 
|  | location /scripts/ { | 
|  | ... | 
|  | } | 
|  | </pre></blockquote> | 
|  | and might be processed as a static file, | 
|  | so it gets converted to “<code>/scripts/one.php</code>”. | 
|  | </p><p> | 
|  | Turning the compression <code>off</code> can become necessary if a URI | 
|  | contains base64-encoded names, since base64 uses the "/" character internally. | 
|  | However, for security considerations, it is better to avoid turning off | 
|  | the compression. | 
|  | </p><p> | 
|  | If a directive is specified on the | 
|  | <a href="#server">server</a> | 
|  | level, which is also a default server, its value will cover | 
|  | all virtual servers listening on the same address and port. | 
|  | </p><hr><a name="msie_padding"></a><strong>syntax</strong>: | 
|  | <code>msie_padding <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>msie_padding on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables adding of comments to responses with status | 
|  | greater than 400 for MSIE clients, to pad the response size to 512 bytes. | 
|  | </p><hr><a name="msie_refresh"></a><strong>syntax</strong>: | 
|  | <code>msie_refresh <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>msie_refresh off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables issuing refreshes instead of redirects, for MSIE clients. | 
|  | </p><hr><a name="open_file_cache"></a><strong>syntax</strong>: | 
|  | <code>open_file_cache | 
|  | <code>max</code>=<code><i>N</i></code> | 
|  | [<code>inactive</code>=<code><i>time</i></code>] | | 
|  | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>open_file_cache off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Configures a cache that can store: | 
|  | <ul><li> | 
|  | open file descriptors, their sizes and modification times; | 
|  | </li><li> | 
|  | directory lookups; | 
|  | </li><li> | 
|  | file lookup errors, such as "file not found", "no read permission", | 
|  | and so on. | 
|  | Caching of errors should be enabled separately by the | 
|  | <a href="#open_file_cache_errors">open_file_cache_errors</a> | 
|  | directive. | 
|  | </li></ul></p><p> | 
|  | The directive has the following parameters: | 
|  | <dl compact><dt><code>max</code></dt><dd> | 
|  | sets the maximum number of elements in the cache; | 
|  | on cache overflow the least recently used (LRU) elements get removed; | 
|  | </dd><dt><code>inactive</code></dt><dd> | 
|  | defines a time, after which the element gets removed from the cache | 
|  | if there were no accesses to it during this time; | 
|  | by default, it is 60 seconds; | 
|  | </dd><dt><code>off</code></dt><dd> | 
|  | disables the cache. | 
|  | </dd></dl></p><p> | 
|  | Example: | 
|  | <blockquote><pre> | 
|  | open_file_cache          max=1000 inactive=20s; | 
|  | open_file_cache_valid    30s; | 
|  | open_file_cache_min_uses 2; | 
|  | open_file_cache_errors   on; | 
|  | </pre></blockquote></p><hr><a name="open_file_cache_errors"></a><strong>syntax</strong>: | 
|  | <code>open_file_cache_errors <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>open_file_cache_errors off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables caching of file lookup errors by the | 
|  | <a href="#open_file_cache">open_file_cache</a>. | 
|  | </p><hr><a name="open_file_cache_min_uses"></a><strong>syntax</strong>: | 
|  | <code>open_file_cache_min_uses <code><i>number</i></code></code><br><strong>default</strong>: | 
|  | <code>open_file_cache_min_uses 1</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets the minimum <code><i>number</i></code> of file accesses during | 
|  | the period configured by the <code>inactive</code> parameter | 
|  | of the <a href="#open_file_cache">open_file_cache</a> directive, | 
|  | after which a file descriptor will remain open in the cache. | 
|  | </p><hr><a name="open_file_cache_valid"></a><strong>syntax</strong>: | 
|  | <code>open_file_cache_valid <code><i>time</i></code></code><br><strong>default</strong>: | 
|  | <code>open_file_cache_valid 60</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets a time after which | 
|  | <a href="#open_file_cache">open_file_cache</a> | 
|  | elements should be validated. | 
|  | </p><hr><a name="optimize_server_names"></a><strong>syntax</strong>: | 
|  | <code>optimize_server_names <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>optimize_server_names on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code><br><p> | 
|  | This directive is obsolete. | 
|  | </p><p> | 
|  | Enables or disables optimization of hostname checking in name-based | 
|  | virtual servers. | 
|  | In particular, the checking affects hostnames used in redirects. | 
|  | If optimization is enabled, and all name-based servers listening on | 
|  | the same address:port pair have identical configuration, then | 
|  | names are not checked during request processing, and the first | 
|  | server name is used in redirects. | 
|  | In case redirects should use hostnames sent by clients, | 
|  | optimization needs to be disabled. | 
|  | </p><hr><a name="port_in_redirect"></a><strong>syntax</strong>: | 
|  | <code>port_in_redirect <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>port_in_redirect on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables specifying the port in redirects issued by nginx. | 
|  | </p><hr><a name="read_ahead"></a><strong>syntax</strong>: | 
|  | <code>read_ahead <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>read_ahead 0</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets the amount of pre-reading when working with files, in the kernel. | 
|  | </p><p> | 
|  | On Linux, the | 
|  | <code>posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)</code> | 
|  | system call is used, so the <code><i>size</i></code> argument is ignored. | 
|  | </p><p> | 
|  | On FreeBSD, the | 
|  | <code>fcntl(O_READAHEAD,</code><code><i>size</i></code><code>)</code> | 
|  | system call is used, supported in FreeBSD 9.0-CURRENT. | 
|  | FreeBSD 7 needs to be | 
|  | <a href="http://sysoev.ru/freebsd/patch.readahead.txt">patched</a>. | 
|  | </p><hr><a name="recursive_error_pages"></a><strong>syntax</strong>: | 
|  | <code>recursive_error_pages <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>recursive_error_pages off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables doing several redirects using the | 
|  | <a href="#error_page">error_page</a> | 
|  | directive. | 
|  | </p><hr><a name="reset_timedout_connection"></a><strong>syntax</strong>: | 
|  | <code>reset_timedout_connection | 
|  | <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>reset_timedout_connection off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables resetting of timed out connections. | 
|  | The reset is performed as follows: before closing a socket, the | 
|  | <code>SO_LINGER</code> | 
|  | option is set on it with a timeout value of 0. | 
|  | When the socket is closed, a client is sent TCP RST, and all memory | 
|  | occupied by this socket is freed. | 
|  | This avoids keeping of an already closed socket with filled buffers | 
|  | for a long time, in a FIN_WAIT1 state. | 
|  | </p><p> | 
|  | It should be noted that timed out keep-alive connections are still | 
|  | closed normally. | 
|  | </p><hr><a name="resolver"></a><strong>syntax</strong>: | 
|  | <code>resolver <code><i>address</i></code></code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets the <code><i>address</i></code> of a name server, for example: | 
|  | <blockquote><pre> | 
|  | resolver 127.0.0.1; | 
|  | </pre></blockquote></p><hr><a name="resolver_timeout"></a><strong>syntax</strong>: | 
|  | <code>resolver_timeout <code><i>time</i></code></code><br><strong>default</strong>: | 
|  | <code>resolver_timeout 30s</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets a timeout for name resolution, for example: | 
|  | <blockquote><pre> | 
|  | resolver_timeout 5s; | 
|  | </pre></blockquote></p><hr><a name="root"></a><strong>syntax</strong>: | 
|  | <code>root <code><i>path</i></code></code><br><strong>default</strong>: | 
|  | <code>root html</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code>, <code>if in location</code><br><p> | 
|  | Sets the root directory for requests. | 
|  | For example, with the following configuration | 
|  | <blockquote><pre> | 
|  | location /i/ { | 
|  | root /data/w3; | 
|  | } | 
|  | </pre></blockquote>“<code>/i/top.gif</code>” will be responded | 
|  | with the file | 
|  | “<code>/data/w3/i/top.gif</code>”. | 
|  | </p><p> | 
|  | The <code><i>path</i></code> value can contain variables. | 
|  | </p><p> | 
|  | A path to the file is constructed by merely adding a URI to the value | 
|  | of the <code>root</code> directive. | 
|  | If a URI need to be modified, the | 
|  | <a href="#alias">alias</a> directive should be used. | 
|  | </p><hr><a name="satisfy"></a><strong>syntax</strong>: | 
|  | <code>satisfy <code>all</code> | <code>any</code></code><br><strong>default</strong>: | 
|  | <code>satisfy all</code><br><strong>context</strong>: | 
|  | <code>location</code><br><p> | 
|  | Allows access if any of the | 
|  | <a href="ngx_http_access_module.html">ngx_http_access_module</a> | 
|  | or <a href="ngx_http_auth_basic_module.html">ngx_http_auth_basic_module</a> | 
|  | modules grant access. | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | satisfy any; | 
|  |  | 
|  | allow 192.168.1.0/32; | 
|  | deny  all; | 
|  |  | 
|  | auth_basic           "closed site"; | 
|  | auth_basic_user_file conf/htpasswd; | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="satisfy_any"></a><strong>syntax</strong>: | 
|  | <code>satisfy_any <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>satisfy_any off</code><br><strong>context</strong>: | 
|  | <code>location</code><br><p> | 
|  | This directive was renamed to the <a href="#satisfy">satisfy</a> directive. | 
|  | </p><hr><a name="send_timeout"></a><strong>syntax</strong>: | 
|  | <code>send_timeout <code><i>time</i></code></code><br><strong>default</strong>: | 
|  | <code>send_timeout 60</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Sets a timeout for transmitting a response to the client. | 
|  | A timeout is only set between two successive write operations, | 
|  | not for the transmission of the whole response. | 
|  | If a client does not receive anything within this time, | 
|  | a connection is closed. | 
|  | </p><hr><a name="sendfile"></a><strong>syntax</strong>: | 
|  | <code>sendfile <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>sendfile off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables the use of | 
|  | <code>sendfile()</code>. | 
|  | </p><hr><a name="server"></a><strong>syntax</strong>: | 
|  | <code>server { ... }</code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>http</code><br><p> | 
|  | Sets a configuration for the virtual server. | 
|  | There is no clean separation between IP-based (based on the IP address) | 
|  | and name-based (based on the <code>Host</code> request header field) | 
|  | virtual servers. | 
|  | Instead, the <a href="#listen">listen</a> directives describe all | 
|  | addresses and ports that should accept connections for a server, and the | 
|  | <a href="#server_name">server_name</a> directive lists all server names. | 
|  | An example configuration is provided in the | 
|  | <a href="../virtual_hosts.html"> | 
|  | Setting Up Virtual Servers</a> document. | 
|  | </p><hr><a name="server_name"></a><strong>syntax</strong>: | 
|  | <code>server_name <code><i>name</i></code> ...</code><br><strong>default</strong>: | 
|  | <code>server_name hostname</code><br><strong>context</strong>: | 
|  | <code>server</code><br><p> | 
|  | Sets names of the virtual server, for example: | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name example.com www.example.com; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | The first name becomes a primary server name. | 
|  | By default, the machine's hostname is used. | 
|  | Server names can include an asterisk (“<code>*</code>”) | 
|  | to replace the first or last part of a name: | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name example.com *.example.com www.example.*; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | The first two of the above mentioned names can be combined: | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name .example.com; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | It is also possible to use regular expressions in server names, | 
|  | prepending the name with a tilde (“<code>~</code>”): | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name www.example.com ~^www\d+\.example\.com$; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | Regular expressions can contain captures (0.7.40) that can later | 
|  | be used in other directives: | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name ~^(www\.)?(.+)$; | 
|  |  | 
|  | location / { | 
|  | root /sites/$2; | 
|  | } | 
|  | } | 
|  |  | 
|  | server { | 
|  | server_name _; | 
|  |  | 
|  | location / { | 
|  | root /sites/default; | 
|  | } | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | Starting from version 0.8.25, named captures in regular expressions create | 
|  | variables that can later be used in other directives: | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name ~^(www\.)?(?<domain>.+)$; | 
|  |  | 
|  | location / { | 
|  | root /sites/$domain; | 
|  | } | 
|  | } | 
|  |  | 
|  | server { | 
|  | server_name _; | 
|  |  | 
|  | location / { | 
|  | root /sites/default; | 
|  | } | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | Starting from version 0.7.11, it is possible to specify an empty name: | 
|  | <blockquote><pre> | 
|  | server { | 
|  | server_name www.example.com ""; | 
|  | } | 
|  | </pre></blockquote> | 
|  | It allows this server to process requests without the <code>Host</code> | 
|  | header, instead of the default server for the given address:port pair. | 
|  | </p><p> | 
|  | The name checking order is as follows: | 
|  | <ol><li> | 
|  | full names | 
|  | </li><li> | 
|  | names with the prefix mask, e.g. “<code>*.example.com</code>”</li><li> | 
|  | names with the suffix mask, e.g. “<code>mail.*</code>”</li><li> | 
|  | regular expressions | 
|  | </li></ol></p><hr><a name="server_name_in_redirect"></a><strong>syntax</strong>: | 
|  | <code>server_name_in_redirect <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>server_name_in_redirect on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables the use of the primary server name, specified by the | 
|  | <a href="#server_name">server_name</a> | 
|  | directive, in redirects issued by nginx. | 
|  | When disabled, the name from the <code>Host</code> request header field | 
|  | is used. | 
|  | If this field is not present, an IP address of the server is used. | 
|  | </p><hr><a name="server_names_hash_max_size"></a><strong>syntax</strong>: | 
|  | <code>server_names_hash_max_size <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>server_names_hash_max_size 512</code><br><strong>context</strong>: | 
|  | <code>http</code><br><p> | 
|  | Sets the maximum <code><i>size</i></code> of the server names hash tables. | 
|  | For more information, please refer to | 
|  | <a href="../hash.html">Setting Up Hashes</a>. | 
|  | </p><hr><a name="server_names_hash_bucket_size"></a><strong>syntax</strong>: | 
|  | <code>server_names_hash_bucket_size <code><i>size</i></code></code><br><strong>default</strong>: | 
|  | <code>server_names_hash_bucket_size 32/64/128</code><br><strong>context</strong>: | 
|  | <code>http</code><br><p> | 
|  | Sets the bucket size for the server names hash tables. | 
|  | Default value depends on the size of the processor's cache line. | 
|  | For more information, please refer to | 
|  | <a href="../hash.html">Setting Up Hashes</a>. | 
|  | </p><hr><a name="server_tokens"></a><strong>syntax</strong>: | 
|  | <code>server_tokens <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>server_tokens on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables emitting of nginx version in error messages and in the | 
|  | <code>Server</code> response header field. | 
|  | </p><hr><a name="tcp_nodelay"></a><strong>syntax</strong>: | 
|  | <code>tcp_nodelay <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>tcp_nodelay on</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables the use of the <code>TCP_NODELAY</code> option. | 
|  | The option is enabled only when a connection is transitioned into the | 
|  | keep-alive state. | 
|  | </p><hr><a name="tcp_nopush"></a><strong>syntax</strong>: | 
|  | <code>tcp_nopush <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>tcp_nopush off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Enables or disables the use of | 
|  | the <code>TCP_NOPUSH</code> socket option on FreeBSD | 
|  | or the <code>TCP_CORK</code> socket option on Linux. | 
|  | Opitons are enables only when <a href="#sendfile">sendfile</a> is used. | 
|  | Enabling the option allows to | 
|  | <ul><li> | 
|  | send the response header and the beginning of a file in one packet, | 
|  | on Linux and FreeBSD 4.*; | 
|  | </li><li> | 
|  | send a file in full packets. | 
|  | </li></ul></p><hr><a name="try_files"></a><strong>syntax</strong>: | 
|  | <code>try_files | 
|  | <code><i>file</i></code> ... | 
|  | <code><i>uri</i></code></code><br><code>       </code><code>try_files | 
|  | <code><i>file</i></code> ... | 
|  | =<code><i>code</i></code></code><br><strong>default</strong>: | 
|  | <strong>none</strong><br><strong>context</strong>: | 
|  | <code>location</code><br><p> | 
|  | Checks the existence of files in the specified order, and uses | 
|  | the first found file for request processing; the processing | 
|  | is performed in this location's context. | 
|  | It is possible to check the directory existence by specifying | 
|  | the slash at the end of a name, e.g. “<code>$uri/</code>”. | 
|  | If none of the files were found, an internal redirect to the | 
|  | <code><i>uri</i></code> specified by the last argument is made. | 
|  | As of version 0.7.51, the last argument can also be a | 
|  | <code><i>code</i></code>: | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | try_files $uri $uri/index.html $uri.html =404; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | Example when proxying Mongrel: | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | try_files /system/maintenance.html | 
|  | $uri $uri/index.html $uri.html | 
|  | @mongrel; | 
|  | } | 
|  |  | 
|  | location @mongrel { | 
|  | proxy_pass http://mongrel; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | Example for Drupal/FastCGI: | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | try_files $uri $uri/ @drupal; | 
|  | } | 
|  |  | 
|  | location ~ \.php$ { | 
|  | try_files $uri @drupal; | 
|  |  | 
|  | fastcgi_pass ...; | 
|  |  | 
|  | fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; | 
|  | fastcgi_param SCRIPT_NAME     $fastcgi_script_name; | 
|  | fastcgi_param QUERY_STRING    $args; | 
|  |  | 
|  | ... other fastcgi_param's | 
|  | } | 
|  |  | 
|  | location @drupal { | 
|  | fastcgi_pass ...; | 
|  |  | 
|  | fastcgi_param SCRIPT_FILENAME /path/to/index.php; | 
|  | fastcgi_param SCRIPT_NAME     /index.php; | 
|  | fastcgi_param QUERY_STRING    q=$uri&$args; | 
|  |  | 
|  | ... other fastcgi_param's | 
|  | } | 
|  | </pre></blockquote> | 
|  | In the following example, | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | try_files $uri $uri/ @drupal; | 
|  | } | 
|  | </pre></blockquote> | 
|  | the <code>try_files</code> directive is equivalent to | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | error_page 404 = @drupal; | 
|  | log_not_found off; | 
|  | } | 
|  | </pre></blockquote> | 
|  | And here, | 
|  | <blockquote><pre> | 
|  | location ~ \.php$ { | 
|  | try_files $uri @drupal; | 
|  |  | 
|  | fastcgi_pass ...; | 
|  |  | 
|  | fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; | 
|  |  | 
|  | ... | 
|  | } | 
|  | </pre></blockquote><code>try_files</code> checks the existence of the PHP file | 
|  | before passing the request to the FastCGI server. | 
|  | </p><p> | 
|  | Example for Wordpress and Joomla: | 
|  | <blockquote><pre> | 
|  | location / { | 
|  | try_files $uri $uri/ @wordpress; | 
|  | } | 
|  |  | 
|  | location ~ \.php$ { | 
|  | try_files $uri @wordpress; | 
|  |  | 
|  | fastcgi_pass ...; | 
|  |  | 
|  | fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; | 
|  | ... other fastcgi_param's | 
|  | } | 
|  |  | 
|  | location @wordpress { | 
|  | fastcgi_pass ...; | 
|  |  | 
|  | fastcgi_param SCRIPT_FILENAME /path/to/index.php; | 
|  | ... other fastcgi_param's | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="types"></a><strong>syntax</strong>: | 
|  | <code>types { ... }</code><br><strong>default</strong>: | 
|  | <code>see below</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code>, <code>location</code><br><p> | 
|  | Maps file name extensions to MIME types of responses. | 
|  | Several extensions can map to one type. | 
|  | The following mappings are configured by default: | 
|  | <blockquote><pre> | 
|  | types { | 
|  | text/html  html; | 
|  | image/gif  gif; | 
|  | image/jpeg jpg; | 
|  | } | 
|  | </pre></blockquote></p><p> | 
|  | A sufficiently full mapping table is distributed with nginx in the | 
|  | <code>conf/mime.types</code> file. | 
|  | </p><p> | 
|  | To make a particular location emit the | 
|  | “<code>application/octet-stream</code>” | 
|  | MIME type for all requests, try the following: | 
|  | <blockquote><pre> | 
|  | location /download/ { | 
|  | types        { } | 
|  | default_type application/octet-stream; | 
|  | } | 
|  | </pre></blockquote></p><hr><a name="underscores_in_headers"></a><strong>syntax</strong>: | 
|  | <code>underscores_in_headers <code>on</code> | <code>off</code></code><br><strong>default</strong>: | 
|  | <code>underscores_in_headers off</code><br><strong>context</strong>: | 
|  | <code>http</code>, <code>server</code><br><p> | 
|  | Enables or disables the use of underscores in client request header fields. | 
|  | </p><a name="variables"></a><center><h4>Embedded Variables</h4></center><p> | 
|  | The module <code>ngx_http_core_module</code> supports embedded variables with | 
|  | names matching those of the Apache Server. | 
|  | First of all, these are variables representing client request header | 
|  | fields, such as, <code>$http_user_agent</code>, <code>$http_cookie</code>, | 
|  | and so on. | 
|  | It also supports other variables: | 
|  | <dl compact><dt><code>$args</code></dt><dd> | 
|  | arguments in the request line | 
|  | </dd><dt><code>$arg_</code><code><i>name</i></code></dt><dd> | 
|  | argument <code><i>name</i></code> in the request line | 
|  | </dd><dt><code>$binary_remote_addr</code></dt><dd> | 
|  | client address in a binary form, value's length is always 4 bytes | 
|  | </dd><dt><code>$content_length</code></dt><dd><code>Content-Length</code> request header field | 
|  | </dd><dt><code>$content_type</code></dt><dd><code>Content-Type</code> request header field | 
|  | </dd><dt><code>$cookie_</code><code><i>name</i></code></dt><dd> | 
|  | the <code><i>name</i></code> cookie | 
|  | </dd><dt><code>$document_root</code></dt><dd><a href="#root">root</a> directive's value for the current request | 
|  | </dd><dt><code>$document_uri</code></dt><dd> | 
|  | same as <code>$uri</code></dd><dt><code>$host</code></dt><dd><code>Host</code> request header field, | 
|  | or the server name matching a request if this field is not present | 
|  | </dd><dt><code>$hostname</code></dt><dd> | 
|  | host name | 
|  | </dd><dt><code>$http_</code><code><i>name</i></code></dt><dd> | 
|  | the <code><i>name</i></code> request header field | 
|  | </dd><dt><code>$is_args</code></dt><dd>“<code>?</code>” if a request line has arguments, | 
|  | or an empty string otherwise | 
|  | </dd><dt><code>$limit_rate</code></dt><dd> | 
|  | allows for connection rate limiting | 
|  | </dd><dt><code>$pid</code></dt><dd> | 
|  | PID of the worker process | 
|  | </dd><dt><code>$request_method</code></dt><dd> | 
|  | request method, usually | 
|  | “<code>GET</code>” or “<code>POST</code>”</dd><dt><code>$remote_addr</code></dt><dd> | 
|  | client address | 
|  | </dd><dt><code>$remote_port</code></dt><dd> | 
|  | client port | 
|  | </dd><dt><code>$remote_user</code></dt><dd> | 
|  | user name supplied with the Basic authentication | 
|  | </dd><dt><code>$realpath_root</code></dt><dd><a href="#root">root</a> directive's value | 
|  | for the current request, with all symbolic links resolved to real paths | 
|  | </dd><dt><code>$request_filename</code></dt><dd> | 
|  | file path for the current query, based on the | 
|  | <a href="#root">root</a> and <a href="#alias">alias</a> | 
|  | directives, and the request URI | 
|  | </dd><dt><code>$request_body</code></dt><dd> | 
|  | request body | 
|  | <p> | 
|  | The variable's value is made available in locations | 
|  | processed by the | 
|  | <a href="ngx_http_proxy_module.html#proxy_pass">proxy_pass</a> | 
|  | and | 
|  | <a href="ngx_http_fastcgi_module.html#fastcgi_pass">fastcgi_pass</a> | 
|  | directives. | 
|  | </p></dd><dt><code>$request_body_file</code></dt><dd> | 
|  | name of a temporary file with the request body | 
|  | <p> | 
|  | At the end of processing, the file needs to be removed. | 
|  | To always write a request body to a file, | 
|  | <a href="#client_body_in_file_only">client_body_in_file_only on</a> | 
|  | needs be specified. | 
|  | When passing the name of a temporary file in a proxied request, | 
|  | or in a request to a FastCGI server, | 
|  | passing of the request body should be disabled by the | 
|  | <a href="ngx_http_proxy_module.html#proxy_pass_request_body">proxy_pass_request_body</a> | 
|  | and | 
|  | <a href="ngx_http_fastcgi_module.html#fastcgi_pass_request_body">fastcgi_pass_request_body</a> | 
|  | directives, respectively. | 
|  | </p></dd><dt><code>$request_uri</code></dt><dd> | 
|  | full original request URI (with arguments) | 
|  | </dd><dt><code>$query_string</code></dt><dd> | 
|  | same as <code>$args</code></dd><dt><code>$scheme</code></dt><dd> | 
|  | request scheme, “<code>http</code>” or “<code>https</code>”</dd><dt><code>$server_protocol</code></dt><dd> | 
|  | request protocol, usually | 
|  | “<code>HTTP/1.0</code>” | 
|  | or | 
|  | “<code>HTTP/1.1</code>”</dd><dt><code>$server_addr</code></dt><dd> | 
|  | an address of the server which accepted a request | 
|  | <p> | 
|  | Computing a value of this variable usually requires one system call. | 
|  | To avoid a system call, the <code>listen</code> directives | 
|  | must specify addresses and use the <code>bind</code> parameter | 
|  | </p></dd><dt><code>$server_name</code></dt><dd> | 
|  | name of the server which accepted a request | 
|  | </dd><dt><code>$server_port</code></dt><dd> | 
|  | port of the server which accepted a request | 
|  | </dd><dt><code>$uri</code></dt><dd> | 
|  | current URI in request | 
|  | <p> | 
|  | It may differ from an original, e.g. when doing internal redirects, | 
|  | or when using index files. | 
|  | </p></dd></dl></p></body></html> |