Ich habe das API -Bild in einem Docker -Container gebaut und verwendet Docker, um alles zu spinnen.
Code: Select all
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService();
endpoints.MapControllers();
});
< /code>
Ich habe nginx als umgekehrter Proxy vor meiner API und unten ist meine Nginx -Konfiguration. Aber die RPC -Anrufe funktionieren nicht. Ich kann keine Verbindung zum GRPC -Dienst über einen Kunden herstellen und es gibt eine 502 -Anfrage zurück. Ich bekomme einen 2020/06/29 18:33:30 [Fehler] 27#27: *3 Upstream Sent zu groß http2 Frame: 4740180 Während der Reaktionsheader von Upstream, Client: 172.20.0.1
Code: Select all
http {
upstream api {
server apiserver:5001;
}
upstream function {
server funcserver:5002;
}
# redirect all http requests to https
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
server {
server_name api.localhost;
listen 443 http2 ssl ipv6only=on;
ssl_certificate /etc/certs/api.crt;
ssl_certificate_key /etc/certs/api.key;
location /CartCheckoutService/ValidateCartCheckout {
grpc_pass grpc://api;
proxy_buffer_size 512k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 512k;
grpc_set_header Upgrade $http_upgrade;
grpc_set_header Connection "Upgrade";
grpc_set_header Connection keep-alive;
grpc_set_header Host $host:$server_port;
grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
grpc_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass http://api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Connection keep-alive;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
server {
server_name func.localhost;
listen 443 ssl;
ssl_certificate /etc/certs/func.crt;
ssl_certificate_key /etc/certs/func.key;
location / {
proxy_pass http://function;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
gzip on;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_types text/plain text/css application/json application/xml;
}
< /code>
edit1: < /strong>
Ich habe auch versucht, separate Endpunkte für REST /GRPC zu spinnen. Aus dieser Dokumentation, wenn unsichere Anfragen eingeht, werden automatisch angenommen, dass sie HTTP1 -Anfragen sind. Ich habe Kestrel manuell konfiguriert, um 2 separate Endpunkte, zwei Ports zu haben - eine für http1+http2 und eine für http2 -Anforderungen. < /P>
services.Configure(y =>
{
y.ListenAnyIP(5010, o =>
{
o.Protocols = HttpProtocols.Http2;
//o.UseHttps("./certs/backend.pfx", "password1");
});
y.ListenAnyIP(5001, o =>
{
o.Protocols = HttpProtocols.Http1AndHttp2;
});
});
< /code>
In nginx habe ich auch separate Einträge erstellt: < /p>
upstream api {
server apiserver:5001;
}
upstream grpcservice {
server apiserver:5010;
}
upstream function {
server funcserver:5002;
}
< /code>
Dies funktioniert auch nicht. Ich habe sogar versucht, SSL vorgeleitet, indem ich den HTT2 -Endpunkt nur SSL -Verbindungen akzeptierte, aber keine Würfel. Proxy < /li>
Gebrauchte Bilder von Debian /Ubuntu -basierten Bildern anstelle von Alpine < /li>
< /ul>
Keine davon funktioniert.location /CartCheckoutService/ValidateCartCheckout {
grpc_pass grpc://api;
}
Ich suche immer noch nach einer formal>