nginx中文文档-ngx_http_proxy_module(F-N)

本文档包含以下指令: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_force_ranges

语法:proxy_force_ranges on | off
默认:proxy_force_ranges off
上下文:http, server, location
版本:1.7.7+

为从被代理服务器返回的缓存和非缓存响应开启byte-range支持,不管响应头中的“Accept-Ranges”。

proxy_headers_hash_bucket_size

语法:proxy_headers_hash_bucket_size size
默认:proxy_headers_hash_bucket_size 64
上下文:http, server, location

设置proxy_hide_header和proxy_set_header使用的哈希表大小。

proxy_headers_hash_max_size

语法:proxy_headers_hash_max_size size
默认:proxy_headers_hash_max_size 512
上下文:http, server, location

设置proxy_hide_header和proxy_set_header使用的哈希表最大大小。

proxy_hide_header

语法:proxy_hide_header field
默认:—
上下文:http, server, location

默认情况下,nginx不会将被代理服务器响应头“Date”、“Server”、“X-Pad”和“X-Accel-…”传给客户端。proxy_hide_header指令设置了其他不会传递的响应头。如果相反需要传某些头域,使用proxy_pass_header指令。

proxy_http_version

语法:proxy_http_version 1.0 | 1.1
默认:proxy_http_version 1.0
上下文:http, server, location
版本:1.1.4+

设置代理的HTTP协议版本,默认是1.0。

proxy_ignore_client_abort

语法:proxy_ignore_client_abort on | off
默认:proxy_ignore_client_abort off
上下文:http, server, location

决定当客户端没有等待响应就断开连接时,与被代理服务器连接是否需要关闭。

proxy_ignore_headers

语法:proxy_ignore_headers field
默认:—
上下文:http, server, location

禁用处理从被代理服务器返回的响应头。下面的头域可以忽略:“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), 和 “Vary” (1.7.7)。
如果不禁用,处理这些响应头有以下影响:

  • “X-Accel-Expires”, “Expires”, “Cache-Control”, “Set-Cookie”, 和“Vary”设置缓存的相关参数
  • “X-Accel-Redirect”产生指定URI的内部重定向
  • “X-Accel-Limit-Rate”设置传输响应到客户端的限速
  • “X-Accel-Buffering”启用或禁用响应的缓冲区
  • “X-Accel-Charset”设置希望响应的字符编码

proxy_intercept_errors

语法:proxy_intercept_errors on | off
默认:proxy_intercept_errors off
上下文:http, server, location

决定被代理服务器返回大于等于300的返回码时,直接传给客户端还是进入nginx的error_page指令进行处理。

proxy_limit_rate

语法:proxy_limit_rate rate
默认:proxy_limit_rate 0
上下文:http, server, location
版本:1.7.7+

限制从被代理服务器读取响应的速率。rate定义为每秒的字节数。零值禁用限速功能。限速针对于每一个请求,如果nginx同时向被代理服务器打开两个链接,整体的速率是设置值的二倍。只有读取响应缓冲区功能开启时限速才可用。

proxy_max_temp_file_size

语法:proxy_max_temp_file_size size
默认:proxy_max_temp_file_size 1024m
上下文:http, server, location

当启用了响应缓冲区功能,并且整个请求不能放到proxy_buffer_size和proxy_buffers指令设置的缓冲区中时,一部分响应会存到临时文件中。这个指令设置了临时文件的最大大小。一次写入到临时文件的数据大小由proxy_temp_file_write_size指令设置。
零值禁用缓冲区写入到临时文件功能。
这个限制对缓存或储存到磁盘上的请求不起作用。

proxy_method

语法:proxy_method method
默认:—
上下文:http, server, location

指定HTTP方法用于向被代理服务器发送请求,而不使用客户端请求的方法。

proxy_next_upstream

语法:proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | off …
默认:proxy_next_upstream error timeout
上下文:http, server, location

指定哪些情况下,请求会传给下一个服务器:
error
在与服务器建立连接、发送请求、读取响应头时出现错误

timeout
在与服务器建立连接、发送请求、读取响应头时发生超时

invalid_header
服务器返回空响应非法响应

http_500
服务器返回500错误码

http_502
服务器返回502错误码

http_503
服务器返回503错误码

http_504
服务器返回504错误码

http_403
服务器返回403错误码

http_404
服务器返回404错误码

non_idempotent
通常,非幂等的请求方法(POST、LOCK、PATCH)如果请求已经发送上游服务器(1.9.13+)将不会再传给下一个服务器。启用这个选项允许重试这些请求。

off
禁用传递请求到下一个服务器的功能。

