模块 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_modulemodule 允许传递 请求。

示例配置

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,server,location

该Directives出现在版本 0.8.22 中。

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

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

proxy_bind $remote_addr transparent;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

该Directives出现在版本 1.11.10 中。

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

语法: 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 Directives一起使用。

语法: proxy_cache_convert_head on | off;
默认值:
proxy_cache_convert_head on;
上下文: http,server,location

该Directives出现在版本 1.9.7 中。

启用或禁用 ”HEAD“ 方法 改为 ”GET“ 进行缓存。 禁用转换时,应配置缓存键 以包含$request_method.

语法: proxy_cache_key string;
默认值:
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 on | off;
默认值:
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 time;
默认值:
proxy_cache_lock_age 5s;
上下文: http,server,location

该Directives出现在版本 1.7.8 中。

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

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

该Directives出现在版本 1.1.12 中。

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

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

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

该Directives出现在版本 1.11.6 中。

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

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

该Directives出现在 0.7.59 版中。

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

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

设置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 函数应用于缓存键。 这levelsparameter 定义缓存的层次结构级别: 从 1 到 3,每个级别接受值 1 或 2。 例如,在以下配置

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) 的 API 中。 如果省略该参数或将其设置为该值on, proxy_temp_path Directives设置的目录 。 如果该值设置为off, 临时文件将直接放在 cache 目录中。

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

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

inactive参数从缓存中删除 不管它们的新鲜度如何。 默认情况下,inactive设置为 10 分钟。

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

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

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

purger=on|off
指示高速缓存清除程序 (1.7.12) 是否将从磁盘中删除与通配符键匹配的高速缓存条目。 将参数设置为on(默认值为off) 将激活 “Cache purger” 进程,该进程 永久迭代所有缓存条目 并删除与通配符键匹配的条目。
purger_files=number
设置在一次迭代 (1.7.12) 期间将扫描的项目数。 默认情况下,purger_files设置为 10。
purger_threshold=number
设置一次迭代的持续时间 (1.7.12)。 默认情况下,purger_threshold设置为 50 毫秒。
purger_sleep=number
设置迭代之间的暂停 (1.7.12)。 默认情况下,purger_sleep设置为 50 毫秒。

在版本 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 on | off;
默认值:
proxy_cache_revalidate off;
上下文: http,server,location

该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,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 [code ...] time;
默认值:
上下文: 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 time;
默认值:
proxy_connect_timeout 60s;
上下文: http,server,location

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

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

该Directives出现在版本 1.1.15 中。

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

proxy_cookie_domain localhost example.org;

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

开头的点domainreplacementstrings 和domain属性。 匹配不区分大小写。

domainreplacement字符串 可以包含变量:

proxy_cookie_domain www.$host $host;

也可以使用正则表达式指定该Directives。 在这种情况下,domain应从 “” 符号。 正则表达式可以包含命名捕获和位置捕获。 和~replacement可以引用它们:

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

几个proxy_cookie_domainDirectives 可以在同一级别上指定:

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

如果多个Directives可以应用于 Cookie, 将选择第一个 Matching Directives。

offparameter 取消效果 的proxy_cookie_domainDirectives 继承自之前的配置级别。

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

该Directives出现在版本 1.19.3 中。

设置 Cookie 的一个或多个标志。 这cookie可以包含文本、变量及其组合。 这flag可以包含文本、变量及其组合 (1.19.8)。 这secure,httponly,samesite=strict,samesite=lax,samesite=noneparameters 添加相应的标志。 这nosecure,nohttponly,nosamesiteparameters 删除相应的标志。

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

几个proxy_cookie_flagsDirectives 可以在同一配置级别上指定:

proxy_cookie_flags one httponly;
proxy_cookie_flags ~ nosecure samesite=strict;

如果多个Directives可以应用于 Cookie, 将选择第一个 Matching Directives。 在此示例中,httponly旗 已添加到 Cookie 中one, 对于所有其他 Cookie 这samesite=strictflag 的 这secure标志被删除。

