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.confo 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
localhosta 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
