Nginx ngx_http_core_module Directives Guide
Nginx ngx_http_core_module Directives Guide
Module ngx_http_core_module
Directives
absolute_redirect
aio
aio_write
alias
auth_delay
chunked_transfer_encoding
client_body_buffer_size
client_body_in_file_only
client_body_in_single_buffer
client_body_temp_path
client_body_timeout
client_header_buffer_size
client_header_timeout
client_max_body_size
connection_pool_size
default_type
directio
directio_alignment
disable_symlinks
error_page
etag
http
if_modified_since
ignore_invalid_headers
internal
keepalive_disable
keepalive_requests
keepalive_time
keepalive_timeout
large_client_header_buffers
limit_except
limit_rate
limit_rate_after
lingering_close
lingering_time
lingering_timeout
listen
location
log_not_found
log_subrequest
max_ranges
merge_slashes
msie_padding
msie_refresh
open_file_cache
open_file_cache_errors
open_file_cache_min_uses
open_file_cache_valid
output_buffers
port_in_redirect
postpone_output
read_ahead
recursive_error_pages
request_pool_size
reset_timedout_connection
resolver
resolver_timeout
root
satisfy
send_lowat
send_timeout
sendfile
sendfile_max_chunk
server
server_name
server_name_in_redirect
server_names_hash_bucket_size
server_names_hash_max_size
server_tokens
subrequest_output_buffer_size
tcp_nodelay
tcp_nopush
try_files
types
types_hash_bucket_size
types_hash_max_size
underscores_in_headers
variables_hash_bucket_size
variables_hash_max_size
Embedded Variables
Directives
Enables or disables the use of asynchronous file I/O (AIO) on FreeBSD and Linux:
location /video/ {
aio on;
output_buffers 1 64k;
}
On FreeBSD, AIO can be used starting from FreeBSD 4.3. Prior to FreeBSD 11.0, AIO can
either be linked statically into a kernel:
options VFS_AIO
kldload aio
On Linux, AIO can be used starting from kernel version 2.6.22. Also, it is necessary to enable
directio, or otherwise reading will be blocking:
location /video/ {
aio on;
directio 512;
output_buffers 1 128k;
}
On Linux, directio can only be used for reading blocks that are aligned on 512-byte boundaries
(or 4K for XFS). File’s unaligned end is read 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.
When both AIO and sendfile are enabled on Linux, AIO is used for files that are larger than or
equal to the size specified in the directio directive, while sendfile is used for files of smaller
sizes or when directio is disabled.
location /video/ {
sendfile on;
aio on;
directio 8m;
}
Finally, files can be read and sent using multi-threading (1.7.11), without blocking a worker
process:
location /video/ {
sendfile on;
aio threads;
}
Read and send file operations are offloaded to threads of the specified pool. If the pool name
is omitted, the pool with the name “default” is used. The pool name can also be set with
variables:
aio threads=pool$disk;
If aio is enabled, specifies whether it is used for writing files. Currently, this only works when
using aio threads and is limited to writing temporary files with data received from proxied
servers.
Defines a replacement for the specified location. For example, with the following configuration
location /i/ {
alias /data/w3/images/;
}
The path value can contain variables, except $document_root and $realpath_root.
If alias is used inside a location defined with a regular expression then such regular
expression should contain captures and alias should refer to these captures (0.7.40), for
example:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
location /images/ {
alias /data/w3/images/;
}
location /images/ {
root /data/w3;
}
Delays processing of unauthorized requests with 401 response code to prevent timing attacks
when access is limited by password, by the result of subrequest, or by JWT.
Allows disabling chunked transfer encoding in HTTP/1.1. It may come in handy when using a
software failing to support chunked encoding despite the standard’s requirement.
Sets buffer size for reading client request body. In case the 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.
Determines whether nginx should save the entire client request body into a file. This directive
can be used during debugging, or when using the $request_body_file variable, or the $r-
>request_body_file method of the module ngx_http_perl_module.
When set to the value on, temporary files are not removed after request processing.
The value clean will cause the temporary files left after request processing to be removed.
Determines whether nginx should save the entire client request body in a single buffer. The
directive is recommended when using the $request_body variable, to save the number of copy
operations involved.
Defines a directory for storing temporary files holding client request bodies. Up to three-level
subdirectory hierarchy can be used under the specified directory. For example, in the following
configuration
client_body_temp_path /spool/nginx/client_temp 1 2;
/spool/nginx/client_temp/7/45/00000123457
Defines a timeout for reading client request body. The timeout is set only for a period 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 request is terminated with the 408 (Request
Time-out) error.
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 does not fit into this buffer then larger
buffers, configured by the large_client_header_buffers directive, are allocated.
If the directive is specified on the server level, the value from the default server can be used.
Details are provided in the “Virtual server selection” section.
Sets the maximum allowed size of the client request body. If the size in a request exceeds the
configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be
aware that browsers cannot correctly display this error. Setting size to 0 disables checking of
client request body size.
Allows accurate tuning of per-connection memory allocations. This directive has minimal
impact on performance and should not generally be used. By default, the size is equal to 256
bytes on 32-bit platforms and 512 bytes on 64-bit platforms.
Prior to version 1.9.8, the default value was 256 on all platforms.
Defines the default MIME type of a response. Mapping of file name extensions to MIME types
can be set with the types directive.
Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the
directio() function (Solaris), when reading files that are larger than or equal to the specified
size. The directive automatically disables (0.7.15) the use of sendfile for a given request. It can
be useful for serving large files:
directio 4m;
Sets the alignment for directio. In most cases, a 512-byte alignment is enough. However, when
using XFS under Linux, it needs to be increased to 4K.
off
Symbolic links in the pathname are allowed and not checked. This is the default behavior.
on
Access to a file is denied if any component of the pathname is a symbolic link, and the link
and object that the link points to have different owners.
from=part
When checking symbolic links (parameters on and if_not_owner), all components of the
pathname are normally checked. Checking of symbolic links in the initial part of the
pathname may be avoided by specifying additionally the from=part parameter. In this case,
symbolic links are checked only from the pathname component that follows the specified
initial part. If the value is not an initial part of the pathname checked, the whole pathname is
checked as if this parameter was not specified at all. If the value matches the whole file
name, symbolic links are not checked. The parameter value can contain variables.
Example:
disable_symlinks on from=$document_root;
This directive is only available on systems that have the openat() and fstatat() interfaces.
Such systems include modern versions of FreeBSD, Linux, and Solaris.
On systems that do not support opening of directories only for search, to use these
parameters it is required that worker processes have read permissions for all directories
being checked.
Defines the URI that will be shown for the specified errors. A uri value can contain variables.
Example:
This causes an internal redirect to the specified uri with the client request method changed to
“GET” (for all methods other than “GET” and “HEAD”).
Furthermore, it is possible to change the response code to another using the “=response”
syntax, for example:
If there is no need to change URI and method during internal redirection it is possible to pass
error processing into a named location:
location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass [Link]
}
If uri processing leads to an error, the status code of the last occurred error is returned to
the client.
In this case, by default, the response code 302 is returned to the client. It can only be changed
to one of the redirect status codes (301, 302, 303, 307, and 308).
The code 307 was not treated as a redirect until versions 1.1.16 and 1.0.13.
The code 308 was not treated as a redirect until version 1.13.0.
These directives are inherited from the previous configuration level if and only if there are no
error_page directives defined on the current level.
Enables or disables automatic generation of the “ETag” response header field for static
resources.
Provides the configuration file context in which the HTTP server directives are specified.
Specifies how to compare modification time of a response with the time in the “If-Modified-
Since” request header field:
off
the “If-Modified-Since” request header field is ignored (0.7.34);
exact
exact match;
before
modification time of a response is less than or equal to the time in the “If-Modified-Since”
request header field.
Controls whether header fields with invalid names should be ignored. Valid names are
composed of English letters, digits, hyphens, and possibly underscores (as controlled by the
underscores_in_headers directive).
If the directive is specified on the server level, the value from the default server can be used.
Details are provided in the “Virtual server selection” section.
Syntax: internal;
Default: —
Context: location
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:
Example:
location = /[Link] {
internal;
}
There is a limit of 10 internal redirects per request to prevent request processing cycles
that can occur in incorrect configurations. If this limit is reached, the error 500 (Internal
Server Error) is returned. In such cases, the “rewrite or internal redirection cycle”
message can be seen in the error log.
Disables keep-alive connections with misbehaving browsers. The browser parameters specify
which browsers will be affected. The value msie6 disables keep-alive connections with old
versions of MSIE, once a POST request is received. The value safari disables keep-alive
connections with Safari and Safari-like browsers on macOS and macOS-like operating
systems. The value none enables keep-alive connections with all browsers.
Prior to version 1.1.18, the value safari matched all Safari and Safari-like browsers on all
operating systems, and keep-alive connections with them were disabled by default.
Sets the maximum number of requests that can be served through one keep-alive connection.
After the maximum number of requests are made, the connection is closed.
Limits the maximum time during which requests can be processed through one keep-alive
connection. After this time is reached, the connection is closed following the subsequent
request processing.
The first parameter sets a timeout during which a keep-alive client connection will stay open on
the server side. The zero value disables keep-alive client connections. The optional second
parameter sets a value in the “Keep-Alive: timeout=time” response header field. Two
parameters may differ.
The “Keep-Alive: timeout=time” header field is recognized by Mozilla and Konqueror. MSIE
closes keep-alive connections by itself in about 60 seconds.
Sets the maximum number and size of buffers used for reading large client request header. A
request line cannot exceed the size of one buffer, or the 414 (Request-URI Too Large) error is
returned to the client. A request header field cannot exceed the size of one buffer as well, or
the 400 (Bad Request) error is returned to the client. Buffers are allocated only on demand. By
default, the buffer size is equal to 8K bytes. If after the end of request processing a connection
is transitioned into the keep-alive state, these buffers are released.
If the directive is specified on the server level, the value from the default server can be used.
Details are provided in the “Virtual server selection” section.
Limits allowed HTTP methods inside a location. The method parameter can be one of the
following: GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK,
UNLOCK, or PATCH. Allowing the GET method makes the HEAD method also allowed. Access to
other methods can be limited using the ngx_http_access_module,
ngx_http_auth_basic_module, and ngx_http_auth_jwt_module (1.13.10) modules directives:
limit_except GET {
allow [Link]/32;
deny all;
}
Please note that this will limit access to all methods except GET and HEAD.
Limits the rate of response transmission to a client. The rate is specified in bytes per second.
The zero value disables rate limiting. The limit is set per a request, and so if a client
simultaneously opens two connections, the overall rate will be twice as much as the specified
limit.
Parameter value can contain variables (1.17.0). It may be useful in cases where rate should be
limited depending on a certain condition:
limit_rate $rate;
Rate limit can also be set in the $limit_rate variable, however, since version 1.17.0, this
method is not recommended:
server {
if ($slow) {
set $limit_rate 4k;
}
...
}
Rate limit can also be set in the “X-Accel-Limit-Rate” header field of a proxied server response.
This capability can be disabled using the proxy_ignore_headers, fastcgi_ignore_headers,
uwsgi_ignore_headers, and scgi_ignore_headers directives.
Sets the initial amount after which the further transmission of a response to a client will be rate
limited. Parameter value can contain variables (1.17.0).
Example:
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
The default value “on” instructs nginx to wait for and process additional data from a client
before fully closing a connection, but only if heuristics suggests that a client may be sending
more data.
The value “always” will cause nginx to unconditionally wait for and process additional client
data.
The value “off” tells nginx to never wait for more data and close the connection immediately.
This behavior breaks the protocol and should not be used under normal circumstances.
To control closing HTTP/2 connections, the directive must be specified on the server level
(1.19.1).
When lingering_close is in effect, this directive specifies the maximum time during which nginx
will process (read and ignore) additional data coming from a client. After that, the connection
will be closed, even if there will be more data.
When lingering_close is in effect, this directive specifies the maximum waiting time for more
client data to arrive. If data are not received during this time, the connection is closed.
Otherwise, the data are read and ignored, and nginx starts waiting for more data again. The
“wait-read-ignore” cycle is repeated, but no longer than specified by the lingering_time
directive.
Sets the address and port for IP, or the path for a UNIX-domain socket on which the server will
accept requests. Both address and port, or only address or only port can be specified. An
address may also be a hostname, for example:
listen [Link]:8000;
listen [Link];
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000;
listen [::1];
listen unix:/var/run/[Link];
If the directive is not present then either *:80 is used if nginx runs with the superuser
privileges, or *:8000 otherwise.
The default_server parameter, if present, will cause the server to become the default server
for the specified address:port pair. If none of the directives have the default_server parameter
then the first server with the address:port pair will be the default server for this pair.
The ssl parameter (0.7.14) allows specifying that all connections accepted on this port should
work in SSL mode. This allows for a more compact configuration for the server that handles
both HTTP and HTTPS requests.
The http2 parameter (1.9.5) configures the port to accept HTTP/2 connections. Normally, for
this to work the ssl parameter should be specified as well, but nginx can also be configured to
accept HTTP/2 connections without SSL.
The spdy parameter (1.3.15-1.9.4) allows accepting SPDY connections on this port. Normally,
for this to work the ssl parameter should be specified as well, but nginx can also be configured
to accept SPDY connections without SSL.
The proxy_protocol parameter (1.5.12) allows specifying that all connections accepted on this
port should use the PROXY protocol.
The listen directive can have several additional parameters specific to socket-related system
calls. These parameters can be specified in any listen directive, but only once for a given
address:port pair.
In versions prior to 0.8.21, they could only be specified in the listen directive together
with the default parameter.
setfib=number
this parameter (0.8.44) sets the associated routing table, FIB (the SO_SETFIB option) for the
listening socket. This currently works only on FreeBSD.
fastopen=number
enables “TCP Fast Open” for the listening socket (1.5.8) and limits the maximum length for
the queue of connections that have not yet completed the three-way handshake.
Do not enable this feature unless the server can handle receiving the same SYN packet
with data more than once.
backlog=number
sets the backlog parameter in the listen() call that limits the maximum length for the
queue of pending connections. By default, backlog is set to -1 on FreeBSD, DragonFly
BSD, and macOS, and to 511 on other platforms.
rcvbuf=size
sets the receive buffer size (the SO_RCVBUF option) for the listening socket.
sndbuf=size
sets the send buffer size (the SO_SNDBUF option) for the listening socket.
accept_filter=filter
sets the name of accept filter (the SO_ACCEPTFILTER option) for the listening socket that
filters incoming connections before passing them to accept(). This works only on FreeBSD
and NetBSD 5.0+. Possible values are dataready and httpready.
deferred
instructs to make a separate bind() call for a given address:port pair. This is useful
because if there are several listen directives with the same port but different addresses,
and one of the listen directives listens on all addresses for the given port (*:port), nginx
will bind() only to *:port. It should be noted that the getsockname() system call will be
made in this case to determine the address that accepted the connection. If the setfib,
fastopen, backlog, rcvbuf, sndbuf, accept_filter, deferred, ipv6only, reuseport, or
so_keepalive parameters are used then for a given address:port pair a separate bind() call
will always be made.
ipv6only=on|off
this parameter (0.7.42) determines (via the IPV6_V6ONLY socket option) whether an IPv6
socket listening on a wildcard address [::] will accept only IPv6 connections or both IPv6
and IPv4 connections. This parameter is turned on by default. It can only be set once on
start.
Prior to version 1.3.4, if this parameter was omitted then the operating system’s settings
were in effect for the socket.
reuseport
this parameter (1.9.1) instructs to create an individual listening socket for each worker
process (using the SO_REUSEPORT socket option on Linux 3.9+ and DragonFly BSD, or
SO_REUSEPORT_LB on FreeBSD 12+), allowing a kernel to distribute incoming connections
between worker processes. This currently works only on Linux 3.9+, DragonFly BSD, and
FreeBSD 12+ (1.15.1).
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
this parameter (1.1.11) configures the “TCP keepalive” behavior for the listening socket. If
this parameter is omitted then the operating system’s settings will be in effect for the
socket. If it is set to the value “on”, the SO_KEEPALIVE option is turned on for the socket. If it
is set to the value “off”, the SO_KEEPALIVE option is turned off for the socket. Some
operating systems support setting of TCP keepalive parameters on a per-socket basis
using the TCP_KEEPIDLE, TCP_KEEPINTVL, and TCP_KEEPCNT socket options. On such systems
(currently, Linux 2.4+, NetBSD 5+, and FreeBSD 9.0-STABLE), they can be configured
using the keepidle, keepintvl, and keepcnt parameters. One or two parameters may be
omitted, in which case the system default setting for the corresponding socket option will be
in effect. For example,
so_keepalive=30m::10
will set the idle timeout (TCP_KEEPIDLE) to 30 minutes, leave the probe interval
(TCP_KEEPINTVL) at its system default, and set the probes count (TCP_KEEPCNT) to 10 probes.
Example:
The matching is performed against a normalized URI, after decoding the text encoded in the
“%XX” form, resolving references to relative path components “.” and “..”, and possible
compression of two or more adjacent slashes into a single slash.
For case-insensitive operating systems such as macOS and Cygwin, matching with prefix
strings ignores a case (0.7.7). However, comparison is limited to one-byte locales.
Regular expressions can contain captures (0.7.40) that can later be used in other directives.
If the longest matching prefix location has the “^~” modifier then regular expressions are not
checked.
Also, using the “=” modifier 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 “/” request happens frequently,
defining “location = /” will speed up the processing of these requests, as search terminates
right after the first comparison. Such a location cannot obviously contain nested locations.
In versions from 0.7.1 to 0.8.41, if a request matched the prefix location without the “=”
and “^~” modifiers, the search also terminated and regular expressions were not checked.
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
The “/” request will match configuration A, the “/[Link]” request will match configuration
B, the “/documents/[Link]” request will match configuration C, the “/images/[Link]”
request will match configuration D, and the “/documents/[Link]” request will match configuration
E.
The “@” prefix defines a named location. Such a location is not used for a regular request
processing, but instead used for request redirection. They cannot be nested, and cannot
contain nested locations.
If a location is defined by a prefix string that ends with the slash character, and requests are
processed by one of proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, or
grpc_pass, then the special processing is performed. In response to a request with URI equal
to this string, but without the trailing slash, a permanent redirect with the code 301 will be
returned to the requested URI with the slash appended. If this is not desired, an exact match of
the URI and location could be defined like this:
location /user/ {
proxy_pass [Link]
}
location = /user {
proxy_pass [Link]
}
Enables or disables logging of errors about not found files into error_log.
Limits the maximum allowed number of ranges in byte-range requests. Requests that exceed
the limit are processed as if there were no byte ranges specified. By default, the number of
ranges is not limited. The zero value disables the byte-range support completely.
Enables or disables compression of two or more adjacent slashes in a URI into a single slash.
Note that compression is essential for the correct matching of prefix string and regular
expression locations. Without it, the “//scripts/[Link]” request would not match
location /scripts/ {
...
}
Turning the compression off 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 the compression off.
If the directive is specified on the server level, the value from the default server can be used.
Details are provided in the “Virtual server selection” section.
Enables or disables adding comments to responses for MSIE clients with status greater than
400 to increase the response size to 512 bytes.
max
sets the maximum number of elements in the cache; on cache overflow the least recently
used (LRU) elements are removed;
inactive
defines a time after which an element is removed from the cache if it has not been
accessed during this time; by default, it is 60 seconds;
off
Example:
Sets the minimum number of file accesses during the period configured by the inactive
parameter of the open_file_cache directive, required for a file descriptor to remain open in the
cache.
The use of the primary server name in redirects is controlled by the server_name_in_redirect
directive.
If possible, the transmission of client data will be postponed until nginx has at least size bytes
of data to send. The zero value disables postponing data transmission.
Sets the amount of pre-reading for the kernel when working with file.
On FreeBSD, the fcntl(O_READAHEAD, size) system call, supported since FreeBSD 9.0-
CURRENT, is used. FreeBSD 7 has to be patched.
Enables or disables doing several redirects using the error_page directive. The number of
such redirects is limited.
Allows accurate tuning of per-request memory allocations. This directive has minimal impact
on performance and should not generally be used.
Enables or disables resetting timed out connections and connections closed with the non-
standard code 444 (1.15.2). The reset is performed as follows. Before closing a socket, the
SO_LINGER option is set on it with a timeout value of 0. When the socket is closed, TCP RST is
sent to the client, and all memory occupied by this socket is released. This helps avoid keeping
an already closed socket with filled buffers in a FIN_WAIT1 state for a long time.
It should be noted that timed out keep-alive connections are closed normally.
Configures name servers used to resolve names of upstream servers into addresses, for
example:
The address can be specified as a domain name or IP address, with an optional port (1.3.1,
1.2.2). If port is not specified, the port 53 is used. Name servers are queried in a round-robin
fashion.
Before version 1.1.7, only a single name server could be configured. Specifying name
servers using IPv6 addresses is supported starting from versions 1.3.1 and 1.2.2.
By default, nginx will look up both IPv4 and IPv6 addresses while resolving. If looking up of
IPv4 or IPv6 addresses is not desired, the ipv4=off (1.23.1) or the ipv6=off parameter can be
specified.
Resolving of names into IPv6 addresses is supported starting from version 1.5.8.
By default, nginx caches answers using the TTL value of a response. An optional valid
parameter allows overriding it:
Before version 1.1.9, tuning of caching time was not possible, and nginx always cached
answers for the duration of 5 minutes.
The optional status_zone parameter (1.17.1) enables collection of DNS server statistics of
requests and responses in the specified zone. The parameter is available as part of our
commercial subscription.
resolver_timeout 5s;
Sets the root directory for requests. For example, with the following configuration
location /i/ {
root /data/w3;
}
The path value can contain variables, except $document_root and $realpath_root.
A path to the file is constructed by merely adding a URI to the value of the root directive. If a
URI has to be modified, the alias directive should be used.
Example:
location / {
satisfy any;
allow [Link]/32;
deny all;
If the directive is set to a non-zero value, nginx will try to minimize the number of send
operations on client sockets by using either NOTE_LOWAT flag of the kqueue method or the
SO_SNDLOWAT socket option. In both cases the specified size is used.
Sets a timeout for transmitting a response to the client. The timeout is set only between two
successive write operations, not for the transmission of the whole response. If the client does
not receive anything within this time, the connection is closed.
Starting from nginx 0.8.12 and FreeBSD 5.2.1, aio can be used to pre-load data for
sendfile():
location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
In this configuration, sendfile() is called with the SF_NODISKIO flag which causes it not to block
on disk I/O, but, instead, report back that the data are not in memory. nginx then initiates an
asynchronous data load by reading one byte. On the first read, the FreeBSD kernel loads the
first 128K bytes of a file into memory, although next reads will only load data in 16K chunks.
This can be changed using the read_ahead directive.
Limits the amount of data that can be transferred in a single sendfile() call. Without the limit,
one fast connection may seize the worker process entirely.
Sets configuration for a virtual server. There is no clear separation between IP-based (based
on the IP address) and name-based (based on the “Host” request header field) virtual servers.
Instead, the listen directives describe all addresses and ports that should accept connections
for the server, and the server_name directive lists all server names. Example configurations
are provided in the “How nginx processes a request” document.
server {
server_name [Link] [Link];
}
Server names can include an asterisk (“*”) replacing the first or last part of a name:
server {
server_name [Link] *.[Link] [Link].*;
}
The first two of the names mentioned above can be combined in one:
server {
server_name .[Link];
}
It is also possible to use regular expressions in server names, preceding the name with a tilde
(“~”):
server {
server_name [Link] ~^www\d+\.example\.com$;
}
Regular expressions can contain captures (0.7.40) that can later be used in other directives:
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
Named captures in regular expressions create variables (0.8.25) that can later be used in other
directives:
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
If the directive’s parameter is set to “$hostname” (0.9.4), the machine’s hostname is inserted.
server {
server_name [Link] "";
}
It allows this server to process requests without the “Host” header field — instead of the default
server — for the given address:port pair. This is the default setting.
During searching for a virtual server by name, if the name matches more than one of the
specified variants, (e.g. both a wildcard name and regular expression match), the first
matching variant will be chosen, in the following order of priority:
Enables or disables the use of the primary server name, specified by the server_name
directive, in absolute redirects issued by nginx. When the use of the primary server name is
disabled, the name from the “Host” request header field is used. If this field is not present, the
IP address of the server is used.
Sets the bucket size for the server names hash tables. The default value depends on the size
of the processor’s cache line. The details of setting up hash tables are provided in a separate
document.
Sets the maximum size of the server names hash tables. The details of setting up hash tables
are provided in a separate document.
Enables or disables emitting nginx version on error pages and in the “Server” response header
field.
The build parameter (1.11.10) enables emitting a build name along with nginx version.
Additionally, as part of our commercial subscription, starting from version 1.9.13 the signature
on error pages and the “Server” response header field value can be set explicitly using the
string with variables. An empty string disables the emission of the “Server” field.
Sets the size of the buffer used for storing the response body of a subrequest. By default, the
buffer size is equal to one memory page. This is either 4K or 8K, depending on a platform. It
can be made smaller, however.
The directive is applicable only for subrequests with response bodies saved into memory. For
example, such subrequests are created by SSI.
Enables or disables the use of the TCP_NODELAY option. The option is enabled when a
connection is transitioned into the keep-alive state. Additionally, it is enabled on SSL
connections, for unbuffered proxying, and for WebSocket proxying.
Enables or disables the use of the TCP_NOPUSH socket option on FreeBSD or the TCP_CORK
socket option on Linux. The options are enabled only when sendfile is used. Enabling the
option allows
sending the response header and the beginning of a file in one packet, on Linux and
FreeBSD 4.*;
sending a file in full packets.
Checks the existence of files in the specified order and uses the first found file for request
processing; the processing is performed in the current context. The path to a file is constructed
from the file parameter according to the root and alias directives. It is possible to check
directory’s existence by specifying a slash at the end of a name, e.g. “$uri/”. If none of the
files were found, an internal redirect to the uri specified in the last parameter is made. For
example:
location /images/ {
try_files $uri /images/[Link];
}
location = /images/[Link] {
expires 30s;
}
The last parameter can also point to a named location, as shown in examples below. Starting
from version 0.7.51, the last parameter can also be a code:
location / {
try_files $uri $uri/[Link] $[Link] =404;
}
location / {
try_files /system/[Link]
$uri $uri/[Link] $[Link]
@mongrel;
}
location @mongrel {
proxy_pass [Link]
}
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
location @drupal {
fastcgi_pass ...;
location / {
try_files $uri $uri/ @drupal;
}
location / {
error_page 404 = @drupal;
log_not_found off;
}
And here,
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
...
}
try_files checks the existence of the PHP file before passing the request to the FastCGI
server.
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
location @wordpress {
fastcgi_pass ...;
Maps file name extensions to MIME types of responses. Extensions are case-insensitive.
Several extensions can be mapped to one type, for example:
types {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
A sufficiently full mapping table is distributed with nginx in the conf/[Link] file.
To make a particular location emit the “application/octet-stream” MIME type for all requests,
the following configuration can be used:
location /download/ {
types { }
default_type application/octet-stream;
}
Sets the bucket size for the types hash tables. The details of setting up hash tables are
provided in a separate document.
Prior to version 1.5.13, the default value depended on the size of the processor’s cache
line.
Sets the maximum size of the types hash tables. The details of setting up hash tables are
provided in a separate document.
Enables or disables the use of underscores in client request header fields. When the use of
underscores is disabled, request header fields whose names contain underscores are marked
as invalid and become subject to the ignore_invalid_headers directive.
If the directive is specified on the server level, the value from the default server can be used.
Details are provided in the “Virtual server selection” section.
Sets the bucket size for the variables hash table. The details of setting up hash tables are
provided in a separate document.
Sets the maximum size of the variables hash table. The details of setting up hash tables are
provided in a separate document.
Embedded Variables
The ngx_http_core_module module supports embedded variables with names matching the
Apache Server variables. First of all, these are variables representing client request header
fields, such as $http_user_agent, $http_cookie, and so on. Also there are other variables:
$arg_name
client address in a binary form, value’s length is always 4 bytes for IPv4 addresses or 16
bytes for IPv6 addresses
$body_bytes_sent
number of bytes sent to a client, not counting the response header; this variable is
compatible with the “%B” parameter of the mod_log_config Apache module
$bytes_sent
same as $uri
$host
in this order of precedence: host name from the request line, or host name from the “Host”
request header field, or the server name matching a request
$hostname
host name
$http_name
arbitrary request header field; the last part of a variable name is the field name converted to
lower case with dashes replaced by underscores
$https
nginx version
$pid
The PROXY protocol must be previously enabled by setting the proxy_protocol parameter
in the listen directive.
$proxy_protocol_port
The PROXY protocol must be previously enabled by setting the proxy_protocol parameter
in the listen directive.
$proxy_protocol_server_addr
The PROXY protocol must be previously enabled by setting the proxy_protocol parameter
in the listen directive.
$proxy_protocol_server_port
The PROXY protocol must be previously enabled by setting the proxy_protocol parameter
in the listen directive.
$query_string
same as $args
$realpath_root
an absolute pathname corresponding to the root or alias directive’s value for the current
request, with all symbolic links resolved to real paths
$remote_addr
client address
$remote_port
client port
$remote_user
request body
$request_body_file
At the end of processing, the file needs to be removed. To always write the request body to
a file, client_body_in_file_only needs to be enabled. When the name of a temporary file is
passed in a proxied request or in a request to a FastCGI/uwsgi/SCGI server, passing the
request body should be disabled by the proxy_pass_request_body off,
fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body
off directives, respectively.
$request_completion
“OK” if a request has completed, or an empty string otherwise
$request_filename
file path for the current request, based on the root or alias directives, and the request URI
$request_id
request length (including request line, header, and request body) (1.3.12, 1.2.7)
$request_method
request method, usually “GET” or “POST”
$request_time
request processing time in seconds with a milliseconds resolution (1.3.9, 1.2.6); time
elapsed since the first bytes were read from the client
$request_uri
arbitrary response header field; the last part of a variable name is the field name converted
to lower case with dashes replaced by underscores
$sent_trailer_name
arbitrary field sent at the end of the response (1.13.2); the last part of a variable name is
the field name converted to lower case with dashes replaced by underscores
$server_addr
Computing a value of this variable usually requires one system call. To avoid a system call,
the listen directives must specify addresses and use the bind parameter.
$server_name
information about the client TCP connection; available on systems that support the
TCP_INFO socket option
$time_iso8601
The value of $uri may change during request processing, e.g. when doing internal
redirects, or when using index files.