offparameter 取消效果 的proxy_cookie_flagsDirectives 继承自之前的配置级别。

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

该Directives出现在版本 1.1.15 中。

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

proxy_cookie_path /two/ /;

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

pathreplacement字符串 可以包含变量:

proxy_cookie_path $uri /some$uri;

也可以使用正则表达式指定该Directives。 在这种情况下,path应从 区分大小写的匹配的 “” 符号, 或从不区分大小写的 “” 符号 匹配。 正则表达式可以包含命名捕获和位置捕获。 和~~*replacement可以引用它们:

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

几个proxy_cookie_pathDirectives 可以在同一级别上指定:

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

如果多个Directives可以应用于 Cookie, 将选择第一个 Matching Directives。

offparameter 取消效果 的proxy_cookie_pathDirectives 继承自之前的配置级别。

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

该Directives出现在版本 1.7.7 中。

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

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

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

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

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

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

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

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

该Directives出现在版本 1.1.4 中。

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

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

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

语法: 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)、“过期”、 “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,server,location

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

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

该Directives出现在版本 1.7.7 中。

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

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

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

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

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

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

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

语法: 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,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
通常,使用非幂等方法的请求 (POST,LOCK,PATCH) 不会传递到下一个服务器 如果请求已发送到上游服务器 (1.9.13); 启用此选项明确允许重试此类请求;
off
禁止将请求传递到下一个服务器。

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

该Directives还定义了什么被视为不成功 尝试与服务器通信。 这些案例error,timeoutinvalid_header始终被视为不成功的尝试, 即使它们未在Directives中指定。 这些案例http_500,http_502,http_503,http_504, 和http_429是 仅当在Directives中指定了尝试时,才被视为不成功的尝试。 这些案例http_403http_404永远不会被视为不成功的尝试。

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

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

该Directives出现在版本 1.7.5 中。

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

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

该Directives出现在版本 1.7.5 中。

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

语法: proxy_no_cache string ...;
默认值:
上下文: 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 URL;
默认值:
上下文: location,if in location,limit_except

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

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

或作为在单词 “unix“并括在冒号中:

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

如果一个域名解析为多个地址,则所有地址都将是 以循环方式使用。 此外,还可以将地址指定为服务器组

Parameter value 可以包含变量。 在这种情况下,如果将地址指定为域名, 在描述的服务器组中搜索名称, 如果未找到,则使用解析程序确定。

请求 URI 将按如下方式传递给服务器:

  • 如果proxy_passDirectives使用 URI 指定, 然后,当请求传递到服务器时,与位置匹配的规范化请求 URI 部分将替换为 URI 在Directives中指定:
    location /name/ {
        proxy_pass http://127.0.0.1/remote/;
    }
    
  • 如果proxy_pass指定时没有 URI,则 请求 URI 以相同的形式传递给服务器 在处理原始请求时由客户端发送, 或传递完整的规范化请求 URI 处理更改的 URI 时:
    location /some/path/ {
        proxy_pass http://127.0.0.1;
    }
    
    在 1.1.12 版本之前, 如果proxy_pass指定时没有 URI,则 可能会传递原始请求 URI 而不是更改的 URI。

在某些情况下,无法确定请求 URI 中要替换的部分:

  • 使用正则表达式指定 location 时, 以及命名位置内。

    在这些情况下,proxy_pass应该指定时不带 URI。

  • 当使用 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,server,location

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

语法: proxy_pass_request_body on | off;
默认值:
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_headerproxy_pass_request_headers Directives。

语法: proxy_pass_request_headers on | off;
默认值:
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_headerproxy_pass_request_body Directives。

语法: proxy_pass_trailers on | off;
默认值:
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 time;
默认值:
proxy_read_timeout 60s;
上下文: http,server,location

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

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

设置应在 “Location” 中更改的文本 和代理服务器响应的 “Refresh” 标头字段。 假设代理服务器返回了 Headers 字段 “Location: http://localhost:8000/two/some/uri/”. Directives

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

会将此字符串重写为 “Location: http://frontend/one/some/uri/”.

服务器名称可以在replacement字符串:

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

