模块 ngx_http_proxy_module


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_bind Directives
示例


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_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

嵌入变量

该模块允许将 请求。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 address [transparent] | off;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 0.8.22 中。

使与代理服务器的传出连接产生 从具有可选端口 (1.11.2) 的指定本地 IP 地址。 参数值可以包含变量 (1.3.12)。 特殊值 (1.3.12) 取消 effect Directives 继承自之前的配置级别,这允许 系统自动分配本地 IP 地址和端口。offproxy_bind

参数 (1.11.0) 允许 到代理服务器的传出连接源自 来自非本地 IP 地址, 例如,从客户端的真实 IP 地址:transparent

proxy_bind $remote_addr transparent;

为了使此参数起作用, 通常需要使用超级用户权限运行 nginx 工作进程。 在 Linux 上,它不是必需的 (1.13.8),就像 参数为 Worker processes 从 master 进程继承能力。 还需要配置内核路由表 拦截来自代理服务器的网络流量。transparentCAP_NET_RAW

语法: proxy_buffer_size size;
默认值:
proxy_buffer_size 4k|8k;
上下文: http, ,serverlocation

设置用于读取第一部分的缓冲区 从代理服务器收到的响应中。 此部分通常包含一个较小的响应标头。 默认情况下,缓冲区大小等于一个内存页。 这是 4K 或 8K,具体取决于平台。 但是,它可以做得更小。size

语法: proxy_buffering on | off;
默认值:
proxy_buffering on;
上下文: http, ,serverlocation

启用或禁用来自代理服务器的响应缓冲。

启用缓冲后,nginx 会收到来自代理服务器的响应 尽快将其保存到 proxy_buffer_sizeproxy_buffers Directives设置的缓冲区中。 如果整个响应无法放入内存,则可以保存其中的一部分 添加到磁盘上的临时文件。 写入临时文件由 proxy_max_temp_file_sizeproxy_temp_file_write_size Directives控制。

禁用缓冲时,响应将同步传递给客户端。 收到后立即。 nginx 不会尝试从代理服务器读取整个响应。 nginx 可以从服务器接收的最大数据大小 由 proxy_buffer_size Directives设置。

缓冲也可以通过传递 “” 或 “” 在 “X-Accel-Buffering” 响应标头字段。 可以使用 proxy_ignore_headers Directives禁用此功能。yesno

语法: proxy_buffers number size;
默认值:
proxy_buffers 8 4k|8k;
上下文: http, ,serverlocation

设置 用于从代理服务器读取响应的缓冲区, 对于单个连接。 默认情况下,缓冲区大小等于一个内存页。 这是 4K 或 8K,具体取决于平台。numbersize

语法: proxy_busy_buffers_size size;
默认值:
proxy_busy_buffers_size 8k|16k;
上下文: http, ,serverlocation

缓冲来自代理的 server 启用时,限制 可以忙于向客户端发送响应,而响应不是 但已充分阅读。 同时,其余的缓冲区可用于读取响应 如果需要,缓冲对临时文件的响应的一部分。 默认情况下,受 proxy_buffer_sizeproxy_buffers Directives设置的两个缓冲区的大小限制。sizesize

语法: proxy_cache zone | off;
默认值:
proxy_cache off;
上下文: http, ,serverlocation

定义用于缓存的共享内存区域。 同一区域可以在多个地方使用。 参数值可以包含变量 (1.7.9)。 该参数禁用继承的缓存 从上一个配置级别开始。off

语法: proxy_cache_background_update on | off;
默认值:
proxy_cache_background_update off;
上下文: http, ,serverlocation

该Directives出现在版本 1.11.10 中。

允许启动后台子请求 要更新过期的缓存项, 而过时的缓存响应将返回给客户端。 请注意,在更新时,必须允许使用过时的缓存响应。

语法: proxy_cache_bypass string ...;
默认值:
上下文: http, ,serverlocation

定义不从缓存中获取响应的条件。 如果字符串参数的至少一个值不为空且不为空 等于 “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 on | off;
默认值:
proxy_cache_convert_head on;
上下文: http, ,serverlocation

该Directives出现在版本 1.9.7 中。

启用或禁用 “” 方法的转换 设置为 “” 进行缓存。 禁用转换时,应配置缓存键 以包括 .HEADGET$request_method

语法: proxy_cache_key string;
默认值:
proxy_cache_key $scheme$proxy_host$request_uri;
上下文: http, ,serverlocation

定义用于缓存的键,例如

