gRPC#

Permite pasar solicitudes a un servidor gRPC.

Nota

Este módulo requiere el módulo HTTP2.

Ejemplo de configuración#

server {
    listen 9000;

    http2 on;

    location / {
        grpc_pass 127.0.0.1:9000;
    }
}

Directivas#

grpc_bind#

Sintaxis

grpc_bind address [transparent] | off;

Valor predeterminado

Contexto

http, server, location

Hace que las conexiones salientes a un servidor gRPC se originen desde la dirección IP local especificada con un puerto opcional. El valor del parámetro puede contener variables. El valor especial off cancela el efecto de la directiva grpc_bind heredada del nivel de configuración anterior, lo que permite al sistema asignar automáticamente la dirección IP local y el puerto.

El parámetro transparent permite que las conexiones salientes a un servidor gRPC se originen desde una dirección IP no local, por ejemplo, desde una dirección IP real de un cliente:

grpc_bind $remote_addr transparent;

Para que este parámetro funcione, generalmente es necesario ejecutar los procesos de trabajo de Angie con los privilegios de superusuario. En Linux no es necesario, ya que si se especifica el parámetro transparent, los procesos de trabajo heredan la capacidad CAP_NET_RAW del proceso maestro.

Nota

Es necesario configurar la tabla de enrutamiento del kernel para interceptar el tráfico de red desde el servidor gRPC.

grpc_buffer_size#

Sintaxis

grpc_buffer_size size;

Valor predeterminado

grpc_buffer_size 4k|8k;

Contexto

http, server, location

Configura el tamaño del búfer utilizado para leer la primera parte de la respuesta recibida desde el servidor gRPC. La respuesta se pasa al cliente de forma sincrónica, tan pronto como se recibe.

grpc_connect_timeout#

Sintaxis

grpc_connect_timeout time;

Valor predeterminado

grpc_connect_timeout 60s;

Contexto

http, server, location

Define un tiempo de espera para establecer una conexión con un servidor gRPC. Cabe destacar que este tiempo de espera normalmente no puede exceder los 75 segundos.

grpc_connection_drop#

Sintaxis

grpc_connection_drop time | on | off;

Valor predeterminado

grpc_connection_drop off;

Contexto

http, server, location

Habilita la terminación de todas las conexiones al servidor proxy después de que haya sido eliminado del grupo o marcado como permanentemente no disponible por un proceso reresolve o el comando API DELETE.

Una conexión se termina cuando se procesa el siguiente evento de lectura o escritura para el cliente o el servidor proxy.

Establecer time habilita un tiempo de espera para la terminación de la conexión; con on establecido, las conexiones se descartan inmediatamente.

grpc_hide_header#

Sintaxis

grpc_hide_header field;

Valor predeterminado

Contexto

http, server, location

Por defecto, Angie no pasa los campos de cabecera Date, Server y X-Accel-... de la respuesta de un servidor gRPC a un cliente. La directiva grpc_hide_header establece campos adicionales que no se pasarán. Si, por el contrario, se necesita permitir el paso de campos, se puede usar la directiva grpc_pass_header.

grpc_ignore_headers#

Sintaxis

grpc_ignore_headers field ...;

Valor predeterminado

Contexto

http, server, location

Deshabilita el procesamiento de ciertos campos de cabecera de respuesta del servidor gRPC. Los siguientes campos pueden ser ignorados: X-Accel-Redirect y X-Accel-Charset.

Si no se deshabilita, el procesamiento de estos campos de cabecera tiene el siguiente efecto:

  • X-Accel-Redirect realiza una redirección interna a un URI;

  • X-Accel-Charset establece el conjunto de caracteres deseado de la respuesta.

grpc_intercept_errors#

Sintaxis

grpc_intercept_errors on | off;

Valor predeterminado

grpc_intercept_errors off;

Contexto

http, server, location

Determina si las respuestas gRPC con códigos mayores que o iguales a 300 deben pasarse a un cliente o ser interceptadas y redirigidas a Angie para su procesamiento con la directiva error_page.

grpc_next_upstream#

Sintaxis

grpc_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;

Valor predeterminado

grpc_next_upstream error timeout;

Contexto

http, server, location

Especifica en qué casos una solicitud debe pasarse al siguiente servidor en el grupo upstream:

error

ocurrió un error al establecer una conexión con el servidor, al pasarle una solicitud o al leer la cabecera de respuesta;

timeout

se produjo un tiempo de espera al establecer una conexión con el servidor, al pasarle una solicitud o al leer la cabecera de respuesta;

invalid_header

un servidor devolvió una respuesta vacía o no válida;

http_500

un servidor devolvió una respuesta con el código 500;

http_502

un servidor devolvió una respuesta con el código 502;

http_503

un servidor devolvió una respuesta con el código 503;

http_504

un servidor devolvió una respuesta con el código 504;

http_403

un servidor devolvió una respuesta con el código 403;

http_404

un servidor devolvió una respuesta con el código 404;

http_429

un servidor devolvió una respuesta con el código 429;

non_idempotent

normalmente, las solicitudes con un método no idempotente <https://datatracker.ietf.org/doc/html/rfc7231#section-4-2-2>`_ (POST, LOCK, PATCH) no se envían al siguiente servidor si ya se ha enviado una solicitud a un servidor upstream; activar esta opción permite reintentar explícitamente dichas solicitudes;

off

desactiva el paso de una solicitud al siguiente servidor.

Nota

Debe tenerse en cuenta que pasar una solicitud al siguiente servidor solo es posible si aún no se ha enviado nada al cliente. Es decir, si ocurre un error o un tiempo de espera a mitad de la trasmisión de una respuesta, no es posible solucionarlo.

La directiva también define qué se considera un intento fallido de comunicación con un servidor.

error, timeout, invalid_header

siempre se consideran intentos fallidos, incluso si no se especifican en la directiva

http_500, http_502, http_503, http_504, http_429

se consideran intentos fallidos solo si se especifican en la directiva

http_403, http_404

nunca se consideran intentos fallidos

El paso de una solicitud al siguiente servidor puede estar limitado por el número de intentos y por el tiempo.

grpc_next_upstream_timeout#

Sintaxis

grpc_next_upstream_timeout time;

Valor predeterminado

grpc_next_upstream_timeout 0;

Contexto

http, server, location

Limita el tiempo durante el cual una solicitud puede ser pasada al siguiente servidor.

0

desactiva esta limitación

grpc_next_upstream_tries#

Sintaxis

grpc_next_upstream_tries number;

Valor predeterminado

grpc_next_upstream_tries 0;

Contexto

http, server, location

Limita el número de posibles intentos para pasar una solicitud al siguiente servidor.

0

desactiva esta limitación

grpc_pass#

Sintaxis

grpc_pass address;

Valor predeterminado

Contexto

location, if in location

Establece la dirección del servidor gRPC. La dirección puede especificarse como un nombre de dominio o dirección IP, y un puerto:

grpc_pass localhost:9000;

o como una ruta de socket de dominio UNIX:

grpc_pass unix:/tmp/grpc.socket;

Alternativamente, se puede usar el esquema grpc://:

grpc_pass grpc://127.0.0.1:9000;

Para usar gRPC sobre SSL, se debe usar el esquema grpcs://:

grpc_pass grpcs://127.0.0.1:443;

Si un nombre de dominio se resuelve a varias direcciones, todas ellas se utilizarán de forma rotatoria. Además, una dirección puede especificarse como un grupo de servidores.

El valor del parámetro puede contener variables. En este caso, si una dirección se especifica como un nombre de dominio, el nombre se busca entre los grupos de servidores descritos y, si no se encuentra, se determina utilizando un resolver.

grpc_pass_header#

Sintaxis

grpc_pass_header field;

Valor predeterminado

Contexto

http, server, location

Permite pasar cabeceras de otro modo deshabilitadas desde un servidor gRPC hacia un cliente.

grpc_read_timeout#

Sintaxis

grpc_read_timeout time;

Valor predeterminado

grpc_read_timeout 60s;

Contexto

http, server, location

