gRPC#
允许将请求传递到 gRPC 服务器。
备注
此模块需要 HTTP/2 模块。
当 从源代码构建 时,该模块默认会被构建;可以通过
构建选项 --without-http_grpc_module 禁用它。
在来自 我们的软件仓库 的包和镜像中,该模块已包含在
构建中。 使到 gRPC 服务器的出站连接从指定的本地 IP 地址(可选端口)发起。参数值可以包含变量。特殊值 默认情况下,该值在请求初始化时求值一次,即在选择 gRPC 服务器之前。在 Angie PRO 中,每次选择 gRPC 服务器之后(包括重试)都会重新求值,因此绑定地址可以取决于所选服务器,例如通过 为使此参数生效,通常需要以 超级用户 权限运行 Angie 工作进程。在 Linux 上不需要这样做,因为如果指定了 备注 需要配置内核路由表以拦截来自 gRPC 服务器的网络流量。 设置用于读取从 gRPC 服务器接收的响应的第一部分的缓冲区大小。响应一旦接收到就会同步传递给客户端。 定义与 gRPC 服务器建立连接的超时时间。需要注意的是,此超时时间通常不能超过 75 秒。 备注 此超时时间不适用于空闲连接:已打开的连接保留多久以供复用,
由 upstream 块中的 keepalive_timeout 设置,
该块需通过 keepalive 缓存连接。 启用在代理服务器从组中移除或被 重新解析 进程或 API 当为客户端或代理服务器处理下一个读或写事件时,连接将被终止。 设置 time 启用连接终止 超时;
设置为 默认情况下,Angie 不会将 gRPC 服务器响应中的头字段 禁用对来自 gRPC 服务器的某些响应头字段的处理。可以忽略以下字段: 如果未禁用,处理这些头字段将产生以下效果: 确定代码大于或等于 300 的 gRPC 服务器响应应该传递给客户端,还是被拦截并重定向到 Angie 使用 error_page 指令进行处理。 默认值 http, server, location 指定在哪些情况下应将请求传递给 upstream 组中的下一个服务器: 与服务器建立连接、向其传递请求或读取响应头时发生错误; 与服务器建立连接、向其传递请求或读取响应头时发生超时; 服务器返回空响应或无效响应; 服务器返回代码为 500 的响应; 服务器返回代码为 502 的响应; 服务器返回代码为 503 的响应; 服务器返回代码为 504 的响应; 服务器返回代码为 403 的响应; 服务器返回代码为 404 的响应; 服务器返回代码为 429 的响应; 通常,使用 非幂等 方法
( 禁用将请求传递给下一个服务器。 备注 应该记住,只有在尚未向客户端发送任何内容时,才可能将请求传递给下一个服务器。也就是说,如果在传输响应的过程中发生错误或超时,则无法修复此问题。 该指令还定义了什么被视为与服务器通信的 不成功尝试。 始终被视为不成功尝试,即使它们未在指令中指定 仅在指令中指定时才被视为不成功尝试 从不被视为不成功尝试 限制可以将请求传递给 下一个服务器 的时间。 关闭此限制 限制将请求传递到 下一个 服务器的可能尝试次数。 关闭此限制 设置 gRPC 服务器地址。地址可以指定为域名或 IP 地址,以及端口: 或作为 UNIX 域套接字路径: 或者,可以使用 要使用基于 SSL 的 gRPC,应使用 如果域名解析为多个地址,则所有地址都将以轮询方式使用。此外,地址可以指定为 服务器组。 参数值可以包含变量。在这种情况下,如果地址指定为域名,则在所描述的服务器组中搜索该名称,如果未找到,则使用 解析器 确定。 请求 URI 通过 备注 如果在带有前缀尾部斜杠的 允许将 原本禁用的 头字段从 gRPC 服务器传递到客户端。 定义从 gRPC 服务器读取响应的超时时间。超时仅在两次连续的读取操作之间设置,而不是针对整个响应的传输。如果 gRPC 服务器在此时间内未传输任何内容,则连接将关闭。 设置向 gRPC 服务器传输请求的超时时间。超时仅在两次连续的写操作之间设置,而不是针对整个请求的传输。如果 gRPC 服务器在此时间内未接收到任何内容,则连接将关闭。 默认值 http, server, location 允许重新定义或追加字段到 传递 给 gRPC 服务器的请求头。值可以包含文本、变量及其组合。当且仅当当前级别未定义 grpc_set_header 指令时,这些指令才从上一级配置继承。 如果头字段的值为空字符串,则该字段将不会传递给 gRPC 服务器: 配置到 gRPC 服务器的出站连接的"TCP keepalive"行为。 默认情况下,套接字使用操作系统的设置。 为套接字启用 SO_KEEPALIVE 套接字选项。 指定用于向gRPC SSL 服务器进行身份验证的 PEM 格式证书。 该值的解释方式与 ssl_certificate 相同:可以是文件路径,也可以是 默认值 http, server, location 定义一个缓存,用于存储使用变量指定的 SSL 证书 和 密钥。 该指令支持以下参数: 受密码短语保护的密钥(参见 grpc_ssl_password_file)不会被缓存。 示例: 默认值 — http, server, location 指定用于向gRPC SSL 服务器进行身份验证的 PEM 格式密钥。 该值(包括 指定向 gRPC SSL 服务器发送请求时启用的密码套件。密码套件以 OpenSSL 库理解的格式指定。 密码套件列表取决于安装的 OpenSSL 版本。
可以使用 警告 使用 OpenSSL 时, 在 LibreSSL 中,TLS 1.3 密码套件 可以 使用 在 BoringSSL 中,TLS 1.3 密码套件完全无法配置。 在与 gRPC SSL 服务器建立连接时设置任意 OpenSSL 配置 命令。 备注 使用 OpenSSL 1.0.2 或更高版本时支持该指令。
要使用 OpenSSL 配置 TLS 1.3 密码套件,请使用 可以在同一级别指定多个 grpc_ssl_conf_command 指令。当且仅当当前级别未定义 grpc_ssl_conf_command 指令时,这些指令才会从上一级配置继承。 警告 请注意,直接配置 OpenSSL 可能会导致意外行为。 指定一个包含 PEM 格式吊销证书 (CRL) 的文件,用于 验证 gRPC SSL 服务器的证书。 允许覆盖用于 验证 gRPC SSL 服务器证书的服务器名称,以及在与 gRPC SSL 服务器建立连接时 通过 SNI 传递 的服务器名称。 服务器名称也可以用变量指定。 默认情况下,使用 grpc_pass 中的主机名。 指定一个包含 密钥 密码短语的文件,每个密码短语单独占一行。加载密钥时会依次尝试这些密码短语。 默认值 http, server, location 为向 gRPC SSL 服务器发送的请求启用指定的协议。 启用或禁用在与 gRPC SSL 服务器建立连接时,通过 服务器名称指示 TLS 扩展 (SNI, RFC 6066) 传递由 grpc_ssl_name 指令设置的服务器名称。 确定在与 gRPC 服务器通信时是否可以重用 SSL 会话。如果日志中出现 指定一个包含 PEM 格式受信任 CA 证书的文件,用于 验证 gRPC SSL 服务器的证书。 启用或禁用对 gRPC SSL 服务器证书的验证。 设置 gRPC SSL 服务器证书链的验证深度。配置示例#
server {
listen 9000;
http2 on;
location / {
grpc_pass 127.0.0.1:9000;
}
}
指令#
grpc_bind#
off 取消从上一配置级别继承的 grpc_bind 指令的效果,允许系统自动分配本地 IP 地址和端口。$upstream_current_addr 变量。如果求得的值为空,则不进行绑定。transparent 参数允许到 gRPC 服务器的出站连接从非本地 IP 地址发起,例如从客户端的真实 IP 地址:grpc_bind $remote_addr transparent;
transparent 参数,工作进程会从主进程继承 CAP_NET_RAW 能力。grpc_buffer_size#
grpc_connect_timeout#
grpc_connection_drop#
DELETE 命令标记为永久不可用后,终止到该服务器的所有活动连接。
缓存 中的空闲连接不受影响。on 时,连接立即断开。grpc_hide_header#
Date、Server 和 X-Accel-... 传递给客户端。grpc_hide_header 指令设置不会被传递的附加字段。相反,如果需要允许传递字段,可以使用 grpc_pass_header 指令。grpc_ignore_headers#
X-Accel-Redirect 和 X-Accel-Charset。X-Accel-Redirect 执行到指定 URI 或
命名 location 的 内部重定向;X-Accel-Charset 设置响应所需的 字符集。grpc_intercept_errors#
grpc_next_upstream#
grpc_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;grpc_next_upstream error timeout;errortimeoutinvalid_headerhttp_500http_502http_503http_504http_403http_404http_429non_idempotentPOST、LOCK、PATCH)的请求如果已发送到上游服务器,
则不会传递给下一个服务器;启用此选项明确允许重试此类请求;offerror、timeout、invalid_headerhttp_500、http_502、http_503、http_504、http_429http_403、http_404grpc_next_upstream_timeout#
0grpc_next_upstream_tries#
0grpc_pass#
grpc_pass localhost:9000;
grpc_pass unix:/tmp/grpc.socket;
grpc:// 方案:grpc_pass grpc://127.0.0.1:9000;
grpcs:// 方案:grpc_pass grpcs://127.0.0.1:443;
:path 伪标头字段传递,规则与 不带 URI 的 proxy_pass
相同:除非 Angie 更改了请求的 URI 或参数,否则按客户端发送的原样传递。location 中指定 grpc_pass
(例如, location /name/),
并且 auto_redirect 指令设置为 default,
则不带尾部斜杠的请求将被重定向(/name -> /name/)。grpc_pass_header#
grpc_read_timeout#
grpc_send_timeout#
grpc_set_header#
grpc_set_header field value;grpc_set_header Content-Length $content_length;grpc_set_header Accept-Encoding "";
grpc_socket_keepalive#
offongrpc_ssl_certificate#
data: 前缀之后的证书 PEM 文本。值中可以包含变量;每次 Angie 与gRPC SSL 服务器建立连接时都会对其求值,因此请求的所有变量均可使用,包括由 set 赋值的变量。如果求值后的证书值为空,则不发送客户端证书。为避免每个连接都加载证书,请启用 grpc_ssl_certificate_cache。grpc_ssl_certificate_cache#
grpc_ssl_certificate_cache off;grpc_ssl_certificate_cache max=N [inactive=time] [valid=time];grpc_ssl_certificate_cache off;max — 设置缓存中的最大元素数。当缓存溢出时,将删除最近最少使用 (LRU) 的元素。inactive — 定义元素在此时间内未被访问即会被删除的时长,即使其仍处于 valid 周期内;每次访问都会重置此计时器。默认为 10 秒。valid — 定义缓存元素无需检查即可重用的时长。默认为 60 秒。此时间过后,从文件加载的元素仅在文件已更改时才会重新加载,而通过 engine: 或 store: 前缀加载的密钥会再次加载;使用 data: 前缀指定的元素保持有效。off — 禁用缓存。grpc_ssl_certificate /etc/angie/ssl/$host.crt;
grpc_ssl_certificate_key /etc/angie/ssl/$host.key;
grpc_ssl_certificate_cache max=1000 inactive=20s valid=1m;
grpc_ssl_certificate_key#
grpc_ssl_certificate_key file | data:key | engine:name:id | store:uri;engine: 和 store: 前缀)的解释方式与 ssl_certificate_key 相同,其中的变量按 grpc_ssl_certificate 中所述的方式工作。受密码短语保护的密钥使用 grpc_ssl_password_file 中的密码短语解密。grpc_ssl_ciphers#
openssl ciphers 命令查看完整列表。grpc_ssl_ciphers 指令 不 配置 TLS 1.3 的密码套件。
要使用 OpenSSL 调整 TLS 1.3 密码套件,请使用 grpc_ssl_conf_command 指令,
该指令是为支持高级 SSL 配置而添加的。grpc_ssl_ciphers 配置。grpc_ssl_conf_command#
ciphersuites 命令。grpc_ssl_crl#
grpc_ssl_name#
grpc_ssl_password_file#
grpc_ssl_protocols#
grpc_ssl_protocols SSLv2 | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3 ...;grpc_ssl_protocols TLSv1.2 TLSv1.3;grpc_ssl_server_name#
grpc_ssl_session_reuse#
SSL3_GET_FINISHED:digest check failed 错误,请尝试禁用会话重用。grpc_ssl_trusted_certificate#
grpc_ssl_verify#
grpc_ssl_verify_depth#