proxy_cache_key "$host$request_uri $cookie_user";

默认情况下,Directives的值接近字符串

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

语法: proxy_cache_lock on | off;
默认值:
proxy_cache_lock off;
上下文: http, ,serverlocation

该Directives出现在版本 1.1.12 中。

启用后,一次只允许填充一个请求 根据 proxy_cache_key Directives通过将请求传递给代理服务器来标识的新 cache 元素。 同一 cache 元素的其他请求将等待 以将响应显示在缓存中,或者 此元素,直到 proxy_cache_lock_timeout Directives设置的时间。

语法: proxy_cache_lock_age time;
默认值:
proxy_cache_lock_age 5s;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.8 中。

如果最后一个请求传递给代理服务器 用于填充新的 cache 元素 未完成指定的 , 可以向代理服务器传递另一个请求。time

语法: proxy_cache_lock_timeout time;
默认值:
proxy_cache_lock_timeout 5s;
上下文: http, ,serverlocation

该Directives出现在版本 1.1.12 中。

设置 proxy_cache_lock 的超时。 当 过期时, 请求将被传递给代理服务器, 但是,不会缓存响应。time

在 1.7.8 之前,可以缓存响应。

语法: proxy_cache_max_range_offset number;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.11.6 中。

设置字节范围请求的偏移量(以字节为单位)。 如果范围超出偏移量,则 Range 请求将被传递给代理服务器 并且不会缓存响应。

语法: proxy_cache_methods GET | HEAD | POST ...;
默认值:
proxy_cache_methods GET HEAD;
上下文: http, ,serverlocation

该Directives出现在 0.7.59 版中。

如果此Directives中列出了 client 请求方法,则 响应将被缓存。 “” 和 “” 方法始终为 添加到列表中,但建议明确指定它们。 另请参见 proxy_no_cache Directives。GETHEAD

语法: proxy_cache_min_uses number;
默认值:
proxy_cache_min_uses 1;
上下文: http, ,serverlocation

设置响应之后的请求数 将被缓存。number

语法: proxy_cache_path path [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];
默认值:
上下文: 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_pathonoff

此外,所有活动密钥和有关数据的信息都会被存储 在共享内存区域中,其 和 由参数配置。 1 MB 区域可以存储大约 8000 个密钥。namesizekeys_zone

作为商业订阅的一部分, 共享内存区域还存储扩展的 缓存信息, 因此,需要为相同数量的键指定更大的区域大小。 例如 1 MB 区域可以存储大约 4000 个密钥。

在参数指定的时间内未访问的缓存数据将从缓存中删除 不管它们的新鲜度如何。 默认情况下,设置为 10 分钟。inactiveinactive

特殊的 “cache manager” 进程监控设置的最大缓存大小 通过参数, 和设置的最小可用空间量 通过 (1.19.1) 参数 在具有缓存的文件系统上。 当超出大小或没有足够的可用空间时, 它会删除最近最少使用的数据。 数据将在 、 和 参数 (1.11.5) 配置的迭代中删除。 在一次迭代期间,不超过 items 将被删除(默认情况下为 100)。 一次迭代的持续时间受参数限制(默认情况下为 200 毫秒)。 在迭代之间,将进行参数配置的暂停(默认为 50 毫秒)。max_sizemin_freemanager_filesmanager_thresholdmanager_sleepmanager_filesmanager_thresholdmanager_sleep

启动一分钟后,特殊的 “cache loader” 进程被激活。 它加载有关以前缓存在文件系统上的数据的信息 到缓存区中。 加载也是在迭代中完成的。 在一次迭代期间,不超过 items 被加载(默认情况下为 100)。 此外,一次迭代的持续时间受参数限制(默认情况下为 200 毫秒)。 在迭代之间,将进行参数配置的暂停(默认为 50 毫秒)。loader_filesloader_thresholdloader_sleep

此外 以下参数作为我们商业订阅的一部分提供:

purger=on|off
指示高速缓存清除程序 (1.7.12) 是否将从磁盘中删除与通配符键匹配的高速缓存条目。 将参数设置为 (default is ) 将激活 “Cache purger” 进程,该进程 永久迭代所有缓存条目 并删除与通配符键匹配的条目。onoff
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, ,serverlocation

该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 on | off;
默认值:
proxy_cache_revalidate off;
上下文: http, ,serverlocation

该Directives出现在版本 1.5.7 中。

