gRPC#
Permite pasar solicitudes a un servidor gRPC.
Nota
Este módulo requiere el módulo HTTP/2.
Cuando se compila desde el código fuente, este módulo
se compila por defecto; puede deshabilitarse con la opción de
compilación --without-http_grpc_module.
En paquetes e imágenes de nuestros repositorios,
el módulo está incluido en la compilación. 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 De forma predeterminada, este valor se evalúa una vez, al inicializarse la
solicitud, antes de seleccionar un servidor gRPC. En Angie PRO, la
evaluación se realiza después de cada selección de servidor gRPC
(incluidos los reintentos), de modo que la dirección de vinculación puede
depender del servidor seleccionado; por ejemplo, mediante la variable
El parámetro 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 Nota Es necesario configurar la tabla de enrutamiento del kernel para interceptar el tráfico de red desde el servidor gRPC. 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. Predeterminado 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. Nota Este tiempo de espera no rige las conexiones inactivas: cuánto tiempo se
conserva para su reutilización una conexión ya abierta lo establece
keepalive_timeout en un bloque upstream cuyas conexiones se
almacenan en caché con keepalive. Predeterminado http, server, location Habilita la terminación de todas las conexiones activas al servidor proxy después de que haya sido
eliminado del grupo o marcado como permanentemente no disponible por un proceso de reresolución o el comando 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 Por defecto, Angie no pasa los campos de cabecera Deshabilita el procesamiento de ciertos campos de cabecera de respuesta del servidor gRPC. Los siguientes campos pueden ser ignorados: Si no se deshabilita, el procesamiento de estos campos de cabecera tiene el siguiente efecto: Predeterminado http, server, location Determina si las respuestas del servidor gRPC con códigos mayores o iguales a 300 deben pasarse a un cliente o ser interceptadas y redirigidas a Angie para su procesamiento con la directiva error_page. Predeterminado http, server, location Especifica en qué casos una solicitud debe pasarse al siguiente servidor en el grupo upstream: ocurrió un error al establecer una conexión con el servidor, al pasarle una solicitud o al leer la cabecera de respuesta; 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; un servidor devolvió una respuesta vacía o no válida; un servidor devolvió una respuesta con el código 500; un servidor devolvió una respuesta con el código 502; un servidor devolvió una respuesta con el código 503; un servidor devolvió una respuesta con el código 504; un servidor devolvió una respuesta con el código 403; un servidor devolvió una respuesta con el código 404; un servidor devolvió una respuesta con el código 429; normalmente, las solicitudes con un método no idempotente
( 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 transferencia de una respuesta, no es posible solucionarlo. La directiva también define qué se considera un intento fallido de comunicación con un servidor. siempre se consideran intentos fallidos, incluso si no se especifican en la directiva se consideran intentos fallidos solo si se especifican en la directiva 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. Predeterminado http, server, location Limita el tiempo durante el cual una solicitud puede pasarse al siguiente servidor. desactiva esta limitación Predeterminado http, server, location Limita el número de intentos posibles para pasar una solicitud al siguiente servidor. desactiva esta limitación Establece la dirección del servidor gRPC. La dirección puede especificarse como un nombre de dominio o dirección IP, y un puerto: o como una ruta de socket de dominio UNIX: Alternativamente, se puede usar el esquema Para usar gRPC sobre SSL, se debe usar el esquema 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. El URI de la solicitud se pasa en el campo de pseudocabecera Nota Si Permite pasar campos de cabecera de otro modo deshabilitados desde un servidor gRPC hacia un cliente. Define un tiempo de espera para leer una respuesta desde el servidor gRPC. El tiempo de espera se establece ú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. Establece un tiempo de espera para transmitir una solicitud al servidor gRPC. El tiempo de espera se establece ú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. Predeterminado 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á al servidor gRPC: Predeterminado http, server, location Configura el comportamiento "TCP keepalive" para conexiones salientes a un servidor gRPC. Por defecto, la configuración del sistema operativo está en efecto para el socket. La opción de socket SO_KEEPALIVE está activada para el socket. Especifica el certificado en formato PEM utilizado para la autenticación en un servidor SSL gRPC. El valor se interpreta como en ssl_certificate: una ruta de archivo, o
el texto PEM del certificado tras el prefijo Predeterminado http, server, location Define una caché que almacena certificados SSL y claves secretas especificados mediante variables. La directiva admite los siguientes parámetros: Las claves protegidas por una frase de contraseña (véase grpc_ssl_password_file) no se almacenan en caché. Ejemplo: Predeterminado — http, server, location Especifica la clave secreta en formato PEM utilizada para la autenticación en un servidor SSL gRPC. El valor, incluidos los prefijos Predeterminado 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 Advertencia Con OpenSSL, la directiva En LibreSSL, los cifrados TLS 1.3 sí pueden configurarse usando
En BoringSSL, los cifrados TLS 1.3 no pueden configurarse en absoluto. Establece comandos de configuración arbitrarios de OpenSSL al establecer una conexión con el servidor gRPC SSL. Nota La directiva es compatible cuando se usa OpenSSL 1.0.2 o superior.
El comando 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 configurar OpenSSL directamente podría resultar en comportamiento inesperado. Especifica un archivo con certificados revocados (CRL) en formato PEM utilizado para verificar el certificado del servidor gRPC SSL. Predeterminado 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. El nombre del servidor también puede especificarse con variables. Por defecto, se utiliza el nombre de host de grpc_pass. 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. Predeterminado http, server, location Habilita los protocolos especificados para las solicitudes a un servidor gRPC SSL. Predeterminado 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. Predeterminado http, server, location Determina si las sesiones SSL pueden reutilizarse cuando se trabaja con el servidor gRPC. Si aparece en los registros el error Especifica un archivo con certificados CA de confianza en formato PEM utilizados para verificar el certificado del servidor gRPC SSL. Habilita o deshabilita la verificación del certificado del servidor gRPC SSL. Predeterminado http, server, location Establece la profundidad de verificación en la cadena de certificados del servidor gRPC SSL.Ejemplo de configuración#
server {
listen 9000;
http2 on;
location / {
grpc_pass 127.0.0.1:9000;
}
}
Directivas#
grpc_bind#
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.$upstream_current_addr. Si el valor evaluado está vacío, no se
realiza ninguna vinculación.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;
transparent, los procesos de trabajo heredan la capacidad CAP_NET_RAW del proceso maestro.grpc_buffer_size#
grpc_connect_timeout#
grpc_connect_timeout tiempo;grpc_connect_timeout 60s;grpc_connection_drop#
grpc_connection_drop tiempo | on | off;grpc_connection_drop off;DELETE de la API.
Las conexiones inactivas en la caché no se ven afectadas.on establecido, las conexiones se descartan inmediatamente.grpc_hide_header#
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#
X-Accel-Redirect y X-Accel-Charset.X-Accel-Redirect realiza una redirección interna al URI especificado o a una
ubicación con nombre;X-Accel-Charset establece el conjunto de caracteres deseado de una respuesta.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) no se pasan al siguiente
servidor si ya se ha enviado una solicitud a un servidor upstream; activar esta
opción permite reintentar explícitamente dichas solicitudes;offerror, timeout, invalid_headerhttp_500, http_502, http_503, http_504, http_429http_403, http_404grpc_next_upstream_timeout#
grpc_next_upstream_timeout tiempo;grpc_next_upstream_timeout 0;0grpc_next_upstream_tries#
grpc_next_upstream_tries number;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 según la misma
regla que con proxy_pass sin URI: exactamente como lo envió el
cliente, a menos que Angie haya cambiado el URI o los argumentos de la solicitud.grpc_pass se especifica en un location con una barra diagonal al final en el prefijo
(por ejemplo, location /name/),
y la directiva auto_redirect está establecida en default,
las solicitudes sin barra diagonal al final serán redirigidas (/name -> /name/).grpc_pass_header#
grpc_read_timeout#
grpc_send_timeout#
grpc_set_header#
grpc_set_header field value;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:. El valor puede
contener variables; se evalúan cada vez que Angie establece una conexión con el
servidor SSL gRPC, por lo que están disponibles todas las variables de la
solicitud, incluidas las asignadas con set. Si el valor evaluado del
certificado está vacío, no se envía ningún certificado de cliente. Para evitar
cargar certificados en cada conexión, habilite
grpc_ssl_certificate_cache.grpc_ssl_certificate_cache#
grpc_ssl_certificate_cache off;grpc_ssl_certificate_cache max=N [inactive=time] [valid=time];grpc_ssl_certificate_cache off;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 durante ese tiempo, incluso si todavía está dentro de su
período valid; cada acceso reinicia este temporizador. El valor
predeterminado es 10 segundos.valid — define el tiempo durante el cual un elemento en caché se reutiliza
sin comprobaciones. El valor predeterminado es 60 segundos. Pasado este período,
un elemento cargado desde un archivo se recarga solo si el archivo ha cambiado, y
una clave cargada con el prefijo engine: o store: se vuelve a cargar;
un elemento especificado con el prefijo data: sigue siendo válido.off — desactiva la caché.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 file | data:key | engine:name:id | store:uri;engine: y store:, se
interpreta como en ssl_certificate_key, y las variables en él funcionan
como se describe en grpc_ssl_certificate. Una clave protegida por una
frase de contraseña se descifra con las frases de contraseña de
grpc_ssl_password_file.grpc_ssl_ciphers#
grpc_ssl_ciphers ciphers;grpc_ssl_ciphers DEFAULT;openssl ciphers.grpc_ssl_ciphers no configura los cifrados de TLS 1.3;
en su lugar, configúrelos con el comando Ciphersuites de la directiva
grpc_ssl_conf_command. La directiva grpc_ssl_ciphers ignora los nombres de cifrados
TLS 1.3 de su valor, por lo que dichos nombres no restringen las conexiones
TLS 1.3. Si el valor consta únicamente de tales nombres, por ejemplo
TLS_AES_128_GCM_SHA256, la configuración no se carga y se produce
el error no cipher match.grpc_ssl_ciphers.grpc_ssl_conf_command#
Ciphersuites, que configura los cifrados de TLS 1.3, requiere
OpenSSL 1.1.1 o superior.grpc_ssl_crl#
grpc_ssl_name#
grpc_ssl_name name;grpc_ssl_name `nombre de host 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_server_name on | off;grpc_ssl_server_name off;grpc_ssl_session_reuse#
grpc_ssl_session_reuse on | off;grpc_ssl_session_reuse on;SSL3_GET_FINISHED:digest check failed, intente desactivar la reutilización de sesiones.grpc_ssl_trusted_certificate#
grpc_ssl_verify#
grpc_ssl_verify_depth#
grpc_ssl_verify_depth number;grpc_ssl_verify_depth 1;