Define un tiempo de espera para leer una respuesta desde el servidor gRPC. El tiempo de espera se aplica únicamente entre dos operaciones de lectura sucesivas, no para la transmisión de toda la respuesta. Si el servidor gRPC no transmite nada dentro de este tiempo, la conexión se cierra.

grpc_send_timeout#

Sintaxis

grpc_send_timeout time;

Valor predeterminado

grpc_send_timeout 60s;

Contexto

http, server, location

Define un tiempo de espera para transmitir una solicitud al servidor gRPC. El tiempo de espera se aplica únicamente entre dos operaciones de escritura sucesivas, no para la transmisión de toda la solicitud. Si el servidor gRPC no recibe nada dentro de este tiempo, la conexión se cierra.

grpc_set_header#

Sintaxis

grpc_set_header field value;

Valor predeterminado

grpc_set_header Content-Length $content_length;

Contexto

http, server, location

Permite redefinir o añadir campos a la cabecera de la solicitud pasada al servidor gRPC. El valor puede contener texto, variables y sus combinaciones. Estas directivas se heredan del nivel de configuración anterior si y solo si no hay directivas grpc_set_header definidas en el nivel actual.

Si el valor de un campo de cabecera es una cadena vacía, entonces este campo no se pasará a un servidor gRPC:

grpc_set_header Accept-Encoding "";

grpc_socket_keepalive#

Sintaxis

grpc_socket_keepalive on | off;

Valor predeterminado

grpc_socket_keepalive off;

Contexto

http, server, location

Configura el comportamiento "TCP keepalive" para conexiones salientes a un servidor gRPC.

off

Por defecto, la configuración del sistema operativo está en efecto para el socket.

on

La opción de socket SO_KEEPALIVE está activada para el socket.

grpc_ssl_certificate#

Sintaxis

grpc_ssl_certificate file;

Valor predeterminado

Contexto

http, server, location

Especifica un archivo con el certificado en formato PEM utilizado para la autenticación a un servidor gRPC SSL. Se pueden usar variables en el nombre del archivo.

grpc_ssl_certificate_cache#

Sintaxis

grpc_ssl_certificate_cache off;

grpc_ssl_certificate_cache max=N [inactive=time] [valid=time];

Valor predeterminado

grpc_ssl_certificate_cache off;

Contexto

http, server, location

Define una caché que almacena certificados SSL y claves secretas especificados mediante variables.

La directiva admite los siguientes parámetros:

  • max — establece el número máximo de elementos en la caché. Cuando la caché se desborda, se eliminan los elementos menos utilizados recientemente (LRU).

  • inactive — define el tiempo tras el cual se elimina un elemento si no ha sido accedido. El valor predeterminado es 10 segundos.

  • valid — define el tiempo durante el cual un elemento almacenado es considerado válido y puede reutilizarse. El predeterminado es 60 segundos. Transcurrido este periodo, los certificados se recargan o revalidados.

  • off — desactiva la caché.

Ejemplo:

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#

Sintaxis

grpc_ssl_certificate_key file;

Valor predeterminado

Contexto

http, server, location

Especifica un archivo con la clave secreta en formato PEM utilizada para la autenticación en un servidor gRPC SSL.

El valor engine:`name`:id puede especificarse en lugar del archivo, lo que carga una clave secreta con un id específico desde el motor OpenSSL name.

Se pueden utilizar variables en el nombre del archivo.

grpc_ssl_ciphers#

Sintaxis

grpc_ssl_ciphers ciphers;

Valor predeterminado

grpc_ssl_ciphers DEFAULT;

Contexto

http, server, location

Especifica los cifrados habilitados para las solicitudes a un servidor gRPC SSL. Los cifrados se especifican en el formato entendido por la biblioteca OpenSSL.

La lista de cifrados depende de la versión de OpenSSL instalada. La lista completa puede verse utilizando el comando openssl ciphers.

Advertencia

La directiva grpc_ssl_ciphers no configura cifrados para TLS 1.3 cuando se usa OpenSSL. Para ajustar cifrados TLS 1.3 con OpenSSL, use la directiva grpc_ssl_conf_command, añadida para soportar configuraciones avanzadas de SSL.

  • En LibreSSL, los cifrados TLS 1.3 pueden configurarse usando grpc_ssl_ciphers.

  • En BoringSSL, los cifrados TLS 1.3 no pueden configurarse en absoluto.

grpc_ssl_conf_command#

Sintaxis

grpc_ssl_conf_command name value;

Valor predeterminado

Contexto

http, server, location

Establece comandos de configuración OpenSSL arbitrarios commands al establecer una conexión con el servidor gRPC SSL.

Nota

La directiva es compatible cuando se utiliza OpenSSL 1.0.2 o superior. Para configurar cifrados TLS 1.3 con OpenSSL, utilice el comando ciphersuites.

Se pueden especificar varias directivas grpc_ssl_conf_command en el mismo nivel. Estas directivas se heredan del nivel de configuración anterior si y solo si no hay directivas grpc_ssl_conf_command definidas en el nivel actual.

Advertencia

Tenga en cuenta que la configuración directa de OpenSSL podría resultar en un comportamiento inesperado.

grpc_ssl_crl#

Sintaxis

grpc_ssl_crl file;

Valor predeterminado

Contexto

http, server, location

Especifica un archivo con certificados revocados (CRL) en formato PEM utilizado para verificar el certificado del servidor gRPC SSL.

grpc_ssl_name#

Sintaxis

grpc_ssl_name name;

Valor predeterminado

grpc_ssl_name `host from grpc_pass;`

Contexto

http, server, location

Permite sobrescribir el nombre del servidor utilizado para verificar el certificado del servidor gRPC SSL y para ser pasado a través de SNI al establecer una conexión con el servidor gRPC SSL.

Por defecto, se utiliza la parte del host de la URL grpc_pass.

grpc_ssl_password_file#

Sintaxis

grpc_ssl_password_file file;

Valor predeterminado

Contexto

http, server, location

Especifica un archivo con frases de contraseña para claves secretas donde cada frase de contraseña se especifica en una línea separada. Las frases de contraseña se prueban sucesivamente al cargar la clave.

grpc_ssl_protocols#

Sintaxis

grpc_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];

Valor predeterminado

grpc_ssl_protocols TLSv1.2 TLSv1.3;

Contexto

http, server, location

Distinto en la versión 1.2.0: Parámetro TLSv1.3 añadido al conjunto predeterminado.

Habilita los protocolos especificados para las solicitudes a un servidor gRPC SSL.

grpc_ssl_server_name#

Sintaxis

grpc_ssl_server_name on | off;

Valor predeterminado

grpc_ssl_server_name off;

Contexto

http, server, location

Habilita o deshabilita el paso del nombre del servidor establecido por la directiva grpc_ssl_name a través de la extensión TLS Server Name Indication (SNI, RFC 6066) al establecer una conexión con el servidor gRPC SSL.

grpc_ssl_session_reuse#

Sintaxis

grpc_ssl_session_reuse on | off;

Valor predeterminado

grpc_ssl_session_reuse on;

Contexto

http, server, location

Determina si las sesiones SSL pueden reutilizarse cuando se trabaja con el servidor gRPC. Si aparecen en los registros errores como "SSL3_GET_FINISHED:digest check failed", intente desactivar la reutilización de sesiones.

grpc_ssl_trusted_certificate#

Sintaxis

grpc_ssl_trusted_certificate file;

Valor predeterminado

Contexto

http, server, location

Especifica un archivo con certificados CA de confianza en formato PEM utilizados para verificar el certificado del servidor gRPC SSL.

grpc_ssl_verify#

Sintaxis

grpc_ssl_verify on | off;

Valor predeterminado

grpc_ssl_verify off;

Contexto

http, server, location

Habilita o deshabilita la verificación del certificado del servidor gRPC SSL.

grpc_ssl_verify_depth#

Sintaxis

grpc_ssl_verify_depth number;

Valor predeterminado

grpc_ssl_verify_depth 1;

Contexto

http, server, location

Establece la profundidad de verificación en la cadena de certificados del servidor gRPC SSL.