使用条件请求启用过期缓存项目的重新验证 “If-Modified-Since”和“If-None-Match” header 字段。

语法: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
默认值:
proxy_cache_use_stale off;
上下文: http, ,serverlocation

确定在哪些情况下可以使用过时的缓存响应 在与代理服务器通信期间。 该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 [code ...] time;
默认值:
上下文: http, ,serverlocation

为不同的响应代码设置缓存时间。 例如,以下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 time;
默认值:
proxy_connect_timeout 60s;
上下文: http, ,serverlocation

定义与代理服务器建立连接的超时。 应该注意,此超时通常不能超过 75 秒。

语法: proxy_cookie_domain off;
proxy_cookie_domain domain replacement;
默认值:
proxy_cookie_domain off;
上下文: http, ,serverlocation

该Directives出现在版本 1.1.15 中。

设置应在 代理服务器响应。 假设代理服务器返回了 “Set-Cookie” header 字段,其属性为 “”. Directivesdomaindomain=localhost

proxy_cookie_domain localhost example.org;

会将此属性重写为 “”.domain=example.org

和 字符串和属性开头的点将被忽略。 匹配不区分大小写。domainreplacementdomain

的 and 字符串 可以包含变量:domainreplacement

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 继承自之前的配置级别。offproxy_cookie_domain

语法: proxy_cookie_flags off | cookie [flag ...];
默认值:
proxy_cookie_flags off;
上下文: http, ,serverlocation

该Directives出现在版本 1.19.3 中。

设置 Cookie 的一个或多个标志。 可以包含文本、变量及其组合。 可以包含文本、变量及其组合 (1.19.8)。 、 参数添加相应的标志。 , , 参数删除相应的标志。cookieflagsecurehttponlysamesite=strictsamesite=laxsamesite=nonenosecurenohttponlynosamesite

还可以使用正则表达式指定 Cookie。 在这种情况下,应该从 “” 符号。cookie~

多个Directives 可以在同一配置级别上指定:proxy_cookie_flags

proxy_cookie_flags one httponly;
proxy_cookie_flags ~ nosecure samesite=strict;

如果多个Directives可以应用于 Cookie, 将选择第一个 Matching Directives。 在示例中,标志 已添加到 Cookie 中,则 对于所有其他 Cookie 该标志被添加,并且 该标志将被删除。httponlyonesamesite=strictsecure

该参数取消效果 Directives 继承自之前的配置级别。offproxy_cookie_flags

语法: proxy_cookie_path off;
proxy_cookie_path path replacement;
默认值:
proxy_cookie_path off;
上下文: http, ,serverlocation

该Directives出现在版本 1.1.15 中。

设置应在 代理服务器响应。 假设代理服务器返回了 “Set-Cookie” header 字段,其属性为 “”. Directivespathpath=/two/some/uri/

proxy_cookie_path /two/ /;

会将此属性重写为 “”.path=/some/uri/

的 and 字符串 可以包含变量:pathreplacement

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 继承自之前的配置级别。offproxy_cookie_path

语法: proxy_force_ranges on | off;
默认值:
proxy_force_ranges off;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.7 中。

启用字节范围支持 对于来自代理服务器的缓存和未缓存响应 无论这些响应中的“Accept-Ranges”字段如何。

语法: proxy_headers_hash_bucket_size size;
默认值:
proxy_headers_hash_bucket_size 64;
上下文: http, ,serverlocation

设置哈希表的存储桶 由 proxy_hide_headerproxy_set_header Directives使用。 设置哈希表的详细信息在单独的文档中提供。size

语法: proxy_headers_hash_max_size size;
默认值:
proxy_headers_hash_max_size 512;
上下文: http, ,serverlocation

设置哈希表的最大值 由 proxy_hide_headerproxy_set_header Directives使用。 设置哈希表的详细信息在单独的文档中提供。size

语法: proxy_hide_header field;
默认值:
上下文: http, ,serverlocation

默认情况下, nginx 不传递标头字段 “Date”, “server”、“X-Pad”和 “X-Accel-...”来自代理的响应 server 设置为客户端。 该Directives设置其他字段 这不会被通过。 相反,如果需要允许传递字段, 可以使用 proxy_pass_header Directives。proxy_hide_header

语法: proxy_http_version 1.0 | 1.1;
默认值:
proxy_http_version 1.0;
上下文: http, ,serverlocation

该Directives出现在版本 1.1.4 中。

设置代理的 HTTP 协议版本。 默认情况下,使用版本 1.0。 建议将版本 1.1 与 keepalive 连接和 NTLM 身份验证一起使用。

