Задать вопрос
@STALLKER337

Как нормально настроить grpc c#(kestel) + nginx под linux?

Как нормально настроить grpc c# + nginx.
Status(StatusCode="Internal", Detail="Error starting gRPC call. HttpRequestException: The SSL connection could not be established, see inner exception. AuthenticationException: The remote certificate is invalid according to the validation procedure: RemoteCertificateNameMismatch, RemoteCertificateChainErrors", DebugException="System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
 ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure: RemoteCertificateNameMismatch, RemoteCertificateChainErrors
   at System.Net.Security.SslStream.CompleteHandshake(SslAuthenticationOptions sslAuthenticationOptions)
   at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
   at System.Net.Security.SslStream.ProcessAuthenticationWithTelemetryAsync(Boolean isAsync, CancellationToken cancellationToken)
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.InjectNewHttp2ConnectionAsync(QueueItem queueItem)
   at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionWaiter`1.WaitForConnectionWithTelemetryAsync(HttpRequestMessage request, HttpConnectionPool pool, Boolean async, CancellationToken requestCancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at Grpc.Net.Client.Balancer.Internal.BalancerHttpHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpMessageInvoker.<SendAsync>g__SendAsyncWithTelemetry|6_0(HttpMessageHandler handler, HttpRequestMessage request, CancellationToken cancellationToken)
   at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage request, Nullable`1 timeout)")

при подключении выдаёт данную ошибку.
"Kestrel": {
   "Endpoints": {
     "http": {
       "Url": "http://localhost:7331"
     },
     "Grpc": {
       "Url": "http://localhost:7332",
       "Protocols": "Http2"
     }
   }

и nginx
server {
    server_name api.platinum-vpn.su;
    listen 94.103.88.196:443 ssl http2;

    ssl_certificate "/var/www/httpd-cert/api.platinum-vpn.su_2025c-02-18-11-32_10.crt";
    ssl_certificate_key "/var/www/httpd-cert/api.platinum-vpn.su_2025-02-18-11-32_10.key";

    charset utf-8;
    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 1;

    set $root_path /var/www/platinum_vpn_usr/data/www/platinum-vpn.su/api;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # gRPC настройки
    location / {
        grpc_pass grpc://127.0.0.1:7332;  # Указываем порт gRPC
        error_page 502 = /error502grpc;    # Обработка ошибок
    }

    location = /error502grpc {
        internal;
        default_type application/grpc;
        add_header grpc-status 14;  # UNAVAILABLE
        add_header content-length 0;
        return 204;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ @fallback;
    }

    location @fallback {
        grpc_pass grpc://127.0.0.1:7332;  # Указываем порт gRPC
        error_page 502 = /error502grpc;    # Обработка ошибок
    }

    include "/etc/nginx/fastpanel2-sites/platinum_vpn_usr/api.platinum-vpn.su.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/platinum_vpn_usr/data/logs/api.platinum-vpn.su-frontend.error.log;
    access_log /var/www/platinum_vpn_usr/data/logs/api.platinum-vpn.su-frontend.access.log;
}

server {
    server_name api.platinum-vpn.su;
    listen 94.103.88.196:80;
    return 301 https://$host$request_uri;

    error_log /var/www/platinum_vpn_usr/data/logs/api.platinum-vpn.su-frontend.error.log;
    access_log /var/www/platinum_vpn_usr/data/logs/api.platinum-vpn.su-frontend.access.log;
}
  • Вопрос задан
  • 36 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы