ngx_http_grpc_module 模块

ngx_http_grpc_module 模块允许将请求传递给 gRPC 服务器(1.13.10)。该模块需要 ngx_http_v2_module 模块。

示例配置

server {
    listen 9000 http2;
    location / {
        grpc_pass 127.0.0.1:9000;
    }
}

指令

grpc_bind 指令

语 法:grpc_bind address [transparent ] | off;
默认值:—
上下文:http, server, location

使用可选端口从指定的本地 IP 地址建立到 gRPC 服务器的传出连接。参数值可以包含变量。设置为 off 值,则取消了从先前配置级别继承的 grpc_bind 配置,它允许系统自动分配本地 IP 地址和端口。

transparent 参数允许来自非本地 IP 地址的 gRPC 服务器的传出连接,例如,来自客户端的真实 IP 地址:

grpc_bind $remote_addr transparent;

为了使该参数起作用,通常需要以超级用户权限运行 nginx 工作进程。在 Linux 上不需要 transparent 参数,工作进程从主进程继承 CAP_NET_RAW 功能。还需要配置内核路由表来拦截来自 gRPC 服务器的网络流量。

grpc_buffer_size 指令

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

设置用于读取从GRPC服务器接收的响应的缓冲区大小。一旦接收到响应,就会将其同步传递给客户端。

grpc_connect_timeout 指令

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

定义与 gRPC 服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过 75 秒。

grpc_hide_header 指令

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

默认情况下,nginx 不会将头字段 “Date”、“Server” 和 “X-Accel-...” 从 gRPC 服务器的响应传递给客户端。grpc_hide_header 指令设置不会传递的附加字段。相反,如果需要允许传递字段,则可以使用 grpc_pass_header 指令。

grpc_ignore_headers 指令

语 法:grpc_ignore_headers field ...;
默认值:—
上下文:http, server, location

禁止处理来自 gRPC 服务器的某些响应头字段。可以忽略以下字段:“X-Accel-Redirect” 和 “X-Accel-Charset”。

如果未禁用,则处理这些标头字段具有以下效果:

  • “X-Accel-Redirect” 执行到指定URI的内部重定向;

  • “X-Accel-Charset” 设置响应的所需字符集

grpc_intercept_errors 指令

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

确定代码大于或等于 300 的 gRPC 服务器响应是否应该传递给客户端或被拦截并重定向到 nginx 以使用 error_page 指令进行处理。

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;
上下文:http, server, location

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

  • error  与服务器建立连接、向其传递请求或读取响应头时发生错误;

  • timeout  与服务器建立连接、向其传递请求或读取响应标头时发生超时;

  • invalid_header  服务器返回空或无效的响应;

  • http_500  服务器返回代码为 500 的响应;

  • http_502  服务器返回代码为 502 的响应;

  • http_503  服务器返回代码为 503 的响应;

  • http_504  服务器返回代码为 504 的响应;

  • http_403  服务器返回代码为 403 的响应;

  • http_404  服务器返回代码为 404 的响应;

  • http_429  服务器返回代码为 429 的响应;

  • non_idempotent  通常,如果请求已发送到上游服务器,则使用非幂等方法(POST、LOCK、PATCH)的请求不会传递到下一个服务器;显式启用此选项允许重试此类请求;

  • off  禁止将请求传递到下一个服务器。

应该记住,只有在尚未向客户端发送任何内容的情况下,才能将请求传递到下一个服务器。也就是说,如果在传输响应的过程中发生错误或超时,则无法修复此问题。

该指令还定义了与服务器通信的失败尝试。 错误、超时和 invalid_header 的情况总是被认为是不成功的尝试,即使它们没有在指令中指定。 http_500、http_502、http_503、http_504 和 http_429 的情况只有在指令中指定时才被认为是不成功的尝试。 http_403 和 http_404 的情况永远不会被认为是不成功的尝试。

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

grpc_next_upstream_timeout 指令

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

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

grpc_next_upstream_tries 指令

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

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

grpc_pass 指令

语 法:grpc_pass address;
默认值:—
上下文:location, if in location

设置 gRPC 服务器地址。地址可以指定为域名或 IP 地址,以及端口:

grpc_pass localhost:9000;

或作为 UNIX 域套接字路径:

grpc_pass unix:/tmp/grpc.socket;

或者,可以使用 “grpc://” 方案:

