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 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 size; 默认值:grpc_buffer_size 4k|8k; 上下文:http, server, location
设置用于读取从GRPC服务器接收的响应的缓冲区大小。一旦接收到响应,就会将其同步传递给客户端。
语 法:grpc_connect_timeout time; 默认值:grpc_connect_timeout 60s; 上下文:http, server, location
定义与 gRPC 服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过 75 秒。
语 法:grpc_hide_header field; 默认值:— 上下文:http, server, location
默认情况下,nginx 不会将头字段 “Date”、“Server” 和 “X-Accel-...” 从 gRPC 服务器的响应传递给客户端。grpc_hide_header 指令设置不会传递的附加字段。相反,如果需要允许传递字段,则可以使用 grpc_pass_header 指令。
语 法:grpc_ignore_headers field ...; 默认值:— 上下文:http, server, location
禁止处理来自 gRPC 服务器的某些响应头字段。可以忽略以下字段:“X-Accel-Redirect” 和 “X-Accel-Charset”。
如果未禁用,则处理这些标头字段具有以下效果:
“X-Accel-Redirect” 执行到指定URI的内部重定向;
“X-Accel-Charset” 设置响应的所需字符集
语 法:grpc_intercept_errors on | off; 默认值:grpc_intercept_errors off; 上下文:http, server, location
确定代码大于或等于 300 的 gRPC 服务器响应是否应该传递给客户端或被拦截并重定向到 nginx 以使用 error_page 指令进行处理。
语 法: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 time; 默认值:grpc_next_upstream_timeout 0; 上下文:http, server, location
限制可以将请求传递到下一个服务器的时间。0 值关闭此限制。
语 法:grpc_next_upstream_tries number; 默认值:grpc_next_upstream_tries 0; 上下文:http, server, location
限制将请求传递到下一个服务器的可能尝试次数。0 值关闭此限制。
语 法: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 field; 默认值:— 上下文:http, server, location
允许将其他禁用的标头字段从 gRPC 服务器传递到客户端。
语 法:grpc_read_timeout time; 默认值:grpc_read_timeout 60s; 上下文:http, server, location
定义从 gRPC 服务器读取响应的超时时间。超时仅在两次连续读取操作之间设置,而不是针对整个响应的传输。如果 gRPC 服务器在此时间内没有传输任何内容,则连接关闭。
语 法:grpc_send_timeout time; 默认值:grpc_send_timeout 60s; 上下文:http, server, location
设置将请求传输到 gRPC 服务器的超时时间。 超时仅设置在两次连续的写操作之间,而不是针对整个请求的传输。 如果 gRPC 服务器在此时间内没有收到任何消息,则连接关闭。
语 法: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 on | off; 默认值:grpc_socket_keepalive off; 上下文:http, server, location
该指令出现在 1.15.6 版中。
为到 gRPC 服务器的传出连接配置“TCP keepalive”行为。 默认情况下,操作系统的设置对套接字有效。 如果指令设置为值“on”,则为套接字打开 SO_KEEPALIVE 套接字选项。
语 法:grpc_ssl_certificate file; 默认值:— 上下文:http, server, location
指定带有 PEM 格式证书的文件,用于对 gRPC SSL 服务器进行身份验证。
从 1.21.0 版本开始,可以在文件名中使用变量。
语 法:grpc_ssl_certificate_key file; 默认值:— 上下文:http, server, location
指定一个带有用于对 gRPC SSL 服务器进行身份验证的 PEM 格式的密钥的文件。
可以指定值 engine:name:id 而不是文件,它从 OpenSSL 引擎名称加载具有指定 id 的密钥。
从 1.21.0 版本开始,可以在文件名中使用变量。
语 法:grpc_ssl_ciphers ciphers; 默认值:grpc_ssl_ciphers DEFAULT; 上下文:http, server, location
为对 gRPC SSL 服务器的请求指定启用的密码。密码以 OpenSSL 库理解的格式指定。
可以使用“openssl ciphers”命令查看完整列表。
语 法: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 file; 默认值:— 上下文:http, server, location
指定带有吊销证书 (CRL) 的 PEM 格式文件,用于验证 gRPC SSL 服务器的证书。
语 法: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 file; 默认值:— 上下文:http, server, location
指定一个带有密钥密码的文件,其中每个密码都在单独的行中指定。加载密钥时依次尝试密码短语。
语 法: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 on | off; 默认值:grpc_ssl_server_name off; 上下文:http, server, location
在与 gRPC SSL 服务器建立连接时,启用或禁用通过 TLS 服务器名称指示扩展(SNI,RFC 6066)传递服务器名称。
语 法: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 file; 默认值:— 上下文:http, server, location
指定带有可信 CA 证书的 PEM 格式的文件,用于验证 gRPC SSL 服务器的证书。
语 法:grpc_ssl_verify on | off; 默认值:grpc_ssl_verify off; 上下文:http, server, location
启用或禁用 gRPC SSL 服务器证书的验证。
语 法:grpc_ssl_verify_depth number; 默认值:grpc_ssl_verify_depth 1; 上下文:http, server, location
设置 gRPC SSL 服务器证书链中的验证深度。