Можем ли мы использовать прокси-сервер nginx для интеграции с gRPC-web без зависимости от докера?
Нужно использовать NGINX без докера
Я пытался использовать gRPC-веб-интеграцию с использованием прокси-сервера-посредника, который имел зависимости от докера, и поэтому я перешел на NGINX, как использовать NGINX без докер-зависимостей?
0 ответов
Поскольку нет прямой поддержки grpc-web
от nginx
, мы можем сделать хак ниже в конфигурационном файле nginx для работы с обоими grpc-web
а также grpc
звонки.
server {
listen 1449 ssl http2;
server_name `domain-name`;
ssl_certificate `pem-file`; # managed by Certbot
ssl_certificate_key `key-file`; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
#
## Any request with the content-type application/grpc+(json|proto|customType) will not enter the
## if condition block and make a grpc_pass while rest of the requests enters into the if block
## and makes a proxy_prass request. Explicitly grpc-web will also enter the if block.
#
if ($content_type !~ 'application\/grpc(?!-web)(.*)'){
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Transfer-Encoding,Custom-Header-1,X-Accept-Content-Transfer-Encoding,X-Accept-Response-Streaming,X-User-Agent,X-Grpc-Web,content-type,snet-current-block-number,snet-free-call-user-id,snet-payment-channel-signature-bin,snet-payment-type,x-grpc-web';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
proxy_pass http://reroute_url;
}
grpc_pass grpc://reroute_url;
}
}
Вышеупомянутая конфигурация работает на основе механизма типа содержимого, когда grpc-web
вызывает nginx, тип содержимого будет application/grpc-web
и этот тип содержимого не обрабатывается nginx с grpc_pass
.
Следовательно, только те запросы с типом содержимого application/grpc+(proto|json|customType)
работает с grpc_pass
в то время как остальные запросы будут работать с proxy_pass
.
Вы можете посмотреть, что делает dockerfile, и сделать это самостоятельно вне образа docker: https://github.com/grpc/grpc-web/blob/master/net/grpc/gateway/docker/nginx/Dockerfile
Главное в основном бегать make standalone-proxy
и запустить его как ./gConnector_static/nginx.sh
, Вам понадобится nginx.conf
конфигурационный файл, чтобы указать, где Nginx должен получать и пересылать запросы gRPC-Web