然后是主服务器的名称和端口(如果与 80 不同), 将入。

default参数 使用 locationproxy_pass Directives的参数。 因此,以下两种配置是等效的:

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

default如果使用变量指定 proxy_pass则不允许使用参数。

一个replacementstring 可以包含变量:

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

一个redirect也可以包含 (1.1.11) 变量:

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;

几个proxy_redirectDirectives 可以在同一级别上指定:

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

如果多个Directives可以应用于 代理服务器响应的标头字段, 将选择第一个 Matching Directives。

offparameter 取消效果 的proxy_redirectDirectives 继承自之前的配置级别。

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

proxy_redirect / /;

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

该Directives出现在版本 1.7.11 中。

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

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

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

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

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

如果Directives设置为非零值,nginx 将尝试 最小化数量 的发送作对代理服务器的传出连接执行NOTE_LOWATkqueue 方法的标志, 或SO_SNDLOWATsocket 选项、 替换为指定的size.

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

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

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

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

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

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

允许重新定义字段或将字段附加到传递给代理服务器的请求标头。 这value可以包含文本、变量及其组合。 这些Directives继承自之前的配置级别 当且仅当没有proxy_set_headerDirectives 在当前级别上定义。 默认情况下,仅重新定义两个字段:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

如果启用了缓存,则标头字段 “如果修改自”, “if-unmodified-since”、 “如果-无-匹配”, “如果匹配”, “范围”, 和 “If-Range” 不会传递到代理服务器。

可以按如下方式传递未更改的 “Host” 请求标头字段:

proxy_set_header Host       $http_host;

但是,如果客户端请求标头中不存在此字段,则 不会通过任何内容。 在这种情况下,最好使用$hostvariable - 其 值等于 “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,server,location

该Directives出现在版本 1.15.6 中。

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

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

该Directives出现在版本 1.7.8 中。

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

从 1.21.0 版本开始,变量可以在file名字。

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

该Directives出现在版本 1.7.8 中。

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

价值engine:name:id可以指定,而不是file(1.7.9), 它加载一个具有指定id从 OpenSSL 引擎name.

从 1.21.0 版本开始,变量可以在file名字。

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

该Directives出现在版本 1.5.6 中。

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

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

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

该Directives出现在版本 1.19.4 中。

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

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

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

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

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

该Directives出现在版本 1.7.0 中。

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

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

该Directives出现在版本 1.27.2 中。

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

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

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

该Directives出现在版本 1.7.0 中。

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

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

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

该Directives出现在版本 1.7.8 中。

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

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

该Directives出现在版本 1.5.6 中。

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

TLSv1.3参数 从 1.23.4 开始。

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

该Directives出现在版本 1.7.0 中。

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

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

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

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

该Directives出现在版本 1.7.0 中。

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

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

该Directives出现在版本 1.7.0 中。

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

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

该Directives出现在版本 1.7.0 中。

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

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

允许将文件保存到磁盘。 这on参数将文件与路径一起存储 对应于Directives aliasroot。 这offparameter 禁用文件保存。 此外,可以使用stringwith 变量:

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,server,location

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

proxy_store_access user:rw group:rw all:r;

如果有groupall访问权限 指定user权限可以省略:

proxy_store_access group:rw all:r;

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

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

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

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

proxy_temp_path /spool/nginx/proxy_temp 1 2;

临时文件可能如下所示:

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

另请参阅use_temp_pathproxy_cache_path Directives的参数。

嵌入变量

ngx_http_proxy_module模块支持嵌入式变量 可用于使用 proxy_set_header Directives编写 headers:

$proxy_host
proxy_pass Directives中指定的代理服务器的名称和端口;
$proxy_port
proxy_pass Directives中指定的代理服务器的端口,或协议的默认端口;
$proxy_add_x_forwarded_for
“X-Forwarded-For” 客户端请求标头字段 使用$remote_addr变量,用逗号分隔。 如果客户端中不存在 “X-Forwarded-For” 字段 request 标头中,$proxy_add_x_forwarded_for变量相等 到$remote_addr变量。