代理#
允许将请求传递到另一台(代理)服务器。
配置示例#
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
指令#
proxy_bind#
使发往代理服务器的出站连接从指定的本地 IP 地址和可选端口发起。参数值可以包含变量。特殊值 off
取消从先前配置级别继承的 proxy_bind 指令的效果,这允许系统自动分配本地 IP 地址和端口。
transparent
参数允许发往代理服务器的出站连接从非本地 IP 地址发起,例如,从客户端的真实 IP 地址:
proxy_bind $remote_addr transparent;
为了使此参数生效,通常需要以 超级用户 权限运行 Angie 工作进程。在 Linux 上,如果指定了 transparent
参数,则不需要,因为工作进程会从主进程继承 CAP_NET_RAW 能力。
重要
必须配置内核路由表以拦截来自代理服务器的网络流量。
proxy_buffer_size#
设置用于读取从代理服务器接收到的响应的第一部分的缓冲区大小。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。这是 4K 或 8K,取决于平台。不过,它可以被设置得更小。
proxy_buffering#
启用或禁用对代理服务器响应的缓冲。
|
Angie 尽快从代理服务器接收响应,并将其保存到由 proxy_buffer_size 和 proxy_buffers 指令设置的缓冲区中。如果整个响应不适合内存的一部分,可以将其保存到磁盘上的 临时文件。写入临时文件由 proxy_max_temp_file_size 和 proxy_temp_file_write_size 指令控制。 |
|
响应以同步方式传递给客户端,立即在收到时传递。Angie 不会尝试从代理服务器读取整个响应。Angie 从服务器一次可以接收的数据的最大大小由 proxy_buffer_size 指令设置。 |
可以通过在 "X-Accel-Buffering" 响应头字段中传递 "yes" 或 "no" 来启用或禁用缓冲。此功能可以使用 proxy_ignore_headers 指令禁用。
proxy_buffers#
设置用于读取代理服务器响应的缓冲区的数量和大小,针对单个连接。
默认情况下,缓冲区大小等于一个内存页。这是 4K 或 8K,取决于平台。
proxy_busy_buffers_size#
当从代理服务器的响应的 缓冲 被启用时,限制可以用于发送给客户端的响应但尚未完全读取的缓冲区总大小。同时,剩余的缓冲区可用于读取响应,并在需要时将部分响应缓冲到临时文件。
默认情况下,大小由 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区的大小限制。
proxy_cache#
定义用于缓存的共享内存区域。 一个区域可以在配置中多次使用。 参数的值允许变量。
|
禁用从先前配置级别继承的缓存。 |
Added in version 1.2.0: PRO
在 Angie PRO 中,您可以指定多个共享相同 keys_zone
值的 proxy_cache_path 指令以实现缓存分片。如果这样做,请设置引用此 keys_zone
的 proxy_cache 指令的 path
参数:
|
该值在后台的响应被缓存时确定,这意味着涉及变量,包括那些存储来自响应的信息的变量。 如果响应从缓存中获得,path 不会重新评估;因此,从缓存中获取的响应将保留其原始 path,直到从缓存中删除。 |
这允许通过应用 map 指令或脚本来选择缓存路径,以响应来自后台的响应。一个 Content-Type
示例:
proxy_cache_path /cache/one keys_zone=zone:10m;
proxy_cache_path /cache/two keys_zone=zone;
map $upstream_http_content_type $cache {
~^text/ one;
default two;
}
server {
...
location / {
proxy_pass http://backend;
proxy_cache zone path=/cache/$cache;
}
}
这添加了两个缓存路径和一个变量映射以选择它们之间。如果 Content-Type
以 text/
开头,则使用第一个路径;否则,使用第二个。
proxy_cache_background_update#
|
|
默认值 |
|
http, server, location |
允许启动一个后台子请求以更新已过期的缓存项,同时将陈旧的缓存响应返回给客户端。
注意
请注意,当缓存响应正在更新时,必须 允许 使用陈旧的缓存响应。
proxy_cache_bypass#
定义在何种条件下不会从缓存中获取响应。如果字符串参数的至少一个值不为空且不等于 "0",则不会从缓存中获取响应:
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
可以与 proxy_no_cache 指令一起使用。
proxy_cache_convert_head#
启用或禁用将 "HEAD" 方法转换为 "GET" 以进行缓存。当转换被禁用时,应该配置 缓存键 以包含 $request_method。
proxy_cache_key#
|
|
默认值 |
|
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_key 指令识别的新缓存元素。其他相同缓存元素的请求将等待响应出现在缓存中或此元素的缓存锁被释放,直到由 proxy_cache_lock_timeout 指令设置的时间。
proxy_cache_lock_age#
如果最后一个传递到代理服务器以填充新缓存元素的请求未在指定时间内完成,则可以再传递一个请求到代理服务器。
proxy_cache_lock_timeout#
设置 proxy_cache_lock 的超时时间。当时间到期时,请求将被传递到代理服务器,但响应不会被缓存。
proxy_cache_max_range_offset#
设置字节范围请求的偏移量。如果范围超出偏移量,范围请求将被传递到代理服务器,并且响应不会被缓存。
proxy_cache_methods#
|
|
默认值 |
|
http, server, location |
如果客户端请求方法在此指令中列出,则响应将被缓存。"GET" 和 "HEAD" 方法总是被添加到列表中,尽管建议显式指定它们。另请参见 proxy_no_cache 指令。
proxy_cache_min_uses#
设置请求次数,在达到该次数后响应将被缓存。
proxy_cache_path#
|
|
默认值 |
— |
http |
设置缓存的 path 和其他参数。缓存数据存储在文件中。缓存中的文件名是应用 MD5 函数到 cache key 的结果。
|
定义缓存的层次结构级别:从 1 到 3,每个级别接受值 1 或 2。 |
例如,在以下配置中:
proxy_cache_path /data/angie/cache levels=1:2 keys_zone=one:10m;
缓存中的文件名将如下所示:
/data/angie/cache/c/29/b7f54b2df7773722d382f4809d65029c
缓存的响应首先写入临时文件,然后文件被重命名。临时文件和缓存可以放在不同的文件系统上。但是请注意,在这种情况下,文件跨两个文件系统复制,而不是廉价的重命名操作。因此建议对任何给定位置,缓存和保存临时文件的目录都放在同一文件系统上。
|
设置临时文件的目录 |
|
如果此参数被省略或设置为值 |
|
临时文件将直接放在缓存目录中。 |
|
配置共享内存区的名称和大小,以存储所有活动键和数据信息。 一兆字节的区域可以存储大约 8,000 个键。 |
|
在此参数指定的时间内未被访问的缓存数据将从缓存中移除,无论其新鲜度如何。 默认情况下,设置为 10 分钟。 |
备注
Added in version 1.2.0: PRO
在 Angie PRO 中,允许多个 proxy_cache_path 指令共享相同的
keys_zone
值。只有第一个这样的指令可以设置共享内存区大小。
对这些指令的选择由相关 proxy_cache 指令的 path
参数决定。
一个特殊的 cache manager 进程监控文件系统上的最大缓存大小和最小可用空间,当大小超出或没有足够的可用空间时,它会删除最近最少使用的数据。这些数据以迭代的方式删除。
|
最大缓存大小 |
|
文件系统上缓存的最小可用空间 |
|
限制一次迭代中要删除的项目数量 默认情况下, |
|
限制一次迭代的持续时间 默认情况下, |
|
配置交互之间的暂停 默认情况下, |
Angie 启动一分钟后,特殊的 cache loader 进程被激活。它加载文件系统中存储的先前缓存数据的信息到缓存区。加载同样以迭代的方式进行。
|
限制一次迭代中要加载的项目数量 默认情况下, |
|
限制一次迭代的持续时间 默认情况下, |
|
配置交互之间的暂停 默认情况下, |
proxy_cache_revalidate#
启用使用带有 "If-Modified-Since" 和 "If-None-Match" 头字段的条件请求重新验证过期的缓存项。
proxy_cache_use_stale#
|
|
默认 |
|
http, server, location |
决定在与代理服务器通信的哪些情况下可以使用陈旧的缓存响应。指令的参数与 proxy_next_upstream 指令的参数匹配。
|
如果无法选择处理请求的代理服务器,则允许使用陈旧的缓存响应。 |
|
额外参数,允许使用正在更新的陈旧缓存响应。这允许在更新缓存数据时最小化对代理服务器的访问次数。 |
直接在响应头中也可以为响应过期后指定的秒数启用使用陈旧缓存响应:
"Cache-Control" 头字段的 stale-while-revalidate 扩展允许使用正在更新的陈旧缓存响应。
"Cache-Control" 头字段的 stale-if-error 扩展允许在出现错误时使用陈旧的缓存响应。
备注
这比使用指令参数的优先级更低。
为最小化在填充新缓存元素时对代理服务器的访问次数,可以使用 proxy_cache_lock 指令。
proxy_cache_valid#
设置不同响应代码的缓存时间。例如,以下指令
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" 头字段以秒为单位设置响应的缓存时间。值为零禁用响应的缓存。如果值以 @ 前缀开头,则设置自 Epoch 以来的绝对时间,以秒为单位,直到响应可能被缓存。
如果头字段不包含 "X-Accel-Expires" 字段,缓存参数可能会在 "Expires" 或 "Cache-Control" 头字段中设置。
如果头字段包含 "Set-Cookie" 字段,则该响应将不会被缓存。
如果头字段包含值为 "*" 的 "Vary" 字段,则该响应将不会被缓存。如果头字段包含其他值的 "Vary" 字段,则此类响应将被缓存,并考虑相应的请求头字段。
可以使用 proxy_ignore_headers 指令禁用对这些响应头字段中的一个或多个的处理。
proxy_connect_timeout#
定义与代理服务器建立连接的超时时间。应注意,此超时时间通常不能超过 75 秒。
proxy_connection_drop#
启用在代理服务器从组中移除或被 reresolve 进程或 API command DELETE
标记为永久不可用后,终止与其的所有连接。
当为客户端或代理服务器处理下一个读取或写入事件时,连接被终止。
设置 time 启用连接终止 timeout;设置 on
时,连接立即断开。
proxy_force_ranges#
启用代理服务器响应中缓存和未缓存响应的字节范围支持,而不管这些响应中的“Accept-Ranges”字段。
proxy_headers_hash_bucket_size#
|
|
默认 |
|
http, server, location |
设置 proxy_hide_header 和 proxy_set_header 指令所使用的哈希表的桶大小。有关设置哈希表的详细信息,请参阅 单独说明。
proxy_headers_hash_max_size#
设置 proxy_hide_header 和 proxy_set_header 指令所使用的哈希表的最大大小。有关设置哈希表的详细信息,请参阅 单独说明。
proxy_hide_header#
默认情况下,Angie不会将代理服务器响应中的“Date”、“Server”、“X-Pad”和“X-Accel-...”头字段传递给客户端。proxy_hide_header 指令设置不传递的其他字段。如果需要允许传递字段,可以使用 proxy_pass_header 指令。
proxy_http_version#
|
|
默认 |
|
http, server, location, if in location, limit_except |
为代理设置HTTP协议版本。 默认情况下,使用版本1.0。 建议使用1.1或更高版本 与 保持活动连接 一起使用。
proxy_http3_hq#
proxy_http3_max_concurrent_streams#
|
|
默认 |
|
http, server |
proxy_http3_stream_buffer_size#
proxy_ignore_client_abort#
确定当客户端在未等待响应的情况下关闭连接时,是否应关闭与代理服务器的连接。
proxy_ignore_headers#
禁用来自代理服务器的某些响应头字段的处理。可以忽略以下字段:“X-Accel-Redirect”、“X-Accel-Expires”、“X-Accel-Limit-Rate”、“X-Accel-Buffering”、“X-Accel-Charset”、“Expires”、“Cache-Control”、“Set-Cookie”和“Vary”。
如果没有被禁用,这些头字段的处理将产生以下效果:
proxy_intercept_errors#
确定是否应将代码大于或等于300的代理响应传递给客户端,还是被拦截并重定向到Angie进行使用 error_page 指令的处理。
proxy_limit_rate#
限制从代理服务器读取响应的速度。rate 以每秒字节数指定,并且可以包含变量。
|
禁用速率限制 |
备注
限制是针对每个请求设置的,因此如果Angie同时打开两个到代理服务器的连接,总速率将是指定限制的两倍。此限制仅在启用从代理服务器缓冲响应的情况下有效。
proxy_max_temp_file_size#
当启用从代理服务器缓冲响应,并且整个响应无法容纳在由 proxy_buffer_size 和 proxy_buffers 指令设置的缓冲区中时,响应的一部分可以保存到临时文件中。此指令设置临时文件的最大大小。每次写入临时文件的数据大小由 proxy_temp_file_write_size 指令设置。
|
禁用对临时文件的响应缓冲 |
备注
此限制不适用于将被缓存或 存储在磁盘上 的响应。
proxy_method#
指定转发到代理服务器的请求中使用的HTTP方法,而不是客户端请求中的方法。参数值可以包含变量。
proxy_next_upstream#
|
|
默认值 |
|
http, server, location |
指定在何种情况下应将请求传递到 上游池 中的下一个服务器:
|
建立与服务器的连接、传递请求或读取响应头时发生错误; |
|
建立与服务器的连接、传递请求或读取响应头时发生超时; |
|
服务器返回了一个空或无效的响应; |
|
服务器返回了代码为500的响应; |
|
服务器返回了代码为502的响应; |
|
服务器返回了代码为503的响应; |
|
服务器返回了代码为504的响应; |
|
服务器返回了代码为403的响应; |
|
服务器返回了代码为404的响应; |
|
服务器返回了代码为429的响应; |
|
通常,具有 非幂等 方法
( |
|
禁止将请求传递到下一个服务器。 |
备注
需要注意的是,只有在尚未向客户端发送任何内容的情况下,才能将请求传递到下一个服务器。也就是说,如果在传输响应的中途发生错误或超时,修复是无法实现的。
该指令还定义了与服务器通信的 不成功尝试 的标准。
|
始终被视为不成功的尝试,即使它们未在指令中指定 |
|
仅在指令中指定时被视为不成功的尝试 |
|
从不被视为不成功的尝试 |
proxy_next_upstream_timeout#
限制请求可以传递到 下一个 服务器的时间。
|
关闭此限制 |
proxy_next_upstream_tries#
限制将请求传递到 下一个 服务器的可能尝试次数。
|
关闭此限制 |
proxy_no_cache#
定义在何种条件下响应不会被保存到缓存中。如果字符串参数的至少一个值不为空且不等于 "0",则响应不会被保存:
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
可以与 proxy_cache_bypass 指令一起使用。
proxy_pass#
设置代理服务器的协议和地址以及一个可选的URI,以将位置映射到该URI。作为协议,可以指定 http
或 https
。地址可以指定为域名或IP地址,并且可以选择性地指定端口:
proxy_pass http://localhost:8000/uri/;
或者作为UNIX域套接字路径,在 unix
之后并用冒号括起来指定:
proxy_pass http://unix:/tmp/backend.socket:/uri/;
如果一个域名解析为多个地址,则所有这些地址将以轮询方式使用。此外,地址可以指定为 服务器组。如果使用组,则不能与其一起指定端口;相反,应为组内的每个服务器单独指定端口。
参数值可以包含变量。在这种情况下,如果地址指定为域名,则在描述的服务器组中搜索该名称,如果未找到,则使用 resolver 确定。
请求URI被传递到服务器的方式如下:
如果 proxy_pass 指令是 带URI 指定的,则当请求传递到服务器时,与位置匹配的 标准化的 请求URI的部分将被指令中指定的URI替换:
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;
}
在某些情况下,无法确定要替换的请求URI部分:
当 location 使用正则表达式指定时,以及在命名的 locations 内
在这些情况下,proxy_pass 应该指定为不带URI。
-
当使用 rewrite 指令在代理的 location 内更改URI,并且将使用相同的配置处理请求时(break):
location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; }
在这种情况下,指令中指定的URI将被忽略,完整的更改后的请求URI将传递到服务器。
-
当在 proxy_pass 中使用变量时:
location /name/ { proxy_pass http://127.0.0.1$request_uri; }
在这种情况下,如果在指令中指定了URI,则它将按原样传递到服务器,替换原始请求URI。
WebSocket 代理需要特殊配置。
proxy_pass_header#
允许从代理服务器传递 否则禁用的 头字段到客户端。
proxy_pass_request_body#
指示是否将原始请求体传递到代理服务器。
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 指令。
proxy_pass_request_headers#
|
|
默认值 |
|
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 指令。
proxy_quic_active_connection_id_limit#
|
|
默认值 |
|
http, server |
设置 QUIC active_connection_id_limit
传输参数值。
这是每个服务器可以维护的最大活动 连接ID 数量。
proxy_quic_gso#
proxy_quic_host_key#
设置一个 file,其中包含用于 QUIC 的密钥,用于加密 无状态重置 和 地址验证 令牌。 默认情况下,每次重启时会生成一个随机密钥。 使用旧密钥生成的令牌将不被接受。
proxy_read_timeout#
定义从代理服务器读取响应的超时时间。超时仅在两个连续的读取操作之间设置,而不是用于整个响应的传输。如果代理服务器在此时间内未传输任何内容,则连接将关闭。
proxy_redirect#
|
|
默认值 |
|
http, server, location |
设置应更改代理服务器响应的 "Location" 和 "Refresh" 头字段中的文本。
假设代理服务器返回了头字段:
Location: 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)将被插入。
default
参数指定的默认替换使用 location 和 proxy_pass 指令的参数。因此,以下两个配置是等效的:
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 是使用变量指定的,则不允许使用默认参数。
replacement 字符串可以包含变量:
proxy_redirect http://localhost:8000/ http://$host:$server_port/;
redirect 也可以包含变量:
proxy_redirect http://$proxy_host:8000/ /;
可以使用正则表达式指定该指令。在这种情况下,redirect 应以 "~" 符号开头用于区分大小写匹配,或以 "~*" 符号开头用于不区分大小写匹配。正则表达式可以包含命名和位置捕获,replacement 可以引用它们:
proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;
可以在同一层次上指定多个 proxy_redirect 指令:
proxy_redirect default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
如果可以将多个指令应用于代理服务器响应的头字段,则会选择第一个匹配的指令。
off
参数取消继承自前一级配置的 proxy_redirect 指令的效果。
使用此指令,还可以将主机名称添加到代理服务器发出的相对重定向:
proxy_redirect / /;
proxy_request_buffering#
启用或禁用客户端请求主体的缓冲。
当使用 HTTP/1.1 分块传输编码发送原始请求主体时,无论指令值如何,请求主体都将被缓冲,除非 HTTP/1.1 已为代理启用 QUIC。
proxy_send_lowat#
如果该指令设置为非零值,代理将尝试通过使用 kqueue 方法的 NOTE_LOWAT 标志或 SO_SNDLOWAT 套接字选项,以指定的大小来最小化对代理服务器的传出连接的发送操作次数。
备注
在 Linux、Solaris 和 Windows 上忽略此指令。
proxy_send_timeout#
设置将请求传输到代理服务器的超时时间。超时仅在两个连续的写操作之间设置,而不是用于整个请求的传输。如果代理服务器在此时间内未接收到任何内容,则连接将关闭。
proxy_set_body#
允许重新定义传递给代理服务器的请求主体。值可以包含文本、变量及其组合。
proxy_set_header#
允许重新定义或添加字段到请求头 传递 给代理服务器。value 可以包含文本、变量及其组合。这些指令仅在当前级别未定义 proxy_set_header 指令时从前一个配置级别继承。默认情况下,仅重新定义两个字段:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
如果启用了缓存,原始请求中的头字段 "If-Modified-Since"、"If-Unmodified-Since"、"If-None-Match"、"If-Match"、"Range" 和 "If-Range" 不会传递给代理服务器。
可以像这样传递未更改的 "Host" 请求头字段:
proxy_set_header Host $http_host;
然而,如果在客户端请求头中不存在此字段,则不会传递任何内容。在这种情况下,最好使用 $host 变量 - 其值等于 "Host" 请求头字段中的服务器名称,或者如果该字段不存在,则为主服务器名称:
proxy_set_header Host $host;
此外,还可以与代理服务器的端口一起传递服务器名称:
proxy_set_header Host $host:$proxy_port;
如果头字段的值为空字符串,则不会将该字段传递给代理服务器:
proxy_set_header Accept-Encoding "";
proxy_socket_keepalive#
配置用于代理服务器的传出连接的 "TCP keepalive" 行为。
|
默认情况下,操作系统的设置对套接字生效。 |
|
为套接字打开 SO_KEEPALIVE 套接字选项。 |
proxy_ssl_certificate#
指定用于对代理的 HTTPS 服务器进行身份验证的 PEM 格式证书文件。文件名中可以使用变量。
Added in version 1.2.0.
当 proxy_ssl_ntls 启用时,指令接受两个参数而不是一个,分别是证书的签名和加密部分:
location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
proxy_ssl_certificate_key#
指定用于对代理的 HTTPS 服务器进行身份验证的 PEM 格式密钥文件。
可以指定 "engine:name:id" 代替文件,从 OpenSSL 引擎名中加载指定 id 的密钥。文件名中可以使用变量。
Added in version 1.2.0.
当 proxy_ssl_ntls 启用时,指令接受两个参数而不是一个:密钥的签名和加密部分:
location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
proxy_ssl_ciphers#
指定对代理的 HTTPS 服务器的请求启用的密码。密码以 OpenSSL 库理解的格式指定。
完整列表可以使用 "openssl ciphers" 命令查看。
proxy_ssl_conf_command#
在与代理的 HTTPS 服务器建立连接时设置任意 OpenSSL 配置 命令。
重要
使用 OpenSSL 1.0.2 或更高版本时支持该指令。
可以在同一级别指定多个 proxy_ssl_conf_command 指令。只有在当前级别没有定义 proxy_ssl_conf_command 指令时,这些指令才会从上一级配置继承。
小心
请注意,直接配置 OpenSSL 可能导致意外行为。
proxy_ssl_crl#
指定用于 验证 代理的 HTTPS 服务器证书的 PEM 格式撤销证书(CRL)文件。
proxy_ssl_name#
允许覆盖用于 验证 代理的 HTTPS 服务器证书的服务器名称,并在与代理的 HTTPS 服务器建立连接时通过 SNI 传递。
默认情况下,使用 proxy_pass URL 的主机部分。
proxy_ssl_ntls#
Added in version 1.2.0.
启用使用 TongSuo 库的客户端 NTLS 支持。
location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
重要
使用 --with-ntls 构建选项构建代理并链接到启用 NTLS 的 SSL 库
./configure --with-openssl=../Tongsuo-8.3.0 \
--with-openssl-opt=enable-ntls \
--with-ntls
proxy_ssl_password_file#
指定 密钥 的密码短语文件,每个密码短语在单独的行上指定。在加载密钥时依次尝试密码短语。
proxy_ssl_protocols#
|
|
默认值 |
|
http, server, location |
在 1.2.0 版本发生变更: TLSv1.3
参数已添加到默认集合。
启用对代理的 HTTPS 服务器请求的指定协议。
proxy_ssl_server_name#
启用或禁用通过 Server Name Indication TLS 扩展(SNI,RFC 6066) 传递由 proxy_ssl_name 指令设置的服务器名称 在与代理的 HTTPS 服务器建立连接时。
proxy_ssl_session_reuse#
确定是否可以在与代理服务器交互时重用 SSL 会话。如果日志中出现 "SSL3_GET_FINISHED:digest check failed" 错误,请尝试禁用 会话重用。
proxy_ssl_trusted_certificate#
指定用于 验证 代理的 HTTPS 服务器证书的 PEM 格式受信任 CA 证书文件。
proxy_ssl_verify#
启用或禁用对代理的 HTTPS 服务器证书的验证。
proxy_ssl_verify_depth#
设置代理的 HTTPS 服务器证书链的验证深度。
proxy_store#
启用将文件保存到磁盘。
可以使用带有变量的 string
明确设置文件名:
proxy_store /data/www$original_uri;
文件的修改时间根据收到的 "Last-Modified" 响应头字段设置。响应首先被写入临时文件,然后文件被重命名。临时文件和持久存储可以放在不同的文件系统上。但是,请注意,在这种情况下,文件是在两个文件系统之间复制,而不是廉价的重命名操作。因此,建议在任何给定 location 中,保存的文件和由 proxy_temp_path 指令设置的持有临时文件的目录放在同一个文件系统上。
此指令可用于创建静态不变文件的本地副本,例如:
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#
|
|
默认值 |
|
http, server, location |
设置新创建文件和目录的访问权限,例如:
proxy_store_access user:rw group:rw all:r;
如果指定了 group
或 all
访问权限,则可以省略用户权限:
proxy_store_access group:rw all:r;
proxy_temp_file_write_size#
|
|
默认值 |
|
http, server, location |
限制一次写入临时文件的数据大小,当启用将代理服务器的响应缓冲到临时文件时。默认情况下,大小由 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区限制。临时文件的最大大小由 proxy_max_temp_file_size 指令设置。
proxy_temp_path#
|
|
默认值 |
|
http, server, location |
定义存储从代理服务器接收的数据的临时文件的目录。可以在指定目录下使用最多三级子目录层次结构。例如,在以下配置中
proxy_temp_path /spool/angie/proxy_temp 1 2;
一个临时文件可能如下所示:
/spool/angie/proxy_temp/7/45/00000123457
另请参见 proxy_cache_path 指令的 use_temp_path 参数。
内置变量#
http_proxy 模块支持内置变量,可以使用 proxy_set_header 指令来组合头部:
$proxy_host
#
在 proxy_pass 指令中指定的代理服务器名称和端口;
$proxy_port
#
在 proxy_pass 指令中指定的代理服务器端口,或协议的默认端口;
$proxy_add_x_forwarded_for
#
带有附加的 $remote_addr 变量的 "X-Forwarded-For" 客户端请求头字段,以逗号分隔。如果客户端请求头中不存在 "X-Forwarded-For" 字段,则 $proxy_add_x_forwarded_for 变量等于 $remote_addr 变量。