gRPC#
Permite repassar requisições para um servidor gRPC.
Nota
Este módulo requer o módulo HTTP/2.
Exemplo de configuração#
server {
listen 9000;
http2 on;
location / {
grpc_pass 127.0.0.1:9000;
}
}
Diretivas#
grpc_bind#
Faz com que conexões de saída para um servidor gRPC se originem do endereço IP local especificado com uma porta opcional. O valor do parâmetro pode conter variáveis. O valor especial off cancela o efeito da diretiva grpc_bind herdada do nível de configuração anterior, permitindo que o sistema atribua automaticamente o endereço IP e a porta locais.
O parâmetro transparent permite que conexões de saída para um servidor gRPC se originem de um endereço IP não local, por exemplo, do endereço IP real de um cliente:
grpc_bind $remote_addr transparent;
Para que este parâmetro funcione, geralmente é necessário executar processos worker do Angie com privilégios de superusuário. No Linux não é necessário, pois, se o parâmetro transparent for especificado, os processos worker herdam a capacidade CAP_NET_RAW do processo master.
Nota
É necessário configurar a tabela de rotas do kernel para interceptar tráfego de rede do servidor gRPC.
grpc_buffer_size#
Define o tamanho do buffer usado para ler a primeira parte da resposta recebida do servidor gRPC. A resposta é repassada ao cliente de forma síncrona, assim que é recebida.
grpc_connect_timeout#
Define um tempo limite para estabelecer conexão com um servidor gRPC. Deve-se notar que este tempo limite geralmente não pode exceder 75 segundos.
Nota
Este timeout não rege as conexões ociosas: por quanto tempo uma conexão já aberta é mantida para reutilização é definido por keepalive_timeout em um bloco upstream cujas conexões são armazenadas em cache com keepalive.
grpc_connection_drop#
| |
Padrão |
|
http, server, location |
Habilita a finalização de todas as conexões ativas com o servidor proxy após ele ter sido removido do grupo ou marcado como permanentemente indisponível por um processo reresolve ou pelo comando DELETE da API.
As conexões ociosas no cache não são afetadas.
Uma conexão é finalizada quando o próximo evento de leitura ou escrita é processado, seja pelo cliente ou pelo servidor proxy.
Definir tempo habilita um timeout de finalização de conexão; com on, as conexões são encerradas imediatamente.
grpc_hide_header#
Por padrão, o Angie não repassa os campos de cabeçalho Date, Server e X-Accel-... da resposta de um servidor gRPC para o cliente. A diretiva grpc_hide_header define campos adicionais que não serão repassados. Se, pelo contrário, for necessário permitir o repasse de campos, pode-se usar a diretiva grpc_pass_header.
grpc_ignore_headers#
Desabilita o processamento de certos campos de cabeçalho de resposta do servidor gRPC. Os seguintes campos podem ser ignorados: X-Accel-Redirect e X-Accel-Charset.
Se não forem desabilitados, o processamento destes campos de cabeçalho tem o seguinte efeito:
X-Accel-Redirectexecuta um redirecionamento interno para o URI especificado;X-Accel-Charsetdefine o charset desejado de uma resposta.
grpc_intercept_errors#
| |
Padrão |
|
http, server, location |
Determina se respostas do servidor gRPC com códigos maiores ou iguais a 300 devem ser repassadas ao cliente ou interceptadas e redirecionadas para o Angie para processamento com a diretiva error_page.
grpc_next_upstream#
| |
Padrão |
|
http, server, location |
Especifica em quais casos uma requisição deve ser repassada para o próximo servidor no grupo upstream:
| ocorreu um erro ao estabelecer conexão com o servidor, repassar a requisição ou ler o cabeçalho da resposta; |
| ocorreu timeout ao estabelecer conexão com o servidor, repassar a requisição ou ler o cabeçalho da resposta; |
| o servidor retornou uma resposta vazia ou inválida; |
| o servidor retornou resposta com código 500; |
| o servidor retornou resposta com código 502; |
| o servidor retornou resposta com código 503; |
| o servidor retornou resposta com código 504; |
| o servidor retornou resposta com código 403; |
| o servidor retornou resposta com código 404; |
| o servidor retornou resposta com código 429; |
| normalmente, requisições com método não idempotente
( |
| desabilita o repasse da requisição ao próximo servidor. |
Nota
Deve-se ter em mente que repassar uma requisição ao próximo servidor só é possível se nada ainda tiver sido enviado ao cliente. Ou seja, se um erro ou timeout ocorrer no meio da transferência da resposta, não é possível corrigir.
A diretiva também define o que é considerado uma tentativa malsucedida de comunicação com um servidor.
| sempre considerados tentativas malsucedidas, mesmo que não especificados na diretiva |
| considerados tentativas malsucedidas apenas se especificados na diretiva |
| nunca considerados tentativas malsucedidas |
O repasse de uma requisição ao próximo servidor pode ser limitado pelo número de tentativas e pelo tempo.
grpc_next_upstream_timeout#
| |
Padrão |
|
http, server, location |
Limita o tempo durante o qual uma requisição pode ser repassada para o próximo servidor.
| desativa esta limitação |
grpc_next_upstream_tries#
| |
Padrão |
|
http, server, location |
Limita o número de tentativas possíveis para repassar uma requisição ao próximo servidor.
| desativa esta limitação |
grpc_pass#
Define o endereço do servidor gRPC. O endereço pode ser especificado como um nome de domínio ou endereço IP, e uma porta:
grpc_pass localhost:9000;
ou como um caminho de socket de domínio UNIX:
grpc_pass unix:/tmp/grpc.socket;
Alternativamente, pode-se usar o esquema grpc://:
grpc_pass grpc://127.0.0.1:9000;
Para usar gRPC sobre SSL, deve-se usar o esquema grpcs://:
grpc_pass grpcs://127.0.0.1:443;
Se um nome de domínio resolver para vários endereços, todos serão usados em round-robin. Além disso, um endereço pode ser especificado como um grupo de servidores.
O valor do parâmetro pode conter variáveis. Neste caso, se um endereço for especificado como nome de domínio, o nome será procurado entre os grupos de servidores descritos e, se não for encontrado, será determinado usando um resolver.
Nota
Se grpc_pass for especificado em um location com uma barra final no prefixo
(por exemplo, location /name/),
e a diretiva auto_redirect estiver definida como default,
requisições sem barra final serão redirecionadas (/name -> /name/).
grpc_pass_header#
Permite repassar campos de cabeçalho normalmente desabilitados de um servidor gRPC para um cliente.
grpc_read_timeout#
Define um tempo limite para leitura de resposta do servidor gRPC. O tempo limite é definido apenas entre duas operações de leitura sucessivas, não para a transmissão da resposta inteira. Se o servidor gRPC não transmitir nada dentro desse tempo, a conexão é fechada.
grpc_send_timeout#
Define um tempo limite para transmitir uma requisição ao servidor gRPC. O tempo limite é definido apenas entre duas operações de escrita sucessivas, não para a transmissão da requisição inteira. Se o servidor gRPC não receber nada dentro desse tempo, a conexão é fechada.
grpc_set_header#
| |
Padrão |
|
http, server, location |
Permite redefinir ou adicionar campos ao cabeçalho da requisição repassado para o servidor gRPC. O valor pode conter texto, variáveis e suas combinações. Essas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas grpc_set_header definidas no nível atual.
Se o valor de um campo de cabeçalho for uma string vazia, então esse campo não será repassado ao servidor gRPC:
grpc_set_header Accept-Encoding "";
grpc_socket_keepalive#
| |
Padrão |
|
http, server, location |
Configura o comportamento de "TCP keepalive" para conexões de saída a um servidor gRPC.
| Por padrão, as configurações do sistema operacional estão em efeito para o socket. |
| A opção de socket SO_KEEPALIVE é ativada para o socket. |
grpc_ssl_certificate#
Especifica um arquivo com o certificado no formato PEM usado para autenticação em um servidor gRPC SSL. Variáveis podem ser usadas no nome do arquivo.
grpc_ssl_certificate_cache#
| |
Padrão |
|
http, server, location |
Define um cache que armazena certificados SSL e chaves secretas especificados usando variáveis.
A diretiva suporta os seguintes parâmetros:
max— define o número máximo de elementos no cache. Quando o cache está cheio, os elementos menos usados recentemente (LRU) são removidos.inactive— define o tempo após o qual um elemento é removido se não tiver sido acessado durante esse tempo, mesmo que ainda esteja dentro de seu períodovalid; cada acesso reinicia este temporizador. O padrão é 10 segundos.valid— define o tempo durante o qual um elemento em cache é considerado válido e pode ser reutilizado. O padrão é 60 segundos. Após esse período, os certificados são recarregados ou revalidados.off— desativa o cache.
Exemplo:
grpc_ssl_certificate $grpc_ssl_server_name.crt;
grpc_ssl_certificate_key $grpc_ssl_server_name.key;
grpc_ssl_certificate_cache max=1000 inactive=20s valid=1m;
grpc_ssl_certificate_key#
Especifica um arquivo com a chave secreta no formato PEM usada para autenticação em um servidor gRPC SSL.
O valor engine:nome:id pode ser especificado em vez do arquivo, carregando uma chave secreta com o id especificado do motor OpenSSL nome.
O valor store:esquema:id pode ser especificado em vez do arquivo, sendo usado para carregar uma chave secreta com o id especificado e o URI esquema registrado no provedor OpenSSL, como pkcs11.
Variáveis podem ser usadas no nome do arquivo.
grpc_ssl_ciphers#
Especifica as cifras habilitadas para requisições a um servidor gRPC SSL. As cifras são especificadas no formato compreendido pela biblioteca OpenSSL.
A lista de cifras depende da versão do OpenSSL instalada.
A lista completa pode ser visualizada usando o comando openssl ciphers.
Aviso
A diretiva grpc_ssl_ciphers não configura cifras para TLS
1.3 ao usar OpenSSL. Para ajustar cifras TLS 1.3 com OpenSSL, use a
diretiva grpc_ssl_conf_command, que foi adicionada para suportar
configuração SSL avançada.
No LibreSSL, cifras TLS 1.3 podem ser configuradas usando
grpc_ssl_ciphers.No BoringSSL, cifras TLS 1.3 não podem ser configuradas de forma alguma.
grpc_ssl_conf_command#
Define comandos de configuração arbitrários do OpenSSL ao estabelecer uma conexão com o servidor gRPC SSL.
Nota
A diretiva é suportada ao usar OpenSSL 1.0.2 ou superior.
Para configurar cifras TLS 1.3 com OpenSSL, use o comando ciphersuites.
Várias diretivas grpc_ssl_conf_command podem ser especificadas no mesmo nível. Essas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas grpc_ssl_conf_command definidas no nível atual.
Aviso
Note que configurar o OpenSSL diretamente pode resultar em comportamento inesperado.
grpc_ssl_crl#
Especifica um arquivo com certificados revogados (CRL) no formato PEM usado para verificar o certificado do servidor gRPC SSL.
grpc_ssl_name#
| |
Padrão |
|
http, server, location |
Permite sobrescrever o nome do servidor usado para verificar o certificado do servidor gRPC SSL e para ser passado via SNI ao estabelecer uma conexão com o servidor gRPC SSL.
O nome do servidor também pode ser especificado com variáveis.
Por padrão, o host name do grpc_pass é usado.
grpc_ssl_password_file#
Especifica um arquivo com senhas para chaves secretas, onde cada senha é especificada em uma linha separada. As senhas são testadas em sequência ao carregar a chave.
grpc_ssl_protocols#
| |
Padrão |
|
http, server, location |
Habilita os protocolos especificados para solicitações a um servidor gRPC SSL.
grpc_ssl_server_name#
Habilita ou desabilita o envio do nome do servidor definido pela diretiva grpc_ssl_name via a extensão TLS Server Name Indication (SNI, RFC 6066) ao estabelecer uma conexão com o servidor gRPC SSL.
grpc_ssl_session_reuse#
| |
Padrão |
|
http, server, location |
Determina se sessões SSL podem ser reutilizadas ao trabalhar com o servidor gRPC. Se os erros "SSL3_GET_FINISHED:digest check failed" aparecerem nos logs, tente desabilitar a reutilização de sessão.
grpc_ssl_trusted_certificate#
Especifica um arquivo com certificados de CA confiáveis no formato PEM usado para verificar o certificado do servidor gRPC SSL.
grpc_ssl_verify#
Habilita ou desabilita a verificação do certificado do servidor gRPC SSL.
grpc_ssl_verify_depth#
Define a profundidade de verificação na cadeia de certificados do servidor gRPC SSL.