Смешивание http и http2 на одном сервере в nginx

#nginx #grpc

#nginx #grpc

Вопрос:

Я пытаюсь создать единый сервер на nginx, обслуживающий как маршруты http2, так и традиционные маршруты http1, моя проблема в том, что я не могу заставить его работать нормально.

Когда я пытаюсь получить доступ к своему приложению во вложенной папке, которое работает на gunicorn flask, я получаю загружаемый файл с некоторым двоичным файлом

Как я могу обслуживать оба?

 
    server {
        listen 80 http2;

        access_log /dev/stdout main;
        rewrite_log on;
        error_log /dev/stdout debug;

        location /some.Service {
            grpc_pass grpc://srvadd:10116;
        }

        location /password-reset {
            proxy_pass http://flask:8000;
        }
    }

  

Комментарии:

1. Если вы удалите конечную точку gRPC, proxy_pass будет ли после этого работать Flask должным образом или проблема сохранится?

2. Вы нашли решение? Я получаю точно такую же проблему, и мне трудно найти какую-либо соответствующую проблему в сети…

Ответ №1:

хм, обслуживание трафика http и http2 на одном сервере nginx должно работать. Это один из примеров nginx.conf, который работает для нас

 server {
    listen 8080;
    listen 8443 http2;
    server_name localhost;

    location / {
      grpc_pass localhost:9090;
    }
  }
  

Я не совсем уверен, но работает ли порт 80 с http2? Я думаю, что может быть какое-то ограничение на то, какой номер порта вы можете использовать с http2?

еще один немного более сложный пример

   server {
    listen [::]:$0;
    listen [::]:$1 http2;
    server_name localhost;
    location /grpc.gateway.testing.EchoService/ {
      grpc_pass localhost:$2;
      grpc_channel_reuse on;
      grpc_ssl $3;
      grpc_ssl_target_name_override $4;
      grpc_ssl_pem_root_certs "$5";
      grpc_ssl_pem_private_key "$6";
      grpc_ssl_pem_cert_chain "$7";
      grpc_client_liveness_detection_interval 10ms;
      add_header Access-Control-Allow-Origin * always;
    }
  }