1,nghttp2

和Nginx 名字比较像,但是是一个c的llib库。本身也可做http服务。
也可以做代理服务器,支持ssl。
之前也做过测试了
http://www.jb51.cc/article/p-edsixtel-bew.html
因为Nginx 是不支持 upstream 的http2 转发请求的。
而且Nginx 也没有计划开发这个。
而haproxy 是支持 tcp 做代理的。对http2 的协议也是不支持的。
以后还打算做一个 grpc的网关。
必须要能支持http2的协议。而且还能够代理grpc。
找了半天就找到了一个nghttp2.。

2,下载安装

官方网站:
https://nghttp2.org/
https://github.com/nghttp2/nghttp2
官方文档是在ubuntu或者debian上面进行安装的。
实际上也可以在centos上面进行安装。
参考:
https://kirk91.github.io/2017/02/22/build-nghttp2-on-centos/
直接下一步下一步就可以了。
安装依赖库:

sudo yum -y groupinstall "Development Tools"
sudo yum -y install openssl-devel libxml2-devel libev-devel jemalloc-devel python-devel
wget https://c-ares.haxx.se/download/c-ares-1.12.0.tar.gz -O /tmp/c-ares.tar.gz
mkdir -p /tmp/c-ares
tar -zxvf /tmp/c-ares.tar.gz -C /tmp/c-ares --strip-components=1
cd /tmp/c-ares && ./configure --libdir=/usr/lib64
make
sudo make install
wget http://www.digip.org/jansson/releases/jansson-2.9.tar.gz -O /tmp/jansson.tar.gz
mkdir -p /tmp/jansson
tar -zxvf /tmp/jansson.tar.gz -C /tmp/jansson --strip-components=1
cd /tmp/jansson && ./configure --libdir=/usr/lib64
make
make check
sudo make install

安装nghttp2服务。

wget https://github.com/nghttp2/nghttp2/releases/download/v1.19.0/nghttp2-1.19.0.tar.gz -O /tmp/nghttp2.tar.gz
mkdir -p /tmp/nghttp2
tar -zxvf /tmp/nghttp2.tar.gz -C /tmp/nghttp2 --strip-components=1
cd /tmp/nghttp2 && ./configure --enable-app
make
sudo make install

没有错误就是编译成功了。

3,启动服务

网上的文档比较少
https://nghttp2.org/documentation/package_README.html
配置就直接按照proxy进行配置即可。
https://nghttp2.org/documentation/nghttpx-howto.html
但是发现几个比较坑的地方。使用命令行的参数和配置文件的不太一样。
结果是配置文件的可以使用。参数定义的比较怪异。
我花了一个下午的时间折腾,重要明白了咋配置了。
nghttpx.conf

frontend=0.0.0.0,5000;no-tls
backend=127.0.0.1,50051;/;proto=h2
backend=127.0.0.1,50051;/helloworld.Greeter/;proto=h2
backend=127.0.0.1,50052;/aaa/;proto=h2
#http2-proxy=no
workers=10
accesslog-file=/data/nghttp/log/access.log
errorlog-file=/data/nghttp/log/errorlog.log

首先是frontend 配置,不使用tls进行访问的话一定要加上。
否则就需要增加key 和 crt 文件,而且访问的时候要使用https。
backend端,一定不要加上tls,否则会报502 错误。
而且对于backend的grpc服务来说一定要加上 proto=h2 参数。
强制协议是http2的。否则也报502 错误。

4,启动服务

nghttpx --conf nghttpx.conf

从访问日志里面看:

10.0.2.2 - - [01/Mar/2017:04:29:18 -0500] "POST /helloworld.Greeter/SayHello HTTP/2" 200 32 "-" "token=xxxxx grpc-java-netty/1.1.2"
10.0.2.2 - - [01/Mar/2017:04:29:18 -0500] "POST /helloworld.Greeter/SayHello HTTP/2" 200 32 "-" "token=xxxxx grpc-java-netty/1.1.2"
10.0.2.2 - - [01/Mar/2017:04:29:18 -0500] "POST /helloworld.Greeter/SayHello HTTP/2" 200 32 "-" "token=xxxxx grpc-java-netty/1.1.2"
10.0.2.2 - - [01/Mar/2017:04:29:18 -0500] "POST /helloworld.Greeter/SayHello HTTP/2" 200 32 "-" "token=xxxxx grpc-java-netty/1.1.2"
10.0.2.2 - - [01/Mar/2017:04:29:18 -0500] "POST /helloworld.Greeter/SayHello HTTP/2" 200 32 "-" "token=xxxxx grpc-java-netty/1.1.2"
10.0.2.2 - - [01/Mar/2017:04:29:18 -0500] "POST /helloworld.Greeter/SayHello HTTP/2" 200 32 "-" "token=xxxxx grpc-java-netty/1.1.2"

可以看到请求。
其中/helloworld.Greeter/SayHello 代表grpc的包名,接口名和方法名。

5,总结

本文的原文连接是: http://www.jb51.cc/article/p-czjrvete-bew.html 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

nghttp2 是不错的grpc代理服务器,可以做简单的负载均衡。 同时保持http2的链接。 是一个不错的grpc gateway 解决方案。唯一不足的地方是用 c++ 编写的。 要是再修改成一个可以做权限,数据统计的gateway 修改起来还是有点难度的。本人不是搞c++ 开发的。

grpc2:Centos 安装 nghttp2 做 grpc 的http2 代理的更多相关文章

  1. android – Firestore:库中的包引用无效

    解决方法您可以通过在lint.xml文件中设置以下内容来删除此错误:lint.xml应位于应用程序模块的根目录下.将错误降级为警告的优点是,如果您以后碰巧添加了一个真正包含无效包的依赖项,您仍然会收到错误.

  2. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. centos+php+coreseek+sphinx+mysql之一coreseek安装篇

    这篇文章主要介绍了centos+php+coreseek+sphinx+mysql之一coreseek安装篇的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下

  4. Centos7 中 Node.js安装简单方法

    这篇文章主要介绍了Centos7 中 Node.js安装简单方法,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下

  5. nodejs脚本centos开机启动实操方法

    在本篇文章里小编给大家整理的是关于nodejs脚本centos开机启动实操方法,有兴趣的朋友们参考下。

  6. Centos PHP 扩展Xchche的安装教程

    这篇文章主要介绍了Centos PHP 扩展Xchche的安装教程的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  7. Linux CentOS系统下安装node.js与express的方法

    这篇文章主要给大家介绍了在Linux CentOS系统下安装node.js与express的方法,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

  8. CentOS上安装Node.js和mongodb笔记

    这篇文章主要介绍了CentOS上安装Node.js和mongodb笔记,本文讲解了Python安装、Node.js安装、npm安装、mongodb驱动安装、mongodb数据库操作测试代码等内容,需要的朋友可以参考下

  9. python下grpc与protobuf的编写使用示例

    这篇文章主要为大家介绍了python下grpc与protobuf的编写使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

  10. centos7上编译安装php7以php-fpm方式连接apache

    这篇文章主要介绍了centos7上编译安装php7以php-fpm方式连接apache的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. 如何在客户端使用Java读取gRPC中的元数据

    所有我需要阅读第一条有订阅ID的消息,并将相同的订阅ID返回给服务器以便流可以启动我使用相同的原型文件使用相同的Python代码,它通过下面的代码提供与服务器通信仅供参考:从上面的python代码我可以轻松检索元数据对象,不知道如何使用Java检索它?

  2. Windows上的gRPC C.

    我已经尝试了3天,现在找到如何在没有运气的情况下在Windows上安装和使用gRPC.我使用的是VisualStudio2015,Win764位.为了安全起见,我会一步一步地写下我正在做的事情.它可能没有必要,但我是C和VS的初学者,所以我不确定我是否正确地做到了:(按照指南http://www.infopulse.com/blog/grpc-framework-by-google-tutoria

  3. grpc2:Centos 安装 nghttp2 做 grpc 的http2 代理

    1,nghttp2和Nginx名字比较像,但是是一个c的llib库。而haproxy是支持tcp做代理的。2,下载安装官方网站:https://nghttp2.org/https://github.com/nghttp2/nghttp2官方文档是在ubuntu或者debian上面进行安装的。安装依赖库:安装nghttp2服务。3,启动服务网上的文档比较少https://nghttp2.org/documentation/package_README.html配置就直接按照proxy进行配置即可。https

  4. grpc1:Centos 安装java的grpc服务,使用haproxy进行负载均衡,nginx不支持

    目前提供C、Java和Go语言版本,分别是:grpc,grpc-java,grpc-go.其中C版本支持C,C++,Node.js,Python,Ruby,Objective-C,PHP和C#支持。自动进行proto编译,转换成几个java文件。4,启动server启动server。使用client进行测试:5,不能使用Nginx进行grpc代理虽然Nginx已经支持了http2,但是不能适应Nginx进行负载均衡。grpc想使用Nginx做代理。https://github.com/grpc/grpc-

返回
顶部