gRPC#
Permite repassar requisições para um servidor gRPC.
Nota
Este módulo requer o módulo HTTP/2.
Ao compilar a partir do código-fonte, o módulo é
compilado por padrão; ele pode ser desabilitado com a opção de
compilação --without-http_grpc_module.
Em pacotes e imagens de nossos repositórios, o
módulo está incluído na compilação. 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 Por padrão, esse valor é avaliado uma única vez, na inicialização da requisição,
antes da seleção de um servidor gRPC. No Angie PRO, a avaliação ocorre após cada
seleção de servidor gRPC (incluindo novas tentativas), de modo que o endereço de
vinculação pode depender do servidor selecionado; por exemplo, por meio da variável
O parâmetro 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 Nota É necessário configurar a tabela de rotas do kernel para interceptar tráfego de rede do servidor gRPC. 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. 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. 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 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 Por padrão, o Angie não repassa os campos de cabeçalho Desabilita o processamento de certos campos de cabeçalho de resposta do servidor gRPC. Os seguintes campos podem ser ignorados: Se não forem desabilitados, o processamento destes campos de cabeçalho tem o seguinte efeito: 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. 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. 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 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 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: ou como um caminho de socket de domínio UNIX: Alternativamente, pode-se usar o esquema Para usar gRPC sobre SSL, deve-se usar o esquema 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. O URI da requisição é passado no campo de pseudocabeçalho Nota Se Permite repassar campos de cabeçalho normalmente desabilitados de um servidor gRPC para um cliente. 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. 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. 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: 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. Especifica o certificado no formato PEM usado para autenticação em um servidor gRPC SSL. O valor é interpretado como em ssl_certificate: um caminho de arquivo ou
o texto PEM do certificado após o prefixo 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: Chaves protegidas por senha (veja grpc_ssl_password_file) não são armazenadas em cache. Exemplo: Padrão — http, server, location Especifica a chave secreta no formato PEM usada para autenticação em um servidor gRPC SSL. O valor, incluindo os prefixos 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 Aviso Com o OpenSSL, a diretiva No LibreSSL, cifras TLS 1.3 podem ser configuradas usando
No BoringSSL, cifras TLS 1.3 não podem ser configuradas de forma alguma. 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.
O comando 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. Especifica um arquivo com certificados revogados (CRL) no formato PEM usado para verificar o certificado do servidor gRPC SSL. 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. 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. Padrão http, server, location Habilita os protocolos especificados para solicitações a um servidor gRPC SSL. 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. Padrão http, server, location Determina se sessões SSL podem ser reutilizadas ao trabalhar com o servidor gRPC. Se o erro Especifica um arquivo com certificados de CA confiáveis no formato PEM usado para verificar o certificado do servidor gRPC SSL. Habilita ou desabilita a verificação do certificado do servidor gRPC SSL. Define a profundidade de verificação na cadeia de certificados do servidor gRPC SSL.Exemplo de configuração#
server {
listen 9000;
http2 on;
location / {
grpc_pass 127.0.0.1:9000;
}
}
Diretivas#
grpc_bind#
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.$upstream_current_addr. Se o valor avaliado estiver vazio, nenhuma
vinculação é feita.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;
transparent for especificado, os processos worker herdam a capacidade CAP_NET_RAW do processo master.grpc_buffer_size#
grpc_connect_timeout#
grpc_connection_drop#
grpc_connection_drop tempo | on | off;grpc_connection_drop off;DELETE da API.
As conexões ociosas no cache não são afetadas.on, as conexões são encerradas imediatamente.grpc_hide_header#
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#
X-Accel-Redirect e X-Accel-Charset.X-Accel-Redirect executa um redirecionamento interno para o URI especificado ou
location nomeado;X-Accel-Charset define o charset desejado de uma resposta.grpc_intercept_errors#
grpc_intercept_errors on | off;grpc_intercept_errors off;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) não são repassadas ao próximo
servidor se uma requisição já tiver sido enviada a um servidor upstream; habilitar
esta opção permite explicitamente tentar novamente tais requisições;offerror, timeout, invalid_headerhttp_500, http_502, http_503, http_504, http_429http_403, http_404grpc_next_upstream_timeout#
grpc_next_upstream_timeout tempo;grpc_next_upstream_timeout 0;0grpc_next_upstream_tries#
grpc_next_upstream_tries número;grpc_next_upstream_tries 0;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 pela mesma
regra de proxy_pass sem URI: exatamente como o cliente o
enviou, a menos que o Angie tenha alterado o URI ou os argumentos da requisição.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#
grpc_read_timeout#
grpc_send_timeout#
grpc_set_header#
grpc_set_header campo valor;grpc_set_header Content-Length $content_length;grpc_set_header Accept-Encoding "";
grpc_socket_keepalive#
grpc_socket_keepalive on | off;grpc_socket_keepalive off;offongrpc_ssl_certificate#
data:. O valor pode conter
variáveis; elas são avaliadas a cada vez que o Angie estabelece uma conexão com
o servidor gRPC SSL, portanto todas as variáveis da requisição estão
disponíveis, incluindo as atribuídas por set. Se o valor avaliado do
certificado estiver vazio, nenhum certificado de cliente é enviado. Para evitar
carregar certificados a cada conexão, habilite
grpc_ssl_certificate_cache.grpc_ssl_certificate_cache#
grpc_ssl_certificate_cache off;grpc_ssl_certificate_cache max=N [inactive=tempo] [valid=tempo];grpc_ssl_certificate_cache off;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íodo valid; cada acesso reinicia este temporizador. O padrão é 10
segundos.valid — define o tempo durante o qual um elemento em cache é
reutilizado sem verificações. O padrão é 60 segundos. Após este período, um
elemento carregado de um arquivo é recarregado apenas se o arquivo tiver
mudado, e uma chave carregada com o prefixo engine: ou store:
é carregada novamente; um elemento especificado com o prefixo data:
permanece válido.off — desativa o cache.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 arquivo | data:chave | engine:nome:id | store:uri;engine: e store:, é interpretado
como em ssl_certificate_key, e as variáveis nele funcionam conforme
descrito em grpc_ssl_certificate. Uma chave protegida por senha é
descriptografada com as senhas de grpc_ssl_password_file.grpc_ssl_ciphers#
openssl ciphers.grpc_ssl_ciphers não configura cifras TLS 1.3;
defina-as com o comando Ciphersuites da diretiva
grpc_ssl_conf_command. A diretiva grpc_ssl_ciphers ignora nomes de
cifras TLS 1.3 em seu valor, portanto esses nomes não restringem as conexões TLS 1.3.
Se o valor consistir apenas em tais nomes, por exemplo
TLS_AES_128_GCM_SHA256, a configuração não é carregada, com
o erro no cipher match.grpc_ssl_ciphers.grpc_ssl_conf_command#
Ciphersuites, que define as cifras TLS 1.3, requer
OpenSSL 1.1.1 ou superior.grpc_ssl_crl#
grpc_ssl_name#
grpc_ssl_name name;grpc_ssl_name `host name de grpc_pass;`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#
grpc_ssl_session_reuse on | off;grpc_ssl_session_reuse on;SSL3_GET_FINISHED:digest check failed aparecer nos logs, tente desabilitar a reutilização de sessão.grpc_ssl_trusted_certificate#
grpc_ssl_verify#
grpc_ssl_verify_depth#