应该了解的是,只有在没有任何数据发送给客户端时才可以将请求发送到下一个服务器。也就是说,如果在传输响应过程中发生了错误或超时,是不可能修复问题的。
该指令同时定义了与服务器通信时,哪些情况会被视为不成功的尝试。出错、超时以及非法头部总会视为不成功的尝试,即使它们没有定义在指令中。http_500, http_502, http_503 和 http_504只有定义在指令中时才会视为不成功的尝试。http_403 和 http_404从不会被认为是不成功的尝试。

proxy_next_upstream_timeout

语法:proxy_next_upstream_timeout time
默认:proxy_next_upstream_timeout 0
上下文:http, server, location
版本:1.7.5+

限制请求可以传给下一个服务器的时间。零值禁用这个限制。

proxy_next_upstream_tries

语法:proxy_next_upstream_tries number
默认:proxy_next_upstream_tries 0
上下文:http, server, location
版本:1.7.5+

限制尝试传递一个请求到下一个服务器的次数。零值禁用这个限制。

proxy_no_cache

语法:proxy_no_cache string
默认:—
上下文:http, server, location

定义在哪些情况下响应不会被缓存。如果string参数至少有一个不是空且不是“0”,则响应不会保存:

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

可以与proxy_cache_bypass指令一同使用。

nginx中文文档-ngx_http_proxy_module(B-C)

本文档包含以下指令:proxy_bind、proxy_buffer_size、proxy_buffering、proxy_buffers、proxy_busy_buffers_size、proxy_cache、proxy_cache_bypass、proxy_cache_convert_head、proxy_cache_key、proxy_cache_lock、proxy_cache_lock_age、proxy_cache_lock_timeout、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_path

proxy_bind

语法:proxy_bind address [transparent] | off
默认:—
上下文:http, server, location
版本:0.8.22+

外部连接到被代理服务器的指定本地IP地址。参数值可以包含变量(1.3.12+),特殊值off(1.3.12+)取消从上级配置中继承的proxy_bind的影响,使系统可以自动分配本地IP地址。
transparent参数(1.11.0+)允许从一个非本地IP地址发起外部连接到代理服务器,例如使用真实的客户端IP:
proxy_bind $remote_addr transparent;
为了使该参数可用,需要将nginx的工作进程以超级用户权限执行并且配置核心路由表阻断从被代理服务器的网络流量。

proxy_buffer_size

语法:proxy_buffer_size size
默认:proxy_buffer_size 4k|8k
上下文:http, server, location

设置用于读取从被代理服务器收到的响应的第一部分的缓冲区大小。该部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一页内存。这个值是4k或8k取决于平台。但是可以变得更小。

proxy_buffering

语法:proxy_buffering on | off
默认:proxy_buffering on
上下文:http, server, location

启用或禁用从被代理服务器返回的响应的缓冲区。
当缓冲区启用,nginx收到请求后尽快的将其保存到proxy_buffer_size和proxy_buffers指令设置的缓冲区中。如果整个响应不能放到内存中,有一部分会存到磁盘上的临时文件中。写入到由proxy_max_temp_file_size和proxy_temp_file_write_size指令控制的临时文件中。
当缓冲区禁用时,响应会在收到后同步的传给客户端。nginx不会尝试从被代理服务器读取完整的响应。nginx一次可以接收的数据最大值由proxy_buffer_size指令设置。
缓冲区也可以分别通过响应头中“X-Accel-Buffering”字段的“yes”和“no”启用及禁用。这个功能可以使用proxy_ignore_headers指令禁用。

proxy_buffers

语法:proxy_buffers number size
默认:proxy_buffers 8 4k|8k
上下文:http, server, location

设置用于读取响应的缓冲区数量和大小。默认,缓冲区大小等于一页内存。该值为4k或8k取决于平台。

proxy_busy_buffers_size

语法:proxy_busy_buffers_size size
默认:proxy_busy_buffers_size 8k|16k
上下文:http, server, location

当读取响应缓冲区开启时,限制缓冲区总大小会在没有完全读取响应时,忙着发送给客户端响应。同时剩余的缓冲区可以用来读取响应,如果需要,缓冲区的部分响应会放入临时文件。默认情况下,大小受proxy_buffer_size和proxy_buffers指令设置的两个缓冲区大小限制。

proxy_cache

语法:proxy_cache zone | off
默认:proxy_cache off
上下文:http, server, location

定义缓存的共享内存区域。相同的区域可以用在不同的位置。参数可以包含变量(1.7.9+)。off参数禁用了从上级配置中继承的缓存。

proxy_cache_bypass

语法:proxy_cache_bypass string
默认:—
上下文:http, server, location

定义在哪些情况下,响应不会从缓存中取。如果有至少一个字符串参数非空或不等于“0”,则响应不会从缓存中取:

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

可以同proxy_no_cache指令一同使用。

proxy_cache_convert_head

语法:proxy_cache_convert_head on | off
默认:proxy_cache_convert_head on
上下文:http, server, location
版本:1.9.7+

启用或禁用为缓存将“HEAD”方法转换为“GET”方法。当转换被禁用时,cache_key应该配置为包含$request_method。

proxy_cache_key

语法:proxy_cache_key string
默认:proxy_cache_key $scheme$proxy_host$request_uri
上下文:http, server, location

为缓存定义一个关键字,例如:
proxy_cache_key "$host$request_uri $cookie_user";
默认情况下,指令的值接近字符串:
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

proxy_cache_lock

语法:proxy_cache_lock on | off
默认:proxy_cache_lock off
上下文:http, server, location
版本:1.1.12+

当启用时,同一时间只有一个请求允许在新的缓存元素中。其他使用相同缓存元素的请求要么等待缓存中出现的响应,要么等待该元素被释放,时间由proxy_cache_lock_timeout指令设置。

proxy_cache_lock_age

语法:proxy_cache_lock_age time
默认:proxy_cache_lock_age 5s
上下文:http, server, location
版本:1.7.8+

如果最后一个发送给被代理服务器的请求占用一个新的缓存元素,并没有在指定时间内完成,其他的请求可以发送到被代理服务器。

proxy_cache_lock_timeout

语法:proxy_cache_lock_timeout time
默认:proxy_cache_lock_timeout 5s
上下文:http, server, location
版本:1.1.12+

为proxy_cache_lock设置超时时间。当时间过期,请求会发送给被代理服务器,但是,响应不会被缓存。
在1.7.8版本以前,缓存会被缓存。

proxy_cache_methods

语法:proxy_cache_methods GET | HEAD | POST …
默认:proxy_cache_methods GET HEAD
上下文:http, server, location
版本:0.7.59+

如果客户端请求方法在这个指令的列表中,响应将被缓存。“GET”和“HEAD”方法总会添加到列表中,不过建议显式的声明。

proxy_cache_min_uses

语法:proxy_cache_min_uses number
默认:proxy_cache_min_uses 1
上下文:http, server, location

设置请求数量,在这之后的响应会被缓存。

proxy_cache_path

语法:proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]
默认:—
上下文:http

设置缓存的路径以及其他参数。缓存数据存储在文件中。缓存中文件名是cache_key做md5的结果。levels参数定义了缓存的层级。例如,下面的配置
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
缓存的文件名类似于
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
缓存的响应首先写到临时文件中,然后文件重命名。从0.8.9版本开始,临时文件和缓存可以放在不同的文件系统上。但是,需要知道的是,这种情况下,一个文件要在两个文件系统中复制,而不是代价更低的重命名操作。建议将临时文件和缓存放到同一个文件系统上。缓存文件的目录通过use_temp_path参数(1.7.10+)设置。如果参数忽略或设置为on,proxy_temp_path指令给出的位置将被使用。如果值为off,临时文件将直接写到缓存目录中。
所有活动的关键字和关于数据的信息都保存在共享内存区域,它们的名称和大小有keys_zone参数配置。1M的区域大约可以存储8000个关键字。
在inactive参数定义的时间内,缓存数据没有被访问将从缓存中移除,而不管它们的新鲜度。默认情况下,inactive设置为10分钟。
特殊的“cache manager”进程监控max_size参数设置的最大缓存大小。当这个值超了,就会将最近最少使用的数据移除。
启动后一分钟,“cache loader”进程激活。它会加载之前存储在文件系统中的缓存数据到缓存区域中。加载是通过迭代方式进行的,每次迭代不超过loader_files个项目载入(默认是100个)。另外,每个迭代的持续时间有loader_threshold参数限制(默认200毫秒)。在迭代之间,会有由loader_sleep参数(默认50毫秒)配置的暂停。
下面的参数为商业版可用(商业版本不再翻译):
purger=on|off
Instructs whether cache entries that match a wildcard key will be removed from the disk by the cache purger (1.7.12). Setting the parameter to on (default is off) will activate the “cache purger” process that permanently iterates through all cache entries and 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.

proxy_cache_purge

语法:proxy_cache_purge string …
默认:—
上下文:http, server, location
版本:1.5.7+

商业版本中可用。
Defines conditions under which the request will be considered a cache purge request. If at least one value of the string parameters is not empty and is not equal to “0” then the cache entry with a corresponding cache key is removed. The result of successful operation is indicated by returning the 204 (No Content) response.

If the cache key of a purge request ends with an asterisk (“*”), all cache entries matching the wildcard key will be removed from the cache. However, these entries will remain on the disk until they are deleted for either inactivity, or processed by the cache purger (1.7.12), or a client attempts to access them.

示例配置

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;
    }
}

proxy_cache_revalidate

语法:proxy_cache_revalidate on | off
默认:proxy_cache_revalidate off
上下文:http, server, location
版本:1.5.7+

开启过期缓存重验证功能,使用请求头中“If-Modified-Since”和“If-None-Match”字段。

proxy_cache_use_stale

语法:proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …
默认:proxy_cache_use_stale off
上下文:http, server, location

决定在与被代理服务器通信期间出现错误时,哪些情况下可以使用老的缓存响应。指令参数匹配proxy_next_upstream指令的参数。
error参数在请求无法选择时,使用老的缓存响应。
updating参数在当前请求更新时,仍使用老缓存响应。这允许在更新缓存数据期间最少的访问服务器。
为了在占用新的缓存元素时,减少访问被代理服务器的次数,可以使用proxy_cache_lock指令。

proxy_cache_valid

语法:proxy_cache_valid [code …] time
默认:—
上下文:http, server, location

为不同的响应码设置缓存时间,例如,下面的指令

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;

为200和302响应码设置10分钟的缓存,为404的响应码设置1分钟的缓存
如果只定义了缓存时间
proxy_cache_valid 5m;
只有200、301和302响应会被缓存。
any参数可以指定为任何返回缓存:

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

缓存的参数可以直接在响应头中设置。这个比用指令设置优先级更高。

  • “X-Accel-Expires”头域设置了响应的缓存时间,以秒为单位。0值禁用响应的缓存。如果值以@开头,表示从纪元(1970-01-01)开始的秒数,响应将会缓存到这个时间。
  • 如果投中不包含“X-Accel-Expires”字段,缓存参数可能存在“Expires”或“Cache-Control”中
  • 如果头部包含“Set-Cookie”字段,这个响应不会被缓存。
  • 如果头部包含带有“*”值的“Vary”字段,这个响应不会被缓存(1.7.7+)。如果头部的“Vary”值是其他的值,这个响应会考虑请求头域的相应字段进行缓存。(1.7.7+)

可以通过proxy_ignore_headers指令禁用处理一个或多个响应头域的功能。

proxy_connect_timeout

语法:proxy_connect_timeout time
默认:proxy_connect_timeout 60s
上下文:http, server, location

定义一个与被代理服务器建立连接的超时时间。这个超时时间通常不超过75秒。

proxy_cookie_domain

语法:proxy_cookie_domain off
proxy_cookie_domain domain replacement
默认:proxy_cookie_domain off
上下文:http, server, location
版本:1.1.15+

设置一个被代理服务器返回的头域“Set-Cookie”中domain属性应更改的文本。假设被代理服务器返回了“Set-Cookie”头域含有“domain=localhost”属性。指令
proxy_cookie_domain localhost example.org;
将会重写这个属性为“domain=example.org”
以点开头的domain、replacement、domain属性会被忽略。匹配是大小写不敏感的。
domain和replacement可以包含变量:
proxy_cookie_domain www.$host $host;
指令可以使用正则表达式,这种情况下,domain需要以“~”开头。正则表达式可以包含和位置捕获,replacement可以引用它们:
proxy_cookie_domain ~\.(?P[-0-9a-z]+\.[a-z]+)$ $sl_domain;
可以有多个proxy_cookie_domain指令:

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

off参数取消了所有当前级别proxy_cookie_domain指令的影响:

proxy_cookie_domain off;
proxy_cookie_domain localhost example.org;
proxy_cookie_domain www.example.org example.org;

proxy_cookie_path

语法:proxy_cookie_path off
proxy_cookie_path path replacement
默认:proxy_cookie_path off
上下文:http, server, location
版本:1.1.15+

设置一个被代理服务器返回的头域“Set-Cookie”中path属性应更改的文本。假设被代理服务器返回了“Set-Cookie”头域含有“path=/two/some/uri/”属性。指令
proxy_cookie_path /two/ /;
将这个属性重写为“path=/some/uri/”。
path和replacement可以包含变量:
proxy_cookie_path $uri /some$uri
指令可以使用正则表达式,这种情况下,path需要以“~”开头大小写敏感,或“~*”开头大小写不敏感。正则表达式可以包含和位置捕获,replacement可以引用它们:
proxy_cookie_path ~*^/user/([^/]+) /u/$1;
可以有多个proxy_cookie_path指令:

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

off参数取消了所有当前级别proxy_cookie_path指令的影响:

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