Movatterモバイル変換


[0]ホーム

URL:


The NGINX Team wants to hear from you.Take the 2025 NGINX User Survey.

Module ngx_http_proxy_module

Example Configuration
Directives
     proxy_bind
     proxy_buffer_size
     proxy_buffering
     proxy_buffers
     proxy_busy_buffers_size
     proxy_cache
     proxy_cache_background_update
     proxy_cache_bypass
     proxy_cache_convert_head
     proxy_cache_key
     proxy_cache_lock
     proxy_cache_lock_age
     proxy_cache_lock_timeout
     proxy_cache_max_range_offset
     proxy_cache_methods
     proxy_cache_min_uses
     proxy_cache_path
     proxy_cache_purge
     proxy_cache_revalidate
     proxy_cache_use_stale
     proxy_cache_valid
     proxy_connect_timeout
     proxy_cookie_domain
     proxy_cookie_flags
     proxy_cookie_path
     proxy_force_ranges
     proxy_headers_hash_bucket_size
     proxy_headers_hash_max_size
     proxy_hide_header
     proxy_http_version
     proxy_ignore_client_abort
     proxy_ignore_headers
     proxy_intercept_errors
     proxy_limit_rate
     proxy_max_temp_file_size
     proxy_method
     proxy_next_upstream
     proxy_next_upstream_timeout
     proxy_next_upstream_tries
     proxy_no_cache
     proxy_pass
     proxy_pass_header
     proxy_pass_request_body
     proxy_pass_request_headers
     proxy_pass_trailers
     proxy_read_timeout
     proxy_redirect
     proxy_request_buffering
     proxy_send_lowat
     proxy_send_timeout
     proxy_set_body
     proxy_set_header
     proxy_socket_keepalive
     proxy_ssl_certificate
     proxy_ssl_certificate_cache
     proxy_ssl_certificate_key
     proxy_ssl_ciphers
     proxy_ssl_conf_command
     proxy_ssl_crl
     proxy_ssl_key_log
     proxy_ssl_name
     proxy_ssl_password_file
     proxy_ssl_protocols
     proxy_ssl_server_name
     proxy_ssl_session_reuse
     proxy_ssl_trusted_certificate
     proxy_ssl_verify
     proxy_ssl_verify_depth
     proxy_store
     proxy_store_access
     proxy_temp_file_write_size
     proxy_temp_path
Embedded Variables

Thengx_http_proxy_module module allows passingrequests to another server.

Example Configuration