语法: proxy_ignore_client_abort on | off;
默认值:
proxy_ignore_client_abort off;
上下文: http, ,serverlocation

确定与代理服务器的连接是否应为 closed 当客户端关闭连接而不等待 以获取响应。

语法: proxy_ignore_headers field ...;
默认值:
上下文: http, ,serverlocation

禁用来自代理服务器的某些响应标头字段的处理。 可以忽略以下字段:“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 on | off;
默认值:
proxy_intercept_errors off;
上下文: http, ,serverlocation

确定代码是否大于或等于的代理响应 到 300 应传递给客户端 或者被拦截并重定向到 nginx 进行处理 替换为 error_page Directives。

语法: proxy_limit_rate rate;
默认值:
proxy_limit_rate 0;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.7 中。

限制从代理服务器读取响应的速度。 以每秒字节数为单位指定。 零值将禁用速率限制。 限制是按请求设置的,因此如果 nginx 同时打开 与代理服务器的两个连接, 总速率将是指定限制的两倍。 该限制仅在缓冲来自代理的响应时有效 服务器已启用。 参数值可以包含变量 (1.27.0)。rate

语法: proxy_max_temp_file_size size;
默认值:
proxy_max_temp_file_size 1024m;
上下文: http, ,serverlocation

缓冲来自代理的 server 已启用,并且整个响应不适合缓冲区 由 proxy_buffer_sizeproxy_buffers Directives设置,响应的一部分可以保存到临时文件中。 该Directives设置临时文件的最大值。 设置一次写入临时文件的数据大小 通过 proxy_temp_file_write_size Directives。size

零值禁用对临时文件的响应缓冲。

此限制不适用于响应 将被缓存存储在磁盘上。

语法: proxy_method method;
默认值:
上下文: http, ,serverlocation

指定要在转发的请求中使用的 HTTP 发送到代理服务器,而不是 client 请求中的 method。 参数值可以包含变量 (1.11.6)。method

语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
默认值:
proxy_next_upstream error timeout;
上下文: http, ,serverlocation

指定在哪些情况下应将请求传递到下一个服务器:

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); 启用此选项明确允许重试此类请求;POSTLOCKPATCH
off
禁止将请求传递到下一个服务器。

应该记住,将请求传递给下一个服务器是 仅当尚未向客户端发送任何内容时才有可能。 也就是说,如果在 传输响应,则无法修复此问题。

该Directives还定义了什么被视为不成功 尝试与服务器通信。 的情况 , 和 始终被视为不成功的尝试, 即使它们未在Directives中指定。 、 、 并且是 仅当在Directives中指定了尝试时,才被视为不成功的尝试。 和 的情况从不被视为不成功的尝试。errortimeoutinvalid_headerhttp_500http_502http_503http_504http_429http_403http_404

将请求传递到下一个服务器可能会受到尝试次数时间的限制。

语法: proxy_next_upstream_timeout time;
默认值:
proxy_next_upstream_timeout 0;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.5 中。

限制可以将请求传递到下一个服务器的时间。 该值会关闭此限制。0

语法: proxy_next_upstream_tries number;
默认值:
proxy_next_upstream_tries 0;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.5 中。

限制将请求传递到下一个服务器的可能尝试次数。 该值会关闭此限制。0

语法: proxy_no_cache string ...;
默认值:
上下文: http, ,serverlocation

定义不将响应保存到缓存的条件。 如果字符串参数的至少一个值不为空且不为空 等于 “0”,则不会保存响应:

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

可以与 proxy_cache_bypass Directives一起使用。

语法: proxy_pass URL;
默认值:
上下文: location, ,if in locationlimit_except

设置代理服务器的协议和地址以及可选的 URI 应将位置映射到该位置。 作为协议,“” 或 “” 可以指定。 地址可以指定为域名或 IP 地址, 和一个可选端口:httphttps

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
    location /name/ {
        proxy_pass http://127.0.0.1$request_uri;
    }
    
    在这种情况下,如果在Directives中指定了 URI,则 它按原样传递给服务器, 替换原始请求 URI。

WebSocket 代理需要特殊的 配置,并且从版本 1.3.13 开始受支持。

语法: proxy_pass_header field;
默认值:
上下文: http, ,serverlocation

允许传递否则禁用的标头 字段。

语法: proxy_pass_request_body on | off;
默认值:
proxy_pass_request_body on;
上下文: http, ,serverlocation

