grpc(2):Centos 安裝 nghttp2 做 grpc 的http2 代理

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1,nghttp2

和nginx 名字比較像,但是是一個c的llib庫。本身也可做http服務。
也可以做Proxy 伺服器,支援ssl。
之前也做過測試了
http://blog.csdn.net/freewebsys/article/details/58584294
因為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-develwget https://c-ares.haxx.se/download/c-ares-1.12.0.tar.gz -O /tmp/c-ares.tar.gzmkdir -p /tmp/c-arestar -zxvf /tmp/c-ares.tar.gz -C /tmp/c-ares --strip-components=1cd /tmp/c-ares && ./configure --libdir=/usr/lib64makesudo make installwget http://www.digip.org/jansson/releases/jansson-2.9.tar.gz -O /tmp/jansson.tar.gzmkdir -p /tmp/janssontar -zxvf /tmp/jansson.tar.gz -C /tmp/jansson --strip-components=1cd /tmp/jansson && ./configure --libdir=/usr/lib64makemake checksudo make install

安裝nghttp2服務。

wget https://github.com/nghttp2/nghttp2/releases/download/v1.19.0/nghttp2-1.19.0.tar.gz -O /tmp/nghttp2.tar.gzmkdir -p /tmp/nghttp2tar -zxvf /tmp/nghttp2.tar.gz -C /tmp/nghttp2 --strip-components=1cd /tmp/nghttp2 && ./configure --enable-appmakesudo 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-tlsbackend=127.0.0.1,50051;/;proto=h2backend=127.0.0.1,50051;/helloworld.Greeter/;proto=h2backend=127.0.0.1,50052;/aaa/;proto=h2#http2-proxy=noworkers=10accesslog-file=/data/nghttp/log/access.logerrorlog-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://blog.csdn.net/freewebsys/article/details/59112145 未經博主允許不得轉載。
博主地址是:http://blog.csdn.net/freewebsys

nghttp2 是不錯的grpcProxy 伺服器,可以做簡單的負載平衡。
同時保持http2的連結。
是一個不錯的grpc gateway 解決方案。唯一不足的地方是用 c++ 編寫的。
要是再修改成一個可以做許可權,資料統計的gateway 修改起來還是有點難度的。本人不是搞c++ 開發的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.