location / {    proxy_pass       http://localhost:8000;    proxy_set_header Host      $host;    proxy_set_header X-Real-IP $remote_addr;}

Directives

Syntax:proxy_bindaddress [transparent] |off;
Default:
Context:http,server,location

This directive appeared in version 0.8.22.

Makes outgoing connections to a proxied server originatefrom the specified local IP address with an optional port (1.11.2).Parameter value can contain variables (1.3.12).The special valueoff (1.3.12) cancels the effectof theproxy_bind directiveinherited from the previous configuration level, which allows thesystem to auto-assign the local IP address and port.

Thetransparent parameter (1.11.0) allowsoutgoing connections to a proxied server originatefrom a non-local IP address,for example, from a real IP address of a client:

proxy_bind $remote_addr transparent;

In order for this parameter to work,it is usually necessary to run nginx worker processes with thesuperuser privileges.On Linux it is not required (1.13.8) as ifthetransparent parameter is specified, worker processesinherit theCAP_NET_RAW capability from the master process.It is also necessary to configure kernel routing tableto intercept network traffic from the proxied server.

Syntax:proxy_buffer_sizesize;
Default:
proxy_buffer_size 4k|8k;
Context:http,server,location

Sets thesize of the buffer used for reading the first partof the response received from the proxied server.This part usually contains a small response header.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.

Syntax:proxy_bufferingon |off;
Default:
proxy_buffering on;
Context:http,server,location

Enables or disables buffering of responses from the proxied server.

When buffering is enabled, nginx receives a response from the proxied serveras soon as possible, saving it into the buffers set by theproxy_buffer_size andproxy_buffers directives.If the whole response does not fit into memory, a part of it can be savedto atemporary file on the disk.Writing to temporary files is controlled by theproxy_max_temp_file_size andproxy_temp_file_write_size directives.

When buffering is disabled, the response is passed to a client synchronously,immediately as it is received.nginx will not try to read the whole response from the proxied server.The maximum size of the data that nginx can receive from the serverat a time is set by theproxy_buffer_size directive.

Buffering can also be enabled or disabled by passing“yes” or “no” in the“X-Accel-Buffering” response header field.This capability can be disabled using theproxy_ignore_headers directive.

Syntax:proxy_buffersnumbersize;
Default:
proxy_buffers 8 4k|8k;
Context:http,server,location

Sets thenumber andsize of thebuffers used for reading a response from the proxied server,for a single connection.By default, the buffer size is equal to one memory page.This is either 4K or 8K, depending on a platform.

Syntax:proxy_busy_buffers_sizesize;
Default:
proxy_busy_buffers_size 8k|16k;
Context:http,server,location

Whenbuffering of responses from the proxiedserver is enabled, limits the totalsize of buffers thatcan be busy sending a response to the client while the response is notyet fully read.In the meantime, the rest of the buffers can be used for reading the responseand, if needed, buffering part of the response to a temporary file.By default,size is limited by the size of two buffers set by theproxy_buffer_size andproxy_buffers directives.

Syntax:proxy_cachezone |off;
Default:
proxy_cache off;
Context:http,server,location

Defines a shared memory zone used for caching.The same zone can be used in several places.Parameter value can contain variables (1.7.9).Theoff parameter disables caching inheritedfrom the previous configuration level.

Syntax:proxy_cache_background_updateon |off;
Default:
proxy_cache_background_update off;
Context:http,server,location

This directive appeared in version 1.11.10.

Allows starting a background subrequestto update an expired cache item,while a stale cached response is returned to the client.Note that it is necessary toallowthe usage of a stale cached response when it is being updated.

Syntax:proxy_cache_bypassstring ...;
Default:
Context:http,server,location

Defines conditions under which the response will not be taken from a cache.If at least one value of the string parameters is not empty and is notequal to “0” then the response will not be taken from the cache:

proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;proxy_cache_bypass $http_pragma    $http_authorization;

Can be used along with theproxy_no_cache directive.

Syntax:proxy_cache_convert_headon |off;
Default:
proxy_cache_convert_head on;
Context:http,server,location

This directive appeared in version 1.9.7.

Enables or disables the conversion of the “HEAD” methodto “GET” for caching.When the conversion is disabled, thecache key should be configuredto include the$request_method.

Syntax:proxy_cache_keystring;
Default:
proxy_cache_key $scheme$proxy_host$request_uri;
Context:http,server,location

Defines a key for caching, for example

proxy_cache_key "$host$request_uri $cookie_user";

By default, the directive’s value is close to the string

proxy_cache_key $scheme$proxy_host$uri$is_args$args;

Syntax:proxy_cache_lockon |off;
Default:
proxy_cache_lock off;
Context:http,server,location

This directive appeared in version 1.1.12.

When enabled, only one request at a time will be allowed to populatea new cache element identified according to theproxy_cache_keydirective by passing a request to a proxied server.Other requests of the same cache element will either waitfor a response to appear in the cache or the cache lock forthis element to be released, up to the time set by theproxy_cache_lock_timeout directive.

Syntax:proxy_cache_lock_agetime;
Default:
proxy_cache_lock_age 5s;
Context:http,server,location

This directive appeared in version 1.7.8.

If the last request passed to the proxied serverfor populating a new cache elementhas not completed for the specifiedtime,one more request may be passed to the proxied server.

Syntax:proxy_cache_lock_timeouttime;
Default:
proxy_cache_lock_timeout 5s;
Context:http,server,location

This directive appeared in version 1.1.12.

Sets a timeout forproxy_cache_lock.When thetime expires,the request will be passed to the proxied server,however, the response will not be cached.

Before 1.7.8, the response could be cached.

Syntax:proxy_cache_max_range_offsetnumber;
Default:
Context:http,server,location

This directive appeared in version 1.11.6.

Sets an offset in bytes for byte-range requests.If the range is beyond the offset,the range request will be passed to the proxied serverand the response will not be cached.

Syntax:proxy_cache_methodsGET |HEAD |POST ...;
Default:
proxy_cache_methods GET HEAD;
Context:http,server,location

This directive appeared in version 0.7.59.

If the client request method is listed in this directive thenthe response will be cached.“GET” and “HEAD” methods are alwaysadded to the list, though it is recommended to specify them explicitly.See also theproxy_no_cache directive.

Syntax:proxy_cache_min_usesnumber;
Default:
proxy_cache_min_uses 1;
Context:http,server,location

Sets thenumber of requests after which the responsewill be cached.

Syntax:proxy_cache_pathpath [levels=levels] [use_temp_path=on|off]keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:
Context:http

Sets the path and other parameters of a cache.Cache data are stored in files.The file name in a cache is a result ofapplying the MD5 function to thecache key.Thelevels parameter defines hierarchy levels of a cache:from 1 to 3, each level accepts values 1 or 2.For example, in the following configuration

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

file names in a cache will look like this:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

A cached response is first written to a temporary file,and then the file is renamed.Starting from version 0.8.9, temporary files and the cache can be put ondifferent file systems.However, be aware that in this case a file is copiedacross two file systems instead of the cheap renaming operation.It is thus recommended that for any given location both cache and a directoryholding temporary filesare put on the same file system.The directory for temporary files is set based ontheuse_temp_path parameter (1.7.10).If this parameter is omitted or set to the valueon,the directory set by theproxy_temp_path directivefor the given location will be used.If the value is set tooff,temporary files will be put directly in the cache directory.

In addition, all active keys and information about data are storedin a shared memory zone, whosename andsizeare configured by thekeys_zone parameter.One megabyte zone can store about 8 thousand keys.

As part ofcommercial subscription,the shared memory zone also stores extendedcacheinformation,thus, it is required to specify a larger zone size for the same number of keys.For example,one megabyte zone can store about 4 thousand keys.

Cached data that are not accessed during the time specified by theinactive parameter get removed from the cacheregardless of their freshness.By default,inactive is set to 10 minutes.

The special “cache manager” process monitors the maximum cache size setby themax_size parameter,and the minimum amount of free space setby themin_free (1.19.1) parameteron the file system with cache.When the size is exceeded or there is not enough free space,it removes the least recently used data.The data is removed in iterations configured bymanager_files,manager_threshold, andmanager_sleep parameters (1.11.5).During one iteration no more thanmanager_files itemsare deleted (by default, 100).The duration of one iteration is limited by themanager_threshold parameter (by default, 200 milliseconds).Between iterations, a pause configured by themanager_sleepparameter (by default, 50 milliseconds) is made.

A minute after the start the special “cache loader” process is activated.It loads information about previously cached data stored on file systeminto a cache zone.The loading is also done in iterations.During one iteration no more thanloader_files itemsare loaded (by default, 100).Besides, the duration of one iteration is limited by theloader_threshold parameter (by default, 200 milliseconds).Between iterations, a pause configured by theloader_sleepparameter (by default, 50 milliseconds) is made.

Additionally,the following parameters are available as part of ourcommercial subscription:

purger=on|off
Instructs whether cache entries that match awildcard keywill be removed from the disk by the cache purger (1.7.12).Setting the parameter toon(default isoff)will activate the “cache purger” process thatpermanently iterates through all cache entriesand deletes the entries that match the wildcard key.
purger_files=number
Sets the number of items that will be scanned during one iteration (1.7.12).By default,purger_files is set to 10.
purger_threshold=number
Sets the duration of one iteration (1.7.12).By default,purger_threshold is set to 50 milliseconds.
purger_sleep=number
Sets a pause between iterations (1.7.12).By default,purger_sleep is set to 50 milliseconds.

In versions 1.7.3, 1.7.7, and 1.11.10 cache header format has been changed.Previously cached responses will be considered invalidafter upgrading to a newer nginx version.

Syntax:proxy_cache_purge string ...;
Default:
Context:http,server,location

This directive appeared in version 1.5.7.

Defines conditions under which the request will be considered a cachepurge request.If at least one value of the string parameters is not empty and is not equalto “0” then the cache entry with a correspondingcache key is removed.The result of successful operation is indicated by returningthe 204 (No Content) response.

If thecache key of a purge request endswith an asterisk (“*”), all cache entries matching thewildcard key will be removed from the cache.However, these entries will remain on the disk until they are deletedfor eitherinactivity,or processed by thecache purger (1.7.12),or a client attempts to access them.

Example configuration:

proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;map $request_method $purge_method {    PURGE   1;    default 0;}server {    ...    location / {        proxy_pass http://backend;        proxy_cache cache_zone;        proxy_cache_key $uri;        proxy_cache_purge $purge_method;    }}

This functionality is available as part of ourcommercial subscription.

Syntax:proxy_cache_revalidateon |off;
Default:
proxy_cache_revalidate off;
Context:http,server,location

This directive appeared in version 1.5.7.

Enables revalidation of expired cache items using conditional requests withthe “If-Modified-Since” and “If-None-Match”header fields.

Syntax:proxy_cache_use_staleerror |timeout |invalid_header |updating |http_500 |http_502 |http_503 |http_504 |http_403 |http_404 |http_429 |off ...;
Default:
proxy_cache_use_stale off;
Context:http,server,location

Determines in which cases a stale cached response can be usedduring communication with the proxied server.The directive’s parameters match the parameters of theproxy_next_upstream directive.

Theerror parameter also permitsusing a stale cached response if a proxied server to process a requestcannot be selected.

Additionally, theupdating parameter permitsusing a stale cached response if it is currently being updated.This allows minimizing the number of accesses to proxied serverswhen updating cached data.

Using a stale cached responsecan also be enabled directly in the response headerfor a specified number of seconds after the response became stale (1.11.10).This has lower priority than using the directive parameters.

To minimize the number of accesses to proxied servers whenpopulating a new cache element, theproxy_cache_lockdirective can be used.

Syntax:proxy_cache_valid [code ...]time;
Default:
Context:http,server,location

Sets caching time for different response codes.For example, the following directives

proxy_cache_valid 200 302 10m;proxy_cache_valid 404      1m;

set 10 minutes of caching for responses with codes 200 and 302and 1 minute for responses with code 404.

If only cachingtime is specified

proxy_cache_valid 5m;

then only 200, 301, and 302 responses are cached.

In addition, theany parameter can be specifiedto cache any responses:

proxy_cache_valid 200 302 10m;proxy_cache_valid 301      1h;proxy_cache_valid any      1m;

Parameters of caching can also be set directlyin the response header.This has higher priority than setting of caching time using the directive.

Processing of one or more of these response header fields can be disabledusing theproxy_ignore_headers directive.

Syntax:proxy_connect_timeouttime;
Default:
proxy_connect_timeout 60s;
Context:http,server,location

Defines a timeout for establishing a connection with a proxied server.It should be noted that this timeout cannot usually exceed 75 seconds.

Syntax:proxy_cookie_domainoff;
proxy_cookie_domaindomainreplacement;
Default:
proxy_cookie_domain off;
Context:http,server,location

This directive appeared in version 1.1.15.

Sets a text that should be changed in thedomainattribute of the “Set-Cookie” header fields of aproxied server response.Suppose a proxied server returned the “Set-Cookie”header field with the attribute“domain=localhost”.The directive

proxy_cookie_domain localhost example.org;

will rewrite this attribute to“domain=example.org”.

A dot at the beginning of thedomain andreplacement strings and thedomainattribute is ignored.Matching is case-insensitive.

Thedomain andreplacement stringscan contain variables:

proxy_cookie_domain www.$host $host;

The directive can also be specified using regular expressions.In this case,domain should start fromthe “~” symbol.A regular expression can contain named and positional captures,andreplacement can reference them:

proxy_cookie_domain ~\.(?P<sl_domain>[-0-9a-z]+\.[a-z]+)$ $sl_domain;

Severalproxy_cookie_domain directivescan be specified on the same level:

proxy_cookie_domain localhost example.org;proxy_cookie_domain ~\.([a-z]+\.[a-z]+)$ $1;

If several directives can be applied to the cookie,the first matching directive will be chosen.

Theoff parameter cancels the effectof theproxy_cookie_domain directivesinherited from the previous configuration level.

Syntax:proxy_cookie_flagsoff |cookie [flag ...];
Default:
proxy_cookie_flags off;
Context:http,server,location

This directive appeared in version 1.19.3.

Sets one or more flags for the cookie.Thecookie can contain text, variables, and their combinations.Theflagcan contain text, variables, and their combinations (1.19.8).Thesecure,httponly,samesite=strict,samesite=lax,samesite=noneparameters add the corresponding flags.Thenosecure,nohttponly,nosamesiteparameters remove the corresponding flags.

The cookie can also be specified using regular expressions.In this case,cookie should start fromthe “~” symbol.

Severalproxy_cookie_flags directivescan be specified on the same configuration level:

proxy_cookie_flags one httponly;proxy_cookie_flags ~ nosecure samesite=strict;

If several directives can be applied to the cookie,the first matching directive will be chosen.In the example, thehttponly flagis added to the cookieone,for all other cookiesthesamesite=strict flag is added andthesecure flag is deleted.

Theoff parameter cancels the effectof theproxy_cookie_flags directivesinherited from the previous configuration level.

Syntax:proxy_cookie_pathoff;
proxy_cookie_pathpathreplacement;
Default:
proxy_cookie_path off;
Context:http,server,location

This directive appeared in version 1.1.15.

Sets a text that should be changed in thepathattribute of the “Set-Cookie” header fields of aproxied server response.Suppose a proxied server returned the “Set-Cookie”header field with the attribute“path=/two/some/uri/”.The directive

proxy_cookie_path /two/ /;

will rewrite this attribute to“path=/some/uri/”.

Thepath andreplacement stringscan contain variables:

proxy_cookie_path $uri /some$uri;

The directive can also be specified using regular expressions.In this case,path should either start fromthe “~” symbol for a case-sensitive matching,or from the “~*” symbols for case-insensitivematching.The regular expression can contain named and positional captures,andreplacement can reference them:

proxy_cookie_path ~*^/user/([^/]+) /u/$1;

Severalproxy_cookie_path directivescan be specified on the same level:

proxy_cookie_path /one/ /;proxy_cookie_path / /two/;

If several directives can be applied to the cookie,the first matching directive will be chosen.

Theoff parameter cancels the effectof theproxy_cookie_path directivesinherited from the previous configuration level.

Syntax:proxy_force_rangeson |off;
Default:
proxy_force_ranges off;
Context:http,server,location

This directive appeared in version 1.7.7.

Enables byte-range supportfor both cached and uncached responses from the proxied serverregardless of the “Accept-Ranges” field in these responses.

Syntax:proxy_headers_hash_bucket_sizesize;
Default:
proxy_headers_hash_bucket_size 64;
Context:http,server,location

Sets the bucketsize for hash tablesused by theproxy_hide_header andproxy_set_headerdirectives.The details of setting up hash tables are provided in a separatedocument.

Syntax:proxy_headers_hash_max_sizesize;
Default:
proxy_headers_hash_max_size 512;
Context:http,server,location

Sets the maximumsize of hash tablesused by theproxy_hide_header andproxy_set_headerdirectives.The details of setting up hash tables are provided in a separatedocument.

Syntax:proxy_hide_headerfield;
Default:
Context:http,server,location

By default,nginx does not pass the header fields “Date”,“Server”, “X-Pad”, and“X-Accel-...” from the response of a proxiedserver to a client.Theproxy_hide_header directive sets additional fieldsthat will not be passed.If, on the contrary, the passing of fields needs to be permitted,theproxy_pass_header directive can be used.

Syntax:proxy_http_version1.0 |1.1;
Default:
proxy_http_version 1.0;
Context:http,server,location

This directive appeared in version 1.1.4.

Sets the HTTP protocol version for proxying.By default, version 1.0 is used.Version 1.1 is recommended for use withkeepaliveconnections andNTLM authentication.

Syntax:proxy_ignore_client_aborton |off;
Default:
proxy_ignore_client_abort off;
Context:http,server,location

Determines whether the connection with a proxied server should beclosed when a client closes the connection without waitingfor a response.

Syntax:proxy_ignore_headersfield ...;
Default:
Context:http,server,location

Disables processing of certain response header fields from the proxied server.The following fields can be ignored: “X-Accel-Redirect”,“X-Accel-Expires”, “X-Accel-Limit-Rate” (1.1.6),“X-Accel-Buffering” (1.1.6),“X-Accel-Charset” (1.1.6), “Expires”,“Cache-Control”, “Set-Cookie” (0.8.44),and “Vary” (1.7.7).

If not disabled, processing of these header fields has the followingeffect:

Syntax:proxy_intercept_errorson |off;
Default:
proxy_intercept_errors off;
Context:http,server,location

Determines whether proxied responses with codes greater than or equalto 300 should be passed to a clientor be intercepted and redirected to nginx for processingwith theerror_page directive.

Syntax:proxy_limit_raterate;
Default:
proxy_limit_rate 0;
Context:http,server,location

This directive appeared in version 1.7.7.

Limits the speed of reading the response from the proxied server.Therate is specified in bytes per second.The zero value disables rate limiting.The limit is set per a request, and so if nginx simultaneously openstwo connections to the proxied server,the overall rate will be twice as much as the specified limit.The limitation works only ifbuffering of responses from the proxiedserver is enabled.Parameter value can contain variables (1.27.0).

Syntax:proxy_max_temp_file_sizesize;
Default:
proxy_max_temp_file_size 1024m;
Context:http,server,location

Whenbuffering of responses from the proxiedserver is enabled, and the whole response does not fit into the buffersset by theproxy_buffer_size andproxy_buffersdirectives, a part of the response can be saved to a temporary file.This directive sets the maximumsize of the temporary file.The size of data written to the temporary file at a time is setby theproxy_temp_file_write_size directive.

The zero value disables buffering of responses to temporary files.

This restriction does not apply to responsesthat will becachedorstored on disk.

Syntax:proxy_methodmethod;
Default:
Context:http,server,location

Specifies the HTTPmethod to use in requests forwardedto the proxied server instead of the method from the client request.Parameter value can contain variables (1.11.6).

Syntax:proxy_next_upstreamerror |timeout |invalid_header |http_500 |http_502 |http_503 |http_504 |http_403 |http_404 |http_429 |non_idempotent |off ...;
Default:
proxy_next_upstream error timeout;
Context:http,server,location

Specifies in which cases a request should be passed to the next server:

error
an error occurred while establishing a connection with theserver, passing a request to it, or reading the response header;
timeout
a timeout has occurred while establishing a connection with theserver, passing a request to it, or reading the response header;
invalid_header
a server returned an empty or invalid response;
http_500
a server returned a response with the code 500;
http_502
a server returned a response with the code 502;
http_503
a server returned a response with the code 503;
http_504
a server returned a response with the code 504;
http_403
a server returned a response with the code 403;
http_404
a server returned a response with the code 404;
http_429
a server returned a response with the code 429 (1.11.13);
non_idempotent
normally, requests with anon-idempotentmethod(POST,LOCK,PATCH)are not passed to the next serverif a request has been sent to an upstream server (1.9.13);enabling this option explicitly allows retrying such requests;
off
disables passing a request to the next server.

One should bear in mind that passing a request to the next server isonly possible if nothing has been sent to a client yet.That is, if an error or timeout occurs in the middle of thetransferring of a response, fixing this is impossible.

The directive also defines what is considered anunsuccessfulattempt of communication with a server.The cases oferror,timeout andinvalid_header are always considered unsuccessful attempts,even if they are not specified in the directive.The cases ofhttp_500,http_502,http_503,http_504,andhttp_429 areconsidered unsuccessful attempts only if they are specified in the directive.The cases ofhttp_403 andhttp_404are never considered unsuccessful attempts.

Passing a request to the next server can be limited bythe number of triesand bytime.

Syntax:proxy_next_upstream_timeouttime;
Default:
proxy_next_upstream_timeout 0;
Context:http,server,location

This directive appeared in version 1.7.5.

Limits the time during which a request can be passed to thenext server.The0 value turns off this limitation.

Syntax:proxy_next_upstream_triesnumber;
Default:
proxy_next_upstream_tries 0;
Context:http,server,location

This directive appeared in version 1.7.5.

Limits the number of possible tries for passing a request to thenext server.The0 value turns off this limitation.

Syntax:proxy_no_cachestring ...;
Default:
Context:http,server,location

Defines conditions under which the response will not be saved to a cache.If at least one value of the string parameters is not empty and is notequal to “0” then the response will not be saved:

proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;proxy_no_cache $http_pragma    $http_authorization;

Can be used along with theproxy_cache_bypass directive.

Syntax:proxy_passURL;
Default:
Context:location,if in location,limit_except

Sets the protocol and address of a proxied server and an optional URIto which a location should be mapped.As a protocol, “http” or “https”can be specified.The address can be specified as a domain name or IP address,and an optional port:

proxy_pass http://localhost:8000/uri/;

or as a UNIX-domain socket path specified after the word“unix” and enclosed in colons:

proxy_pass http://unix:/tmp/backend.socket:/uri/;

If a domain name resolves to several addresses, all of them will beused in a round-robin fashion.In addition, an address can be specified as aserver group.

Parameter value can contain variables.In this case, if an address is specified as a domain name,the name is searched among the described server groups,and, if not found, is determined using aresolver.

A request URI is passed to the server as follows:

In some cases, the part of a request URI to be replaced cannot be determined:

WebSocket proxying requires specialconfiguration and is supported since version 1.3.13.

Syntax:proxy_pass_headerfield;
Default:
Context:http,server,location

Permits passingotherwise disabled headerfields from a proxied server to a client.

Syntax:proxy_pass_request_bodyon |off;
Default:
proxy_pass_request_body on;
Context:http,server,location

Indicates whether the original request body is passedto the proxied server.

location /x-accel-redirect-here/ {    proxy_method GET;    proxy_pass_request_body off;    proxy_set_header Content-Length "";    proxy_pass ...}

See also theproxy_set_header andproxy_pass_request_headers directives.

Syntax:proxy_pass_request_headerson |off;
Default:
proxy_pass_request_headers on;
Context:http,server,location

Indicates whether the header fields of the original request are passedto the proxied server.

location /x-accel-redirect-here/ {    proxy_method GET;    proxy_pass_request_headers off;    proxy_pass_request_body off;    proxy_pass ...}

See also theproxy_set_header andproxy_pass_request_body directives.

Syntax:proxy_pass_trailerson |off;
Default:
proxy_pass_trailers off;
Context:http,server,location

This directive appeared in version 1.27.2.

Permits passing trailer fields from a proxied server to a client.

A trailer section in HTTP/1.1 isexplicitlyenabled.

location / {    proxy_http_version 1.1;    proxy_set_header Connection "te";    proxy_set_header TE "trailers";    proxy_pass_trailers on;    proxy_pass ...}

Syntax:proxy_read_timeouttime;
Default:
proxy_read_timeout 60s;
Context:http,server,location

Defines a timeout for reading a response from the proxied server.The timeout is set only between two successive read operations,not for the transmission of the whole response.If the proxied server does not transmit anything within this time,the connection is closed.

Syntax:proxy_redirectdefault;
proxy_redirectoff;
proxy_redirectredirectreplacement;
Default:
proxy_redirect default;
Context:http,server,location

Sets the text that should be changed in the “Location”and “Refresh” header fields of a proxied server response.Suppose a proxied server returned the header field“Location: http://localhost:8000/two/some/uri/”.The directive

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

will rewrite this string to“Location: http://frontend/one/some/uri/”.

A server name may be omitted in thereplacement string:

proxy_redirect http://localhost:8000/two/ /;

then the primary server’s name and port, if different from 80,will be inserted.

The default replacement specified by thedefault parameteruses the parameters of thelocation andproxy_pass directives.Hence, the two configurations below are equivalent:

location /one/ {    proxy_pass     http://upstream:port/two/;    proxy_redirect default;

location /one/ {    proxy_pass     http://upstream:port/two/;    proxy_redirect http://upstream:port/two/ /one/;

Thedefault parameter is not permitted ifproxy_pass is specified using variables.

Areplacement string can contain variables:

proxy_redirect http://localhost:8000/ http://$host:$server_port/;

Aredirect can also contain (1.1.11) variables:

proxy_redirect http://$proxy_host:8000/ /;

The directive can be specified (1.1.11) using regular expressions.In this case,redirect should either start withthe “~” symbol for a case-sensitive matching,or with the “~*” symbols for case-insensitivematching.The regular expression can contain named and positional captures,andreplacement can reference them:

proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;proxy_redirect ~*/user/([^/]+)/(.+)$      http://$1.example.com/$2;

Severalproxy_redirect directivescan be specified on the same level:

proxy_redirect default;proxy_redirect http://localhost:8000/  /;proxy_redirect http://www.example.com/ /;

If several directives can be applied tothe header fields of a proxied server response,the first matching directive will be chosen.

Theoff parameter cancels the effectof theproxy_redirect directivesinherited from the previous configuration level.

Using this directive, it is also possible to add host names to relativeredirects issued by a proxied server:

proxy_redirect / /;

Syntax:proxy_request_bufferingon |off;
Default:
proxy_request_buffering on;
Context:http,server,location

This directive appeared in version 1.7.11.

Enables or disables buffering of a client request body.

When buffering is enabled, the entire request body isreadfrom the client before sending the request to a proxied server.

When buffering is disabled, the request body is sent to the proxied serverimmediately as it is received.In this case, the request cannot be passed to thenext serverif nginx already started sending the request body.

When HTTP/1.1 chunked transfer encoding is usedto send the original request body,the request body will be buffered regardless of the directive value unlessHTTP/1.1 isenabled for proxying.

Syntax:proxy_send_lowatsize;
Default:
proxy_send_lowat 0;
Context:http,server,location

If the directive is set to a non-zero value, nginx will try tominimize the numberof send operations on outgoing connections to a proxied server by using eitherNOTE_LOWAT flag of thekqueue method,or theSO_SNDLOWAT socket option,with the specifiedsize.

This directive is ignored on Linux, Solaris, and Windows.

Syntax:proxy_send_timeouttime;
Default:
proxy_send_timeout 60s;
Context:http,server,location

Sets a timeout for transmitting a request to the proxied server.The timeout is set only between two successive write operations,not for the transmission of the whole request.If the proxied server does not receive anything within this time,the connection is closed.

Syntax:proxy_set_bodyvalue;
Default:
Context:http,server,location

Allows redefining the request body passed to the proxied server.Thevalue can contain text, variables, and their combination.

Syntax:proxy_set_headerfieldvalue;
Default:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:http,server,location

Allows redefining or appending fields to the request headerpassed to the proxied server.Thevalue can contain text, variables, and their combinations.These directives are inherited from the previous configuration levelif and only if there are noproxy_set_header directivesdefined on the current level.By default, only two fields are redefined:

proxy_set_header Host       $proxy_host;proxy_set_header Connection close;

If caching is enabled, the header fields“If-Modified-Since”,“If-Unmodified-Since”,“If-None-Match”,“If-Match”,“Range”,and“If-Range”from the original request are not passed to the proxied server.

An unchanged “Host” request header field can be passed like this:

proxy_set_header Host       $http_host;

However, if this field is not present in a client request header thennothing will be passed.In such a case it is better to use the$host variable - itsvalue equals the server name in the “Host” request headerfield or the primary server name if this field is not present:

proxy_set_header Host       $host;

In addition, the server name can be passed together with the port of theproxied server:

proxy_set_header Host       $host:$proxy_port;

If the value of a header field is an empty string then thisfield will not be passed to a proxied server:

proxy_set_header Accept-Encoding "";

Syntax:proxy_socket_keepaliveon |off;
Default:
proxy_socket_keepalive off;
Context:http,server,location

This directive appeared in version 1.15.6.

Configures the “TCP keepalive” behaviorfor outgoing connections to a proxied server.By default, the operating system’s settings are in effect for the socket.If the directive is set to the value “on”, theSO_KEEPALIVE socket option is turned on for the socket.

Syntax:proxy_ssl_certificatefile;
Default:
Context:http,server,location

This directive appeared in version 1.7.8.

Specifies afile with the certificate in the PEM formatused for authentication to a proxied HTTPS server.

Since version 1.21.0, variables can be used in thefile name.

Syntax:proxy_ssl_certificate_cacheoff;
proxy_ssl_certificate_cachemax=N [inactive=time] [valid=time];
Default:
proxy_ssl_certificate_cache off;
Context:http,server,location

This directive appeared in version 1.27.4.

Defines a cache that storesSSL certificates andsecret keysspecified withvariables.

The directive has the following parameters:

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 cacheif it has not been accessed during this time;by default, it is 10 seconds;
valid
defines a time during whichan element in the cache is considered validand can be reused;by default, it is 60 seconds.Certificates that exceed this time will be reloaded or revalidated;
off
disables the cache.

Example:

proxy_ssl_certificate       $proxy_ssl_server_name.crt;proxy_ssl_certificate_key   $proxy_ssl_server_name.key;proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;

Syntax:proxy_ssl_certificate_keyfile;
Default:
Context:http,server,location

This directive appeared in version 1.7.8.

Specifies afile with the secret key in the PEM formatused for authentication to a proxied HTTPS server.

The valueengine:name:idcan be specified instead of thefile (1.7.9),which loads a secret key with a specifiedidfrom the OpenSSL enginename.

The valuestore:scheme:idcan be specified instead of thefile (1.29.0),which is used to load a secret key with a specifiedidand OpenSSL provider registered URIscheme, such aspkcs11.

Since version 1.21.0, variables can be used in thefile name.

Syntax:proxy_ssl_ciphersciphers;
Default:
proxy_ssl_ciphers DEFAULT;
Context:http,server,location

This directive appeared in version 1.5.6.

Specifies the enabled ciphers for requests to a proxied HTTPS server.The ciphers are specified in the format understood by the OpenSSL library.

The full list can be viewed using the“openssl ciphers” command.

Syntax:proxy_ssl_conf_commandnamevalue;
Default:
Context:http,server,location

This directive appeared in version 1.19.4.

Sets arbitrary OpenSSL configurationcommandswhen establishing a connection with the proxied HTTPS server.

The directive is supported when using OpenSSL 1.0.2 or higher.

Severalproxy_ssl_conf_command directivescan be specified on the same level.These directives are inherited from the previous configuration levelif and only if there arenoproxy_ssl_conf_command directivesdefined on the current level.

Note that configuring OpenSSL directlymight result in unexpected behavior.

Syntax:proxy_ssl_crlfile;
Default:
Context:http,server,location

This directive appeared in version 1.7.0.

Specifies afile with revoked certificates (CRL)in the PEM format used toverifythe certificate of the proxied HTTPS server.

Syntax:proxy_ssl_key_log path;
Default:
Context:http,server,location

This directive appeared in version 1.27.2.

Enables logging of proxied HTTPS server connection SSL keysand specifies the path to the key log file.Keys are logged in theSSLKEYLOGFILEformat compatible with Wireshark.

This directive is available as part of ourcommercial subscription.

Syntax:proxy_ssl_namename;
Default:
proxy_ssl_name $proxy_host;
Context:http,server,location

This directive appeared in version 1.7.0.

Allows overriding the server name used toverifythe certificate of the proxied HTTPS server and to bepassed through SNIwhen establishing a connection with the proxied HTTPS server.

By default, the host part of theproxy_pass URL is used.

Syntax:proxy_ssl_password_filefile;
Default:
Context:http,server,location

This directive appeared in version 1.7.8.

Specifies afile with passphrases forsecret keyswhere each passphrase is specified on a separate line.Passphrases are tried in turn when loading the key.

Syntax:proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
Default:
proxy_ssl_protocols TLSv1.2 TLSv1.3;
Context:http,server,location

This directive appeared in version 1.5.6.

Enables the specified protocols for requests to a proxied HTTPS server.

TheTLSv1.3 parameter is used by defaultsince 1.23.4.

Syntax:proxy_ssl_server_nameon |off;
Default:
proxy_ssl_server_name off;
Context:http,server,location

This directive appeared in version 1.7.0.

Enables or disables passing of the server name throughTLSServer Name Indication extension (SNI, RFC 6066)when establishing a connection with the proxied HTTPS server.

Syntax:proxy_ssl_session_reuseon |off;
Default:
proxy_ssl_session_reuse on;
Context:http,server,location

Determines whether SSL sessions can be reused when working withthe proxied server.If the errors“digest check failed”appear in the logs, try disabling session reuse.

Syntax:proxy_ssl_trusted_certificatefile;
Default:
Context:http,server,location

This directive appeared in version 1.7.0.

Specifies afile with trusted CA certificates in the PEM formatused toverifythe certificate of the proxied HTTPS server.

Syntax:proxy_ssl_verifyon |off;
Default:
proxy_ssl_verify off;
Context:http,server,location

This directive appeared in version 1.7.0.

Enables or disables verification of the proxied HTTPS server certificate.

Syntax:proxy_ssl_verify_depthnumber;
Default:
proxy_ssl_verify_depth 1;
Context:http,server,location

This directive appeared in version 1.7.0.

Sets the verification depth in the proxied HTTPS server certificates chain.

Syntax:proxy_storeon |off |string;
Default:
proxy_store off;
Context:http,server,location

Enables saving of files to a disk.Theon parameter saves files with pathscorresponding to the directivesalias orroot.Theoff parameter disables saving of files.In addition, the file name can be set explicitly using thestring with variables:

proxy_store /data/www$original_uri;

The modification time of files is set according to the received“Last-Modified” response header field.The response is first written to a temporary file,and then the file is renamed.Starting from version 0.8.9, temporary files and the persistent storecan be put on different file systems.However, be aware that in this case a file is copiedacross two file systems instead of the cheap renaming operation.It is thus recommended that for any given location both saved files and adirectory holding temporary files, set by theproxy_temp_pathdirective, are put on the same file system.

This directive can be used to create local copies of static unchangeablefiles, e.g.:

location /images/ {    root               /data/www;    error_page         404 = /fetch$uri;}location /fetch/ {    internal;    proxy_pass         http://backend/;    proxy_store        on;    proxy_store_access user:rw group:rw all:r;    proxy_temp_path    /data/temp;    alias              /data/www/;}

or like this:

location /images/ {    root               /data/www;    error_page         404 = @fetch;}location @fetch {    internal;    proxy_pass         http://backend;    proxy_store        on;    proxy_store_access user:rw group:rw all:r;    proxy_temp_path    /data/temp;    root               /data/www;}

Syntax:proxy_store_accessusers:permissions ...;
Default:
proxy_store_access user:rw;
Context:http,server,location

Sets access permissions for newly created files and directories, e.g.:

proxy_store_access user:rw group:rw all:r;

If anygroup orall access permissionsare specified thenuser permissions may be omitted:

proxy_store_access group:rw all:r;

Syntax:proxy_temp_file_write_sizesize;
Default:
proxy_temp_file_write_size 8k|16k;
Context:http,server,location

Limits thesize of data written to a temporary fileat a time, when buffering of responses from the proxied serverto temporary files is enabled.By default,size is limited by two buffers set by theproxy_buffer_size andproxy_buffers directives.The maximum size of a temporary file is set by theproxy_max_temp_file_size directive.

Syntax:proxy_temp_pathpath [level1 [level2 [level3]]];
Default:
proxy_temp_path proxy_temp;
Context:http,server,location

Defines a directory for storing temporary fileswith data received from proxied servers.Up to three-level subdirectory hierarchy can be used underneath the specifieddirectory.For example, in the following configuration

proxy_temp_path /spool/nginx/proxy_temp 1 2;

a temporary file might look like this:

/spool/nginx/proxy_temp/7/45/00000123457

See also theuse_temp_path parameter of theproxy_cache_path directive.

Embedded Variables

Thengx_http_proxy_module module supports embedded variablesthat can be used to compose headers using theproxy_set_header directive:

$proxy_host
name and port of a proxied server as specified in theproxy_pass directive;
$proxy_port
port of a proxied server as specified in theproxy_pass directive, or the protocol’s default port;
$proxy_add_x_forwarded_for
the “X-Forwarded-For” client request header fieldwith the$remote_addr variable appended to it, separated by a comma.If the “X-Forwarded-For” field is not present in the clientrequest header, the$proxy_add_x_forwarded_for variable is equalto the$remote_addr variable.


[8]ページ先頭

©2009-2025 Movatter.jp