指示是否传递原始请求正文 到代理服务器。

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

    proxy_pass ...
}

另请参见 proxy_set_headerproxy_pass_request_headers Directives。

语法: proxy_pass_request_headers on | off;
默认值:
proxy_pass_request_headers on;
上下文: http, ,serverlocation

指示是否传递原始请求的标头字段 到代理服务器。

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

    proxy_pass ...
}

另请参见 proxy_set_headerproxy_pass_request_body Directives。

语法: proxy_pass_trailers on | off;
默认值:
proxy_pass_trailers off;
上下文: http, ,serverlocation

该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 time;
默认值:
proxy_read_timeout 60s;
上下文: http, ,serverlocation

定义从代理服务器读取响应的超时。 超时仅在两个连续的读取作 ( 而不是为了传输整个响应。 如果代理服务器在此时间内没有传输任何内容, 连接已关闭。

语法: proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
默认值:
proxy_redirect default;
上下文: http, ,serverlocation

设置应在 “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 不同), 将入。

参数 使用 locationproxy_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 继承自之前的配置级别。offproxy_redirect

使用此Directives,还可以将主机名添加到 relative 由代理服务器发出的重定向:

proxy_redirect / /;

语法: proxy_request_buffering on | off;
默认值:
proxy_request_buffering on;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.11 中。

启用或禁用客户端请求正文的缓冲。

启用缓冲后,在将请求发送到代理服务器之前,将从 Client 端读取整个请求正文。

禁用缓冲后,请求正文将发送到代理服务器 收到后立即。 在这种情况下,如果 nginx 已经开始发送请求正文,则无法将请求传递到下一个服务器

使用 HTTP/1.1 分块传输编码时 要发送原始请求正文, 无论Directives值如何,请求正文都将被缓冲,除非 HTTP/1.1 已启用代理。

语法: proxy_send_lowat size;
默认值:
proxy_send_lowat 0;
上下文: http, ,serverlocation

如果Directives设置为非零值,nginx 将尝试 最小化数量 of 使用 kqueue 方法的任一标志对到代理服务器的传出连接执行 OF 发送作, 或 socket 选项 替换为指定的 .NOTE_LOWATSO_SNDLOWATsize

在 Linux、Solaris 和 Windows 上忽略此Directives。

语法: proxy_send_timeout time;
默认值:
proxy_send_timeout 60s;
上下文: http, ,serverlocation

设置将请求传输到代理服务器的超时。 超时仅在两个连续的写入作 ( 而不是为了传输整个请求。 如果代理服务器在此时间内没有收到任何内容, 连接已关闭。

语法: proxy_set_body value;
默认值:
上下文: http, ,serverlocation

允许重新定义传递给代理服务器的请求正文。 可以包含文本、变量及其组合。value

语法: proxy_set_header field value;
默认值:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
上下文: http, ,serverlocation

允许重新定义字段或将字段附加到传递给代理服务器的请求标头。 可以包含文本、变量及其组合。 这些Directives继承自之前的配置级别 当且仅当没有Directives时 在当前级别上定义。 默认情况下,仅重新定义两个字段:valueproxy_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 on | off;
默认值:
proxy_socket_keepalive off;
上下文: http, ,serverlocation

该Directives出现在版本 1.15.6 中。

配置 “TCP keepalive” 行为 用于到代理服务器的传出连接。 默认情况下,作系统的设置对套接字有效。 如果Directives设置为值 “”,则为套接字打开套接字选项。onSO_KEEPALIVE

语法: proxy_ssl_certificate file;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.7.8 中。

指定 a 和 PEM 格式的证书 用于对代理 HTTPS 服务器的身份验证。file

从 1.21.0 版本开始,可以在名称中使用变量。file

语法: proxy_ssl_certificate_key file;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.7.8 中。

使用 PEM 格式的密钥指定 a 用于对代理 HTTPS 服务器的身份验证。file

可以指定值 :: 而不是 (1.7.9), 它加载具有从 OpenSSL 引擎指定的密钥。enginenameidfileidname

从 1.21.0 版本开始,可以在名称中使用变量。file

语法: proxy_ssl_ciphers ciphers;
默认值:
proxy_ssl_ciphers DEFAULT;
上下文: http, ,serverlocation

该Directives出现在版本 1.5.6 中。

指定对代理 HTTPS 服务器的请求启用的密码。 密码以 OpenSSL 库理解的格式指定。

完整列表可使用 “” 命令。openssl ciphers

语法: proxy_ssl_conf_command name value;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.19.4 中。

在与代理的 HTTPS 服务器建立连接时设置任意 OpenSSL 配置命令

使用 OpenSSL 1.0.2 或更高版本时,支持该Directives。

多个Directives 可以在同一级别上指定。 这些Directives继承自之前的配置级别 当且仅当存在 无Directives 在当前级别上定义。proxy_ssl_conf_commandproxy_ssl_conf_command

请注意,直接配置 OpenSSL 可能会导致意外行为。

语法: proxy_ssl_crl file;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.7.0 中。

指定具有已吊销证书 (CRL) 的 以 PEM 格式用于验证代理 HTTPS 服务器的证书。file

语法: proxy_ssl_key_log path;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.27.2 中。

启用代理 HTTPS 服务器连接 SSL 密钥的日志记录 并指定密钥日志文件的路径。 密钥以与 Wireshark 兼容的 SSLKEYLOGFILE 格式记录。

该Directives作为我们商业订阅的一部分提供。

语法: proxy_ssl_name name;
默认值:
proxy_ssl_name $proxy_host;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.0 中。

允许覆盖用于验证代理 HTTPS 服务器证书的服务器名称,并在与代理 HTTPS 服务器建立连接时通过 SNI 传递

默认情况下,使用 proxy_pass URL 的 host 部分。

语法: proxy_ssl_password_file file;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.7.8 中。

指定 a with passphrases for secret keys,其中每个密码都在单独的行上指定。 加载密钥时依次尝试密码。file

语法: proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
默认值:
proxy_ssl_protocols TLSv1.2 TLSv1.3;
上下文: http, ,serverlocation

该Directives出现在版本 1.5.6 中。

为对代理 HTTPS 服务器的请求启用指定的协议。

默认情况下使用该参数 从 1.23.4 开始。TLSv1.3

语法: proxy_ssl_server_name on | off;
默认值:
proxy_ssl_server_name off;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.0 中。

启用或禁用通过 TLS 传递服务器名称 服务器名称指示扩展 (SNI、RFC 6066) 当与代理的 HTTPS 服务器建立连接时。

语法: proxy_ssl_session_reuse on | off;
默认值:
proxy_ssl_session_reuse on;
上下文: http, ,serverlocation

确定在使用 代理服务器。 如果错误 “” ,请尝试禁用会话重用。SSL3_GET_FINISHED:digest check failed

语法: proxy_ssl_trusted_certificate file;
默认值:
上下文: http, ,serverlocation

该Directives出现在版本 1.7.0 中。

指定具有 PEM 格式的受信任 CA 证书 用于验证代理 HTTPS 服务器的证书。file

语法: proxy_ssl_verify on | off;
默认值:
proxy_ssl_verify off;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.0 中。

启用或禁用代理 HTTPS 服务器证书的验证。

语法: proxy_ssl_verify_depth number;
默认值:
proxy_ssl_verify_depth 1;
上下文: http, ,serverlocation

该Directives出现在版本 1.7.0 中。

设置代理 HTTPS 服务器证书链中的验证深度。

语法: proxy_store on | off | string;
默认值:
proxy_store off;
上下文: http, ,serverlocation

允许将文件保存到磁盘。 该参数使用路径保存文件 对应于Directives aliasroot。 该参数禁用文件保存。 此外,可以使用 with 变量显式设置文件名:onoffstring

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 users:permissions ...;
默认值:
proxy_store_access user:rw;
上下文: http, ,serverlocation

为新创建的文件和目录设置访问权限,例如:

proxy_store_access user:rw group:rw all:r;

如果有 或 访问权限 ,则权限可以省略:groupalluser

proxy_store_access group:rw all:r;

语法: proxy_temp_file_write_size size;
默认值:
proxy_temp_file_write_size 8k|16k;
上下文: http, ,serverlocation

限制写入临时文件的数据 在缓冲来自代理服务器的响应时 到临时文件。 默认情况下,受 proxy_buffer_sizeproxy_buffers Directives设置的两个缓冲区的限制。 临时文件的最大大小由 proxy_max_temp_file_size Directives设置。sizesize

语法: proxy_temp_path path [level1 [level2 [level3]]];
默认值:
proxy_temp_path proxy_temp;
上下文: http, ,serverlocation

定义用于存储临时文件的目录 以及从代理服务器接收的数据。 在指定的 目录。 例如,在以下配置

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