grpc_pass grpc://127.0.0.1:9000;

要通过 SSL 使用 gRPC,应使用 “grpcs://” 方案:

grpc_pass grpcs://127.0.0.1:443;

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

参数值可以包含变量 (1.17.8)。在这种情况下,如果地址被指定为域名,则在描述的服务器组中搜索该名称,如果没有找到,则使用解析器确定。

grpc_pass_header 指令

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

允许将其他禁用的标头字段从 gRPC 服务器传递到客户端。

grpc_read_timeout 指令

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

定义从 gRPC 服务器读取响应的超时时间。超时仅在两次连续读取操作之间设置,而不是针对整个响应的传输。如果 gRPC 服务器在此时间内没有传输任何内容,则连接关闭。

grpc_send_timeout 指令

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

设置将请求传输到 gRPC 服务器的超时时间。 超时仅设置在两次连续的写操作之间,而不是针对整个请求的传输。 如果 gRPC 服务器在此时间内没有收到任何消息,则连接关闭。

grpc_set_header 指令

语 法:grpc_set_header field value;
默认值:grpc_set_header Content-Length $content_length;
上下文:http, server, location

允许重新定义或附加字段到传递给 gRPC 服务器的请求标头。 该值可以包含文本、变量及其组合。 当且仅当当前级别上没有定义 grpc_set_header 指令时,这些指令才从先前的配置级别继承。

如果标头字段的值为空字符串,则该字段将不会传递给 gRPC 服务器:

grpc_set_header Accept-Encoding "";

grpc_socket_keepalive 指令

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

该指令出现在 1.15.6 版中。

为到 gRPC 服务器的传出连接配置“TCP keepalive”行为。 默认情况下,操作系统的设置对套接字有效。 如果指令设置为值“on”,则为套接字打开 SO_KEEPALIVE 套接字选项。

grpc_ssl_certificate 指令

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

指定带有 PEM 格式证书的文件,用于对 gRPC SSL 服务器进行身份验证。

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

grpc_ssl_certificate_key 指令

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

指定一个带有用于对 gRPC SSL 服务器进行身份验证的 PEM 格式的密钥的文件。

可以指定值 engine:name:id 而不是文件,它从 OpenSSL 引擎名称加载具有指定 id 的密钥。

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

grpc_ssl_ciphers 指令

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

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

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

grpc_ssl_conf_command 指令

语 法:grpc_ssl_conf_command command;
默认值:—
上下文:http, server, location

该指令出现在 1.19.4 版中。

在与 gRPC SSL 服务器建立连接时设置任意 OpenSSL 配置命令。

使用 OpenSSL 1.0.2 或更高版本时支持该指令。

可以在同一级别指定多个 grpc_ssl_conf_command 指令。 当且仅当当前级别上没有定义 grpc_ssl_conf_command 指令时,这些指令才从先前的配置级别继承。

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

grpc_ssl_crl 指令

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

指定带有吊销证书 (CRL) 的 PEM 格式文件,用于验证 gRPC SSL 服务器的证书。

grpc_ssl_name 指令

语 法:grpc_ssl_name name;
默认值:grpc_ssl_name host from grpc_pass;
上下文:http, server, location

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

默认情况下,使用来自 grpc_pass 的主机部分。

grpc_ssl_password_file 指令

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

指定一个带有密钥密码的文件,其中每个密码都在单独的行中指定。加载密钥时依次尝试密码短语。

grpc_ssl_protocols 指令

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

为对 gRPC SSL 服务器的请求启用指定的协议。

grpc_ssl_server_name 指令

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

在与 gRPC SSL 服务器建立连接时,启用或禁用通过 TLS 服务器名称指示扩展(SNI,RFC 6066)传递服务器名称。

grpc_ssl_session_reuse 指令

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

确定在使用 gRPC 服务器时是否可以重用 SSL 会话。如果日志中出现错误 “SSL3_GET_FINISHED:digest check failed”,请尝试禁用会话重用。

grpc_ssl_trusted_certificate 指令

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

指定带有可信 CA 证书的 PEM 格式的文件,用于验证 gRPC SSL 服务器的证书。

grpc_ssl_verify 指令

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

启用或禁用 gRPC SSL 服务器证书的验证。

grpc_ssl_verify_depth 指令

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

设置 gRPC SSL 服务器证书链中的验证深度。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号