En aquest tema, explorarem com configurar NGINX per treballar amb gRPC, un sistema de RPC (Remote Procedure Call) d'alt rendiment desenvolupat per Google. gRPC utilitza HTTP/2 per a la transmissió i Protocol Buffers com a format de serialització de dades, oferint avantatges significatius en termes de rendiment i eficiència.
Què és gRPC?
gRPC és un framework RPC modern que permet la comunicació entre serveis en diferents llenguatges de programació. Les seves característiques principals inclouen:
- Alt rendiment: Utilitza HTTP/2 per a la transmissió, permetent múltiples fluxos en una sola connexió TCP.
- Contracte definit: Utilitza Protocol Buffers per definir les interfícies i els missatges, assegurant la compatibilitat entre serveis.
- Interoperabilitat: Suporta múltiples llenguatges de programació, facilitant la integració en entorns heterogenis.
Configurant NGINX per a gRPC
Requisits previs
Abans de començar, assegura't de tenir instal·lat NGINX amb suport per a HTTP/2 i gRPC. La versió mínima recomanada és NGINX 1.13.10.
Configuració bàsica
-
Instal·lació de NGINX: Si encara no tens NGINX instal·lat, pots seguir les instruccions del Mòdul 1 per a la instal·lació.
-
Configuració del servidor: Afegeix la configuració següent al teu fitxer de configuració de NGINX (
nginx.conf
o un fitxer de configuració específic del lloc).
http { include mime.types; default_type application/octet-stream; server { listen 80 http2; server_name example.com; location / { grpc_pass grpc://localhost:50051; error_page 502 = /error502grpc; } location = /error502grpc { internal; default_type application/grpc; add_header grpc-status 14; add_header content-length 0; return 204; } } }
Explicació del codi
- listen 80 http2: Configura el servidor per escoltar a la porta 80 amb suport per a HTTP/2.
- server_name example.com: Defineix el nom del servidor.
- location /: Defineix la ubicació arrel per a les peticions gRPC.
- grpc_pass grpc://localhost:50051: Redirigeix les peticions gRPC al servidor gRPC que escolta a
localhost
a la porta50051
. - error_page 502 = /error502grpc: Defineix una pàgina d'error personalitzada per a errors 502, que són comuns en la comunicació gRPC.
- grpc_pass grpc://localhost:50051: Redirigeix les peticions gRPC al servidor gRPC que escolta a
- location = /error502grpc: Defineix la configuració per a la pàgina d'error 502.
- internal: Marca aquesta ubicació com a interna, de manera que no es pot accedir directament des de l'exterior.
- default_type application/grpc: Defineix el tipus de contingut per a la resposta d'error.
- add_header grpc-status 14: Afegeix un encapçalament gRPC amb l'estat 14 (UNAVAILABLE).
- add_header content-length 0: Afegeix un encapçalament de longitud de contingut amb valor 0.
- return 204: Retorna una resposta 204 (No Content).
Exercici pràctic
Configura un servidor gRPC simple i configura NGINX per actuar com a proxy invers per a aquest servidor.
- Servidor gRPC: Escriu un servidor gRPC simple en Python.
# server.py import grpc from concurrent import futures import time import helloworld_pb2 import helloworld_pb2_grpc class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) server.add_insecure_port('[::]:50051') server.start() try: while True: time.sleep(86400) except KeyboardInterrupt: server.stop(0) if __name__ == '__main__': serve()
- Fitxer de definició de Protocol Buffers:
// helloworld.proto syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
- Configuració de NGINX: Utilitza la configuració de NGINX proporcionada anteriorment.
Solució de problemes comuns
- Error 502 Bad Gateway: Assegura't que el servidor gRPC està en funcionament i escoltant a la porta correcta.
- Problemes de connexió: Verifica que NGINX té permisos per connectar-se al servidor gRPC.
Resum
En aquest tema, hem après a configurar NGINX per treballar amb gRPC, incloent la configuració bàsica i la gestió d'errors comuns. Aquesta configuració permet aprofitar els avantatges de gRPC, com ara l'alt rendiment i la interoperabilitat, mentre utilitzem NGINX com a proxy invers per gestionar les peticions.
Curs de NGINX
Mòdul 1: Introducció a NGINX
Mòdul 2: NGINX com a servidor web
- Servint contingut estàtic
- Llistats de directoris
- Pàgines d'error personalitzades
- Registre i formats de registre