和nginx 名字比較像,但是是一個c的llib庫。本身也可做http服務。
也可以做代理伺服器,支援ssl。
之前也做過測試了
<a href="http://blog.csdn.net/freewebsys/article/details/58584294">http://blog.csdn.net/freewebsys/article/details/58584294</a>
因為nginx 是不支援 upstream 的http2 轉發請求的。
而且nginx 也沒有計劃開發這個。
而haproxy 是支援 tcp 做代理的。對http2 的協定也是不支援的。
以後還打算做一個 grpc的網關。
必須要能支援http2的協定。而且還能夠代理grpc。
找了半天就找到了一個nghttp2.。
官方網站:
<a href="https://nghttp2.org/">https://nghttp2.org/</a>
<a href="https://github.com/nghttp2/nghttp2">https://github.com/nghttp2/nghttp2</a>
官方文檔是在ubuntu或者debian上面進行安裝的。
實際上也可以在centos上面進行安裝。
參考:
<a href="https://kirk91.github.io/2017/02/22/build-nghttp2-on-centos/">https://kirk91.github.io/2017/02/22/build-nghttp2-on-centos/</a>
直接下一步下一步就可以了。
安裝依賴庫:
安裝nghttp2服務。
沒有錯誤就是編譯成功了。
網上的文檔比較少
<a href="https://nghttp2.org/documentation/package_readme.html">https://nghttp2.org/documentation/package_readme.html</a>
配置就直接按照proxy進行配置即可。
<a href="https://nghttp2.org/documentation/nghttpx-howto.html">https://nghttp2.org/documentation/nghttpx-howto.html</a>
但是發現幾個比較坑的地方。使用指令行的參數和配置檔案的不太一樣。
結果是配置檔案的可以使用。參數定義的比較怪異。
我花了一個下午的時間折騰,重要明白了咋配置了。
nghttpx.conf
首先是frontend 配置,不使用tls進行通路的話一定要加上。
否則就需要增加key 和 crt 檔案,而且通路的時候要使用https。
backend端,一定不要加上tls,否則會報502 錯誤。
而且對于backend的grpc服務來說一定要加上 proto=h2 參數。
強制協定是http2的。否則也報502 錯誤。
從通路日志裡面看:
可以看到請求。
其中/helloworld.greeter/sayhello 代表grpc的包名,接口名和方法名。
nghttp2 是不錯的grpc代理伺服器,可以做簡單的負載均衡。
同時保持http2的連結。
是一個不錯的grpc gateway 解決方案。唯一不足的地方是用 c++ 編寫的。
要是再修改成一個可以做權限,資料統計的gateway 修改起來還是有點難度的。本人不是搞c++ 開發的。