模块 ngx_http_proxy_module
该模块允许将
请求。ngx_http_proxy_module
示例配置
location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
Directives
语法: |
proxy_bind
|
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 0.8.22 中。
使与代理服务器的传出连接产生
从具有可选端口 (1.11.2) 的指定本地 IP 地址。
参数值可以包含变量 (1.3.12)。
特殊值 (1.3.12) 取消 effect
Directives
继承自之前的配置级别,这允许
系统自动分配本地 IP 地址和端口。off
proxy_bind
参数 (1.11.0) 允许
到代理服务器的传出连接源自
来自非本地 IP 地址,
例如,从客户端的真实 IP 地址:transparent
proxy_bind $remote_addr transparent;
为了使此参数起作用,
通常需要使用超级用户权限运行 nginx 工作进程。
在 Linux 上,它不是必需的 (1.13.8),就像
参数为 Worker processes
从 master 进程继承能力。
还需要配置内核路由表
拦截来自代理服务器的网络流量。transparent
CAP_NET_RAW
语法: |
proxy_buffer_size |
---|---|
默认值: |
proxy_buffer_size 4k|8k; |
上下文: |
http , ,server location |
设置用于读取第一部分的缓冲区
从代理服务器收到的响应中。
此部分通常包含一个较小的响应标头。
默认情况下,缓冲区大小等于一个内存页。
这是 4K 或 8K,具体取决于平台。
但是,它可以做得更小。size
语法: |
proxy_buffering |
---|---|
默认值: |
proxy_buffering on; |
上下文: |
http , ,server location |
启用或禁用来自代理服务器的响应缓冲。
启用缓冲后,nginx 会收到来自代理服务器的响应 尽快将其保存到 proxy_buffer_size 和 proxy_buffers Directives设置的缓冲区中。 如果整个响应无法放入内存,则可以保存其中的一部分 添加到磁盘上的临时文件。 写入临时文件由 proxy_max_temp_file_size 和 proxy_temp_file_write_size Directives控制。
禁用缓冲时,响应将同步传递给客户端。 收到后立即。 nginx 不会尝试从代理服务器读取整个响应。 nginx 可以从服务器接收的最大数据大小 由 proxy_buffer_size Directives设置。
缓冲也可以通过传递
“” 或 “” 在
“X-Accel-Buffering” 响应标头字段。
可以使用 proxy_ignore_headers Directives禁用此功能。yes
no
语法: |
proxy_buffers |
---|---|
默认值: |
proxy_buffers 8 4k|8k; |
上下文: |
http , ,server location |
设置
用于从代理服务器读取响应的缓冲区,
对于单个连接。
默认情况下,缓冲区大小等于一个内存页。
这是 4K 或 8K,具体取决于平台。number
size
语法: |
proxy_busy_buffers_size |
---|---|
默认值: |
proxy_busy_buffers_size 8k|16k; |
上下文: |
http , ,server location |
当缓冲来自代理的
server 启用时,限制
可以忙于向客户端发送响应,而响应不是
但已充分阅读。
同时,其余的缓冲区可用于读取响应
如果需要,缓冲对临时文件的响应的一部分。
默认情况下,受 proxy_buffer_size 和 proxy_buffers Directives设置的两个缓冲区的大小限制。size
size
语法: |
proxy_cache |
---|---|
默认值: |
proxy_cache off; |
上下文: |
http , ,server location |
定义用于缓存的共享内存区域。
同一区域可以在多个地方使用。
参数值可以包含变量 (1.7.9)。
该参数禁用继承的缓存
从上一个配置级别开始。off
语法: |
proxy_cache_background_update |
---|---|
默认值: |
proxy_cache_background_update off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.11.10 中。
允许启动后台子请求 要更新过期的缓存项, 而过时的缓存响应将返回给客户端。 请注意,在更新时,必须允许使用过时的缓存响应。
语法: |
proxy_cache_bypass |
---|---|
默认值: | — |
上下文: |
http , ,server location |
定义不从缓存中获取响应的条件。 如果字符串参数的至少一个值不为空且不为空 等于 “0”,则不会从缓存中获取响应:
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment; proxy_cache_bypass $http_pragma $http_authorization;
可以与 proxy_no_cache Directives一起使用。
语法: |
proxy_cache_convert_head |
---|---|
默认值: |
proxy_cache_convert_head on; |
上下文: |
http , ,server location |
该Directives出现在版本 1.9.7 中。
启用或禁用 “” 方法的转换
设置为 “” 进行缓存。
禁用转换时,应配置缓存键
以包括 .HEAD
GET
$request_method
语法: |
proxy_cache_key |
---|---|
默认值: |
proxy_cache_key $scheme$proxy_host$request_uri; |
上下文: |
http , ,server location |
定义用于缓存的键,例如
proxy_cache_key "$host$request_uri $cookie_user";
默认情况下,Directives的值接近字符串
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
语法: |
proxy_cache_lock |
---|---|
默认值: |
proxy_cache_lock off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.1.12 中。
启用后,一次只允许填充一个请求 根据 proxy_cache_key Directives通过将请求传递给代理服务器来标识的新 cache 元素。 同一 cache 元素的其他请求将等待 以将响应显示在缓存中,或者 此元素,直到 proxy_cache_lock_timeout Directives设置的时间。
语法: |
proxy_cache_lock_age |
---|---|
默认值: |
proxy_cache_lock_age 5s; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.8 中。
如果最后一个请求传递给代理服务器
用于填充新的 cache 元素
未完成指定的 ,
可以向代理服务器传递另一个请求。time
语法: |
proxy_cache_lock_timeout |
---|---|
默认值: |
proxy_cache_lock_timeout 5s; |
上下文: |
http , ,server location |
该Directives出现在版本 1.1.12 中。
设置 proxy_cache_lock 的超时。
当 过期时,
请求将被传递给代理服务器,
但是,不会缓存响应。time
在 1.7.8 之前,可以缓存响应。
语法: |
proxy_cache_max_range_offset |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.11.6 中。
设置字节范围请求的偏移量(以字节为单位)。 如果范围超出偏移量,则 Range 请求将被传递给代理服务器 并且不会缓存响应。
语法: |
proxy_cache_methods
|
---|---|
默认值: |
proxy_cache_methods GET HEAD; |
上下文: |
http , ,server location |
该Directives出现在 0.7.59 版中。
如果此Directives中列出了 client 请求方法,则
响应将被缓存。
“” 和 “” 方法始终为
添加到列表中,但建议明确指定它们。
另请参见 proxy_no_cache Directives。GET
HEAD
语法: |
proxy_cache_min_uses |
---|---|
默认值: |
proxy_cache_min_uses 1; |
上下文: |
http , ,server location |
设置响应之后的请求数
将被缓存。number
语法: |
proxy_cache_path
|
---|---|
默认值: | — |
上下文: |
http |
设置缓存的路径和其他参数。
缓存数据存储在文件中。
缓存中的文件名是
将 MD5 函数应用于缓存键。
该参数定义缓存的层次结构级别:
从 1 到 3,每个级别接受值 1 或 2。
例如,在以下配置levels
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
缓存中的文件名将如下所示:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
缓存的响应首先写入临时文件
,然后重命名文件。
从 0.8.9 版本开始,可以放置临时文件和缓存
不同的文件系统。
但是,请注意,在这种情况下,文件会被复制
跨两个文件系统,而不是廉价的重命名作。
因此,建议对于任何给定位置,缓存和目录
保存临时文件
放在同一个文件系统上。
临时文件的目录是根据
参数 (1.7.10)。
如果省略此参数或将其设置为值 ,
proxy_temp_path Directives设置的目录
。
如果该值设置为 ,
临时文件将直接放在 cache 目录中。use_temp_path
on
off
此外,所有活动密钥和有关数据的信息都会被存储
在共享内存区域中,其 和 由参数配置。
1 MB 区域可以存储大约 8000 个密钥。name
size
keys_zone
作为商业订阅的一部分, 共享内存区域还存储扩展的 缓存信息, 因此,需要为相同数量的键指定更大的区域大小。 例如 1 MB 区域可以存储大约 4000 个密钥。
在参数指定的时间内未访问的缓存数据将从缓存中删除
不管它们的新鲜度如何。
默认情况下,设置为 10 分钟。inactive
inactive
特殊的 “cache manager” 进程监控设置的最大缓存大小
通过参数,
和设置的最小可用空间量
通过 (1.19.1) 参数
在具有缓存的文件系统上。
当超出大小或没有足够的可用空间时,
它会删除最近最少使用的数据。
数据将在 、 和 参数 (1.11.5) 配置的迭代中删除。
在一次迭代期间,不超过 items
将被删除(默认情况下为 100)。
一次迭代的持续时间受参数限制(默认情况下为 200 毫秒)。
在迭代之间,将进行参数配置的暂停(默认为 50 毫秒)。max_size
min_free
manager_files
manager_threshold
manager_sleep
manager_files
manager_threshold
manager_sleep
启动一分钟后,特殊的 “cache loader” 进程被激活。
它加载有关以前缓存在文件系统上的数据的信息
到缓存区中。
加载也是在迭代中完成的。
在一次迭代期间,不超过 items
被加载(默认情况下为 100)。
此外,一次迭代的持续时间受参数限制(默认情况下为 200 毫秒)。
在迭代之间,将进行参数配置的暂停(默认为 50 毫秒)。loader_files
loader_threshold
loader_sleep
此外 以下参数作为我们商业订阅的一部分提供:
-
purger
=on
|off
- 指示高速缓存清除程序 (1.7.12) 是否将从磁盘中删除与通配符键匹配的高速缓存条目。
将参数设置为 (default is )
将激活 “Cache purger” 进程,该进程
永久迭代所有缓存条目
并删除与通配符键匹配的条目。
on
off
-
purger_files
=number
- 设置在一次迭代 (1.7.12) 期间将扫描的项目数。
默认情况下,设置为 10。
purger_files
-
purger_threshold
=number
- 设置一次迭代的持续时间 (1.7.12)。
默认情况下,设置为 50 毫秒。
purger_threshold
-
purger_sleep
=number
- 设置迭代之间的暂停 (1.7.12)。
默认情况下,设置为 50 毫秒。
purger_sleep
在版本 1.7.3、1.7.7 和 1.11.10 中,缓存标头格式已更改。 以前缓存的响应将被视为无效 升级到较新的 nginx 版本后。
语法: |
proxy_cache_purge string ...; |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.5.7 中。
定义将请求视为缓存的条件 purge 请求。 如果字符串参数的至少一个值不为空且不相等 设置为 “0”,则删除具有相应缓存键的缓存条目。 作成功的结果通过返回 204 (No Content) 响应。
如果清除请求的缓存键结束
替换为星号 (“”) 时,所有与
通配符键将从缓存中删除。
但是,这些条目将保留在磁盘上,直到它们被删除
对于不活动,
或由缓存清除程序 (1.7.12) 处理,
或客户端尝试访问它们。*
配置示例:
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 off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.5.7 中。
使用条件请求启用过期缓存项目的重新验证 “If-Modified-Since”和“If-None-Match” header 字段。
语法: |
proxy_cache_use_stale
|
---|---|
默认值: |
proxy_cache_use_stale off; |
上下文: |
http , ,server location |
确定在哪些情况下可以使用过时的缓存响应 在与代理服务器通信期间。 该Directives的参数与 proxy_next_upstream Directives的参数匹配。
该参数还允许
如果代理服务器处理请求,则使用过时的缓存响应
无法选择。error
此外,该参数允许
使用过时的缓存响应(如果当前正在更新)。
这允许最大限度地减少对代理服务器的访问次数
更新缓存数据时。updating
使用过时的缓存响应 也可以直接在响应标头中启用 在响应变得过时 (1.11.10) 后的指定秒数内。 这比使用 directive 参数的优先级低。
- 这 “stale-while-revalidate” “Cache-Control” 标头字段的扩展允许 使用过时的缓存响应(如果当前正在更新)。
- 这 “stale-if-error” “Cache-Control” 标头字段的扩展允许 在出现错误时使用过时的缓存响应。
为了最大限度地减少对代理服务器的访问次数,当 填充新的 cache 元素时,可以使用 proxy_cache_lock Directives。
语法: |
proxy_cache_valid [ |
---|---|
默认值: | — |
上下文: |
http , ,server location |
为不同的响应代码设置缓存时间。 例如,以下Directives
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
为代码为 200 和 302 的响应设置 10 分钟的缓存 对于代码为 404 的响应,则为 1 分钟。
如果仅指定了缓存time
proxy_cache_valid 5m;
然后,仅缓存 200、301 和 302 个响应。
此外,还可以指定
要缓存任何响应:any
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m;
缓存参数也可以直接设置 在响应标头中。 这比使用Directives设置缓存时间具有更高的优先级。
- “X-Accel-Expires” 标头字段设置
响应。
零值禁用响应的缓存。
如果该值以 prefix 开头,则设置绝对值
time (以秒为单位) since Epoch,响应可以缓存到该时间。
@
- 如果标头不包含 “X-Accel-Expires” 字段, 缓存的参数可以在 Header 字段中设置 “过期”或“缓存控制”。
- 如果标头包含 “Set-Cookie” 字段,则此类 响应不会被缓存。
- 如果标题包含 “Vary” 字段
替换为特殊值 “”,则此类
响应不会被缓存 (1.7.7)。
如果标题包含 “Vary” 字段
替换为另一个值,则将缓存此类响应
考虑相应的请求标头字段 (1.7.7)。
*
可以禁用对这些响应标头字段中的一个或多个的处理 使用 proxy_ignore_headers Directives。
语法: |
proxy_connect_timeout |
---|---|
默认值: |
proxy_connect_timeout 60s; |
上下文: |
http , ,server location |
定义与代理服务器建立连接的超时。 应该注意,此超时通常不能超过 75 秒。
语法: |
proxy_cookie_domain proxy_cookie_domain |
---|---|
默认值: |
proxy_cookie_domain off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.1.15 中。
设置应在
代理服务器响应。
假设代理服务器返回了 “Set-Cookie”
header 字段,其属性为
“”.
Directivesdomain
domain=localhost
proxy_cookie_domain localhost example.org;
会将此属性重写为
“”.domain=example.org
和 字符串和属性开头的点将被忽略。
匹配不区分大小写。domain
replacement
domain
的 and 字符串
可以包含变量:domain
replacement
proxy_cookie_domain www.$host $host;
也可以使用正则表达式指定该Directives。
在这种情况下,应该从
“” 符号。
正则表达式可以包含命名捕获和位置捕获。
并且可以引用它们:domain
~
replacement
proxy_cookie_domain ~\.(?P<sl_domain>[-0-9a-z]+\.[a-z]+)$ $sl_domain;
多个Directives
可以在同一级别上指定:proxy_cookie_domain
proxy_cookie_domain localhost example.org; proxy_cookie_domain ~\.([a-z]+\.[a-z]+)$ $1;
如果多个Directives可以应用于 Cookie, 将选择第一个 Matching Directives。
该参数取消效果
Directives
继承自之前的配置级别。off
proxy_cookie_domain
语法: |
proxy_cookie_flags
|
---|---|
默认值: |
proxy_cookie_flags off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.19.3 中。
设置 Cookie 的一个或多个标志。
可以包含文本、变量及其组合。
可以包含文本、变量及其组合 (1.19.8)。
、 参数添加相应的标志。
, , 参数删除相应的标志。cookie
flag
secure
httponly
samesite=strict
samesite=lax
samesite=none
nosecure
nohttponly
nosamesite
还可以使用正则表达式指定 Cookie。
在这种情况下,应该从
“” 符号。cookie
~
多个Directives
可以在同一配置级别上指定:proxy_cookie_flags
proxy_cookie_flags one httponly; proxy_cookie_flags ~ nosecure samesite=strict;
如果多个Directives可以应用于 Cookie,
将选择第一个 Matching Directives。
在示例中,标志
已添加到 Cookie 中,则
对于所有其他 Cookie
该标志被添加,并且
该标志将被删除。httponly
one
samesite=strict
secure
该参数取消效果
Directives
继承自之前的配置级别。off
proxy_cookie_flags
语法: |
proxy_cookie_path proxy_cookie_path |
---|---|
默认值: |
proxy_cookie_path off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.1.15 中。
设置应在
代理服务器响应。
假设代理服务器返回了 “Set-Cookie”
header 字段,其属性为
“”.
Directivespath
path=/two/some/uri/
proxy_cookie_path /two/ /;
会将此属性重写为
“”.path=/some/uri/
的 and 字符串
可以包含变量:path
replacement
proxy_cookie_path $uri /some$uri;
也可以使用正则表达式指定该Directives。
在这种情况下,应从
区分大小写的匹配的 “” 符号,
或从不区分大小写的 “” 符号
匹配。
正则表达式可以包含命名捕获和位置捕获。
并且可以引用它们:path
~
~*
replacement
proxy_cookie_path ~*^/user/([^/]+) /u/$1;
多个Directives
可以在同一级别上指定:proxy_cookie_path
proxy_cookie_path /one/ /; proxy_cookie_path / /two/;
如果多个Directives可以应用于 Cookie, 将选择第一个 Matching Directives。
该参数取消效果
Directives
继承自之前的配置级别。off
proxy_cookie_path
语法: |
proxy_force_ranges |
---|---|
默认值: |
proxy_force_ranges off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.7 中。
启用字节范围支持 对于来自代理服务器的缓存和未缓存响应 无论这些响应中的“Accept-Ranges”字段如何。
语法: |
proxy_headers_hash_bucket_size |
---|---|
默认值: |
proxy_headers_hash_bucket_size 64; |
上下文: |
http , ,server location |
设置哈希表的存储桶
由 proxy_hide_header 和 proxy_set_header Directives使用。
设置哈希表的详细信息在单独的文档中提供。size
语法: |
proxy_headers_hash_max_size |
---|---|
默认值: |
proxy_headers_hash_max_size 512; |
上下文: |
http , ,server location |
设置哈希表的最大值
由 proxy_hide_header 和 proxy_set_header Directives使用。
设置哈希表的详细信息在单独的文档中提供。size
语法: |
proxy_hide_header |
---|---|
默认值: | — |
上下文: |
http , ,server location |
默认情况下,
nginx 不传递标头字段 “Date”,
“server”、“X-Pad”和
“X-Accel-...”来自代理的响应
server 设置为客户端。
该Directives设置其他字段
这不会被通过。
相反,如果需要允许传递字段,
可以使用 proxy_pass_header Directives。proxy_hide_header
语法: |
proxy_http_version |
---|---|
默认值: |
proxy_http_version 1.0; |
上下文: |
http , ,server location |
该Directives出现在版本 1.1.4 中。
设置代理的 HTTP 协议版本。 默认情况下,使用版本 1.0。 建议将版本 1.1 与 keepalive 连接和 NTLM 身份验证一起使用。
语法: |
proxy_ignore_client_abort |
---|---|
默认值: |
proxy_ignore_client_abort off; |
上下文: |
http , ,server location |
确定与代理服务器的连接是否应为 closed 当客户端关闭连接而不等待 以获取响应。
语法: |
proxy_ignore_headers |
---|---|
默认值: | — |
上下文: |
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)、“过期”、 “cache-control”, “set-cookie” (0.8.44), 和“变化”(1.7.7)。
如果未禁用,则这些标头字段的处理将如下所示 影响:
- “X-Accel-Expires”、“Expires”、 “缓存控制”、“设置cookie”、 和“Vary” 设置响应缓存的参数;
- “X-Accel-Redirect” 执行internal 重定向到指定的 URI;
- “X-Accel-Limit-Rate” 设置速率 限制向客户传输响应;
- “X-Accel-Buffering” 启用或禁用响应的缓冲;
- “X-Accel-Charset” 设置响应的所需字符集。
语法: |
proxy_intercept_errors |
---|---|
默认值: |
proxy_intercept_errors off; |
上下文: |
http , ,server location |
确定代码是否大于或等于的代理响应 到 300 应传递给客户端 或者被拦截并重定向到 nginx 进行处理 替换为 error_page Directives。
语法: |
proxy_limit_rate |
---|---|
默认值: |
proxy_limit_rate 0; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.7 中。
限制从代理服务器读取响应的速度。
以每秒字节数为单位指定。
零值将禁用速率限制。
限制是按请求设置的,因此如果 nginx 同时打开
与代理服务器的两个连接,
总速率将是指定限制的两倍。
该限制仅在缓冲来自代理的响应时有效
服务器已启用。
参数值可以包含变量 (1.27.0)。rate
语法: |
proxy_max_temp_file_size |
---|---|
默认值: |
proxy_max_temp_file_size 1024m; |
上下文: |
http , ,server location |
当缓冲来自代理的
server 已启用,并且整个响应不适合缓冲区
由 proxy_buffer_size 和 proxy_buffers Directives设置,响应的一部分可以保存到临时文件中。
该Directives设置临时文件的最大值。
设置一次写入临时文件的数据大小
通过 proxy_temp_file_write_size Directives。size
零值禁用对临时文件的响应缓冲。
此限制不适用于响应 将被缓存或存储在磁盘上。
语法: |
proxy_method |
---|---|
默认值: | — |
上下文: |
http , ,server location |
指定要在转发的请求中使用的 HTTP
发送到代理服务器,而不是 client 请求中的 method。
参数值可以包含变量 (1.11.6)。method
语法: |
proxy_next_upstream
|
---|---|
默认值: |
proxy_next_upstream error timeout; |
上下文: |
http , ,server location |
指定在哪些情况下应将请求传递到下一个服务器:
error
- 与 server、向其传递请求或读取响应标头;
timeout
- 与 server、向其传递请求或读取响应标头;
invalid_header
- 服务器返回空响应或无效响应;
http_500
- 服务器返回代码为 500 的响应;
http_502
- 服务器返回代码为 502 的响应;
http_503
- 服务器返回代码为 503 的响应;
http_504
- 服务器返回代码为 504 的响应;
http_403
- 服务器返回代码为 403 的响应;
http_404
- 服务器返回代码为 404 的响应;
http_429
- 服务器返回代码为 429 (1.11.13) 的响应;
non_idempotent
- 通常,使用非幂等方法的请求
(, , )
不会传递到下一个服务器
如果请求已发送到上游服务器 (1.9.13);
启用此选项明确允许重试此类请求;
POST
LOCK
PATCH
off
- 禁止将请求传递到下一个服务器。
应该记住,将请求传递给下一个服务器是 仅当尚未向客户端发送任何内容时才有可能。 也就是说,如果在 传输响应,则无法修复此问题。
该Directives还定义了什么被视为不成功
尝试与服务器通信。
的情况 , 和 始终被视为不成功的尝试,
即使它们未在Directives中指定。
、 、
并且是
仅当在Directives中指定了尝试时,才被视为不成功的尝试。
和 的情况从不被视为不成功的尝试。error
timeout
invalid_header
http_500
http_502
http_503
http_504
http_429
http_403
http_404
语法: |
proxy_next_upstream_timeout |
---|---|
默认值: |
proxy_next_upstream_timeout 0; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.5 中。
限制可以将请求传递到下一个服务器的时间。
该值会关闭此限制。0
语法: |
proxy_next_upstream_tries |
---|---|
默认值: |
proxy_next_upstream_tries 0; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.5 中。
限制将请求传递到下一个服务器的可能尝试次数。
该值会关闭此限制。0
语法: |
proxy_no_cache |
---|---|
默认值: | — |
上下文: |
http , ,server location |
定义不将响应保存到缓存的条件。 如果字符串参数的至少一个值不为空且不为空 等于 “0”,则不会保存响应:
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment; proxy_no_cache $http_pragma $http_authorization;
可以与 proxy_cache_bypass Directives一起使用。
语法: |
proxy_pass |
---|---|
默认值: | — |
上下文: |
location , ,if in location limit_except |
设置代理服务器的协议和地址以及可选的 URI
应将位置映射到该位置。
作为协议,“” 或 “”
可以指定。
地址可以指定为域名或 IP 地址,
和一个可选端口:http
https
proxy_pass http://localhost:8000/uri/;
或作为在单词
“” 并括在冒号中:unix
proxy_pass http://unix:/tmp/backend.socket:/uri/;
如果一个域名解析为多个地址,则所有地址都将是 以循环方式使用。 此外,还可以将地址指定为服务器组。
Parameter value 可以包含变量。 在这种情况下,如果将地址指定为域名, 在描述的服务器组中搜索名称, 如果未找到,则使用解析程序确定。
请求 URI 将按如下方式传递给服务器:
- 如果Directives是使用 URI 指定的,则
然后,当请求传递到服务器时,与位置匹配的规范化请求 URI 部分将替换为 URI
在Directives中指定:
proxy_pass
location /name/ { proxy_pass http://127.0.0.1/remote/; }
- 如果指定时没有 URI,则
请求 URI 以相同的形式传递给服务器
在处理原始请求时由客户端发送,
或传递完整的规范化请求 URI
处理更改的 URI 时:
proxy_pass
location /some/path/ { proxy_pass http://127.0.0.1; }
在 1.1.12 版本之前, 如果指定时没有指定 URI,则 可能会传递原始请求 URI 而不是更改的 URI。
proxy_pass
在某些情况下,无法确定请求 URI 中要替换的部分:
- 使用正则表达式指定 location 时,
以及命名位置内。
在这些情况下,应指定不带 URI 的 ID。
proxy_pass
- 当使用 rewrite Directives在代理位置内更改 URI 时,
并且此相同的配置将用于处理请求
():
break
location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; }
在这种情况下,Directives中指定的 URI 将被忽略,并且 完整的更改请求 URI 将传递给服务器。
- 当变量用于 时:
proxy_pass
在这种情况下,如果在Directives中指定了 URI,则 它按原样传递给服务器, 替换原始请求 URI。location /name/ { proxy_pass http://127.0.0.1$request_uri; }
WebSocket 代理需要特殊的 配置,并且从版本 1.3.13 开始受支持。
语法: |
proxy_pass_header |
---|---|
默认值: | — |
上下文: |
http , ,server location |
允许传递否则禁用的标头 字段。
语法: |
proxy_pass_request_body |
---|---|
默认值: |
proxy_pass_request_body on; |
上下文: |
http , ,server location |
指示是否传递原始请求正文 到代理服务器。
location /x-accel-redirect-here/ { proxy_method GET; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_pass ... }
另请参见 proxy_set_header 和 proxy_pass_request_headers Directives。
语法: |
proxy_pass_request_headers |
---|---|
默认值: |
proxy_pass_request_headers on; |
上下文: |
http , ,server location |
指示是否传递原始请求的标头字段 到代理服务器。
location /x-accel-redirect-here/ { proxy_method GET; proxy_pass_request_headers off; proxy_pass_request_body off; proxy_pass ... }
另请参见 proxy_set_header 和 proxy_pass_request_body Directives。
语法: |
proxy_pass_trailers |
---|---|
默认值: |
proxy_pass_trailers off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.27.2 中。
允许将 trailer 字段从代理服务器传递到 client。
HTTP/1.1 中的 trailer 部分是显式的 已启用。
location / { proxy_http_version 1.1; proxy_set_header Connection "te"; proxy_set_header TE "trailers"; proxy_pass_trailers on; proxy_pass ... }
语法: |
proxy_read_timeout |
---|---|
默认值: |
proxy_read_timeout 60s; |
上下文: |
http , ,server location |
定义从代理服务器读取响应的超时。 超时仅在两个连续的读取作 ( 而不是为了传输整个响应。 如果代理服务器在此时间内没有传输任何内容, 连接已关闭。
语法: |
proxy_redirect proxy_redirect proxy_redirect |
---|---|
默认值: |
proxy_redirect default; |
上下文: |
http , ,server location |
设置应在 “Location” 中更改的文本
和代理服务器响应的 “Refresh” 标头字段。
假设代理服务器返回了 Headers 字段
“”.
DirectivesLocation: http://localhost:8000/two/some/uri/
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
会将此字符串重写为
“”.Location: http://frontend/one/some/uri/
字符串中可以省略服务器名称:replacement
proxy_redirect http://localhost:8000/two/ /;
然后是主服务器的名称和端口(如果与 80 不同), 将入。
参数
使用 location 和 proxy_pass Directives的参数。
因此,以下两种配置是等效的:default
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/;
如果使用变量指定proxy_pass则不允许使用该参数。default
字符串可以包含变量:replacement
proxy_redirect http://localhost:8000/ http://$host:$server_port/;
A 还可以包含 (1.1.11) 变量:redirect
proxy_redirect http://$proxy_host:8000/ /;
可以使用正则表达式指定该Directives (1.1.11)。
在这种情况下,应以
区分大小写的匹配的 “” 符号,
或使用 “” 符号表示不区分大小写
匹配。
正则表达式可以包含命名捕获和位置捕获。
并且可以引用它们:redirect
~
~*
replacement
proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2; proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;
多个Directives
可以在同一级别上指定:proxy_redirect
proxy_redirect default; proxy_redirect http://localhost:8000/ /; proxy_redirect http://www.example.com/ /;
如果多个Directives可以应用于 代理服务器响应的标头字段, 将选择第一个 Matching Directives。
该参数取消效果
Directives
继承自之前的配置级别。off
proxy_redirect
使用此Directives,还可以将主机名添加到 relative 由代理服务器发出的重定向:
proxy_redirect / /;
语法: |
proxy_request_buffering |
---|---|
默认值: |
proxy_request_buffering on; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.11 中。
启用或禁用客户端请求正文的缓冲。
启用缓冲后,在将请求发送到代理服务器之前,将从 Client 端读取整个请求正文。
禁用缓冲后,请求正文将发送到代理服务器 收到后立即。 在这种情况下,如果 nginx 已经开始发送请求正文,则无法将请求传递到下一个服务器。
使用 HTTP/1.1 分块传输编码时 要发送原始请求正文, 无论Directives值如何,请求正文都将被缓冲,除非 HTTP/1.1 已启用代理。
语法: |
proxy_send_lowat |
---|---|
默认值: |
proxy_send_lowat 0; |
上下文: |
http , ,server location |
如果Directives设置为非零值,nginx 将尝试
最小化数量
of 使用 kqueue 方法的任一标志对到代理服务器的传出连接执行 OF 发送作,
或 socket 选项
替换为指定的 .NOTE_LOWAT
SO_SNDLOWAT
size
在 Linux、Solaris 和 Windows 上忽略此Directives。
语法: |
proxy_send_timeout |
---|---|
默认值: |
proxy_send_timeout 60s; |
上下文: |
http , ,server location |
设置将请求传输到代理服务器的超时。 超时仅在两个连续的写入作 ( 而不是为了传输整个请求。 如果代理服务器在此时间内没有收到任何内容, 连接已关闭。
语法: |
proxy_set_body |
---|---|
默认值: | — |
上下文: |
http , ,server location |
允许重新定义传递给代理服务器的请求正文。
可以包含文本、变量及其组合。value
语法: |
proxy_set_header |
---|---|
默认值: |
proxy_set_header Host $proxy_host; proxy_set_header Connection close; |
上下文: |
http , ,server location |
允许重新定义字段或将字段附加到传递给代理服务器的请求标头。
可以包含文本、变量及其组合。
这些Directives继承自之前的配置级别
当且仅当没有Directives时
在当前级别上定义。
默认情况下,仅重新定义两个字段:value
proxy_set_header
proxy_set_header Host $proxy_host; proxy_set_header Connection close;
如果启用了缓存,则标头字段 “如果修改自”, “if-unmodified-since”、 “如果-无-匹配”, “如果匹配”, “范围”, 和 “If-Range” 不会传递到代理服务器。
可以按如下方式传递未更改的 “Host” 请求标头字段:
proxy_set_header Host $http_host;
但是,如果客户端请求标头中不存在此字段,则
不会通过任何内容。
在这种情况下,最好使用变量 - 它的
值等于 “Host” 请求标头中的服务器名称
字段或主服务器名称(如果此字段不存在):$host
proxy_set_header Host $host;
此外,服务器名称可以与 代理服务器:
proxy_set_header Host $host:$proxy_port;
如果 header 字段的值为空字符串,则此 字段不会传递给代理服务器:
proxy_set_header Accept-Encoding "";
语法: |
proxy_socket_keepalive |
---|---|
默认值: |
proxy_socket_keepalive off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.15.6 中。
配置 “TCP keepalive” 行为
用于到代理服务器的传出连接。
默认情况下,作系统的设置对套接字有效。
如果Directives设置为值 “”,则为套接字打开套接字选项。on
SO_KEEPALIVE
语法: |
proxy_ssl_certificate |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.8 中。
指定 a 和 PEM 格式的证书
用于对代理 HTTPS 服务器的身份验证。file
从 1.21.0 版本开始,可以在名称中使用变量。file
语法: |
proxy_ssl_certificate_key |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.8 中。
使用 PEM 格式的密钥指定 a
用于对代理 HTTPS 服务器的身份验证。file
可以指定值 :: 而不是 (1.7.9),
它加载具有从 OpenSSL 引擎指定的密钥。engine
name
id
file
id
name
从 1.21.0 版本开始,可以在名称中使用变量。file
语法: |
proxy_ssl_ciphers |
---|---|
默认值: |
proxy_ssl_ciphers DEFAULT; |
上下文: |
http , ,server location |
该Directives出现在版本 1.5.6 中。
指定对代理 HTTPS 服务器的请求启用的密码。 密码以 OpenSSL 库理解的格式指定。
完整列表可使用
“” 命令。openssl ciphers
语法: |
proxy_ssl_conf_command |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.19.4 中。
在与代理的 HTTPS 服务器建立连接时设置任意 OpenSSL 配置命令。
使用 OpenSSL 1.0.2 或更高版本时,支持该Directives。
多个Directives
可以在同一级别上指定。
这些Directives继承自之前的配置级别
当且仅当存在
无Directives
在当前级别上定义。proxy_ssl_conf_command
proxy_ssl_conf_command
请注意,直接配置 OpenSSL 可能会导致意外行为。
语法: |
proxy_ssl_crl |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.0 中。
指定具有已吊销证书 (CRL) 的
以 PEM 格式用于验证代理 HTTPS 服务器的证书。file
语法: |
proxy_ssl_key_log path; |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.27.2 中。
启用代理 HTTPS 服务器连接 SSL 密钥的日志记录 并指定密钥日志文件的路径。 密钥以与 Wireshark 兼容的 SSLKEYLOGFILE 格式记录。
该Directives作为我们商业订阅的一部分提供。
语法: |
proxy_ssl_name |
---|---|
默认值: |
proxy_ssl_name $proxy_host; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.0 中。
允许覆盖用于验证代理 HTTPS 服务器证书的服务器名称,并在与代理 HTTPS 服务器建立连接时通过 SNI 传递。
默认情况下,使用 proxy_pass URL 的 host 部分。
语法: |
proxy_ssl_password_file |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.8 中。
指定 a with passphrases for secret keys,其中每个密码都在单独的行上指定。
加载密钥时依次尝试密码。file
语法: |
proxy_ssl_protocols
[ |
---|---|
默认值: |
proxy_ssl_protocols TLSv1.2 TLSv1.3; |
上下文: |
http , ,server location |
该Directives出现在版本 1.5.6 中。
为对代理 HTTPS 服务器的请求启用指定的协议。
默认情况下使用该参数
从 1.23.4 开始。TLSv1.3
语法: |
proxy_ssl_server_name |
---|---|
默认值: |
proxy_ssl_server_name off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.0 中。
启用或禁用通过 TLS 传递服务器名称 服务器名称指示扩展 (SNI、RFC 6066) 当与代理的 HTTPS 服务器建立连接时。
语法: |
proxy_ssl_session_reuse |
---|---|
默认值: |
proxy_ssl_session_reuse on; |
上下文: |
http , ,server location |
确定在使用
代理服务器。
如果错误
“”
,请尝试禁用会话重用。SSL3_GET_FINISHED:digest check failed
语法: |
proxy_ssl_trusted_certificate |
---|---|
默认值: | — |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.0 中。
指定具有 PEM 格式的受信任 CA 证书
用于验证代理 HTTPS 服务器的证书。file
语法: |
proxy_ssl_verify |
---|---|
默认值: |
proxy_ssl_verify off; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.0 中。
启用或禁用代理 HTTPS 服务器证书的验证。
语法: |
proxy_ssl_verify_depth |
---|---|
默认值: |
proxy_ssl_verify_depth 1; |
上下文: |
http , ,server location |
该Directives出现在版本 1.7.0 中。
设置代理 HTTPS 服务器证书链中的验证深度。
语法: |
proxy_store
|
---|---|
默认值: |
proxy_store off; |
上下文: |
http , ,server location |
允许将文件保存到磁盘。
该参数使用路径保存文件
对应于Directives alias 或 root。
该参数禁用文件保存。
此外,可以使用 with 变量显式设置文件名:on
off
string
proxy_store /data/www$original_uri;
根据收到的 “Last-Modified” 响应标头字段。 响应首先被写入临时文件 ,然后重命名文件。 从版本 0.8.9 开始,临时文件和持久化存储 可以放在不同的文件系统上。 但是,请注意,在这种情况下,文件会被复制 跨两个文件系统,而不是廉价的重命名作。 因此,建议对于任何给定位置,保存的文件和 目录保存临时文件(由 proxy_temp_path Directives设置)放在同一个文件系统上。
此Directives可用于创建 static unchangeable 的本地副本 文件,例如:
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/; }
或如下所示:
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; }
语法: |
proxy_store_access |
---|---|
默认值: |
proxy_store_access user:rw; |
上下文: |
http , ,server location |
为新创建的文件和目录设置访问权限,例如:
proxy_store_access user:rw group:rw all:r;
如果有 或 访问权限
,则权限可以省略:group
all
user
proxy_store_access group:rw all:r;
语法: |
proxy_temp_file_write_size |
---|---|
默认值: |
proxy_temp_file_write_size 8k|16k; |
上下文: |
http , ,server location |
限制写入临时文件的数据
在缓冲来自代理服务器的响应时
到临时文件。
默认情况下,受 proxy_buffer_size 和 proxy_buffers Directives设置的两个缓冲区的限制。
临时文件的最大大小由 proxy_max_temp_file_size Directives设置。size
size
语法: |
proxy_temp_path
|
---|---|
默认值: |
proxy_temp_path proxy_temp; |
上下文: |
http , ,server location |
定义用于存储临时文件的目录 以及从代理服务器接收的数据。 在指定的 目录。 例如,在以下配置
proxy_temp_path /spool/nginx/proxy_temp 1 2;
临时文件可能如下所示:
/spool/nginx/proxy_temp/7/45/00000123457
另请参见 proxy_cache_path Directives的 parameter。use_temp_path
嵌入变量
该模块支持嵌入式变量
可用于使用 proxy_set_header Directives编写 headers:ngx_http_proxy_module
$proxy_host
- proxy_pass Directives中指定的代理服务器的名称和端口;
$proxy_port
- proxy_pass Directives中指定的代理服务器的端口,或协议的默认端口;
-
$proxy_add_x_forwarded_for
- “X-Forwarded-For” 客户端请求标头字段
并附加了变量,用逗号分隔。
如果客户端中不存在 “X-Forwarded-For” 字段
request 标头,则变量等于
添加到变量中。
$remote_addr
$proxy_add_x_forwarded_for
$remote_addr