mac 使用grpcwebproxy(grpc代理)

2020-05-15  本文已影响0人  CRJ997

     因为后端搭建起来的是grpc服务器,不能够直接使用http请求请求服务器,所以需要一个代理把前端的http请求变成grpc请求才行。因此便开始看看怎么去完成这个代理。看improbable-eng/grpc-web这个库的时候,发现它自己带了一个代理服务器grpcwebproxy。然后便照着它那边的安装方法去安装了。

安装

安装的话,就完全照着库那边的引导去安装了,但是首先要注意的是先安装go环境,并且在环境变量中把go的bin路径加入,加入路径的方式这位老哥说的很详细,链接。安装go环境的话,去官网下载就行了。装好之后,再安装dep。这个我是用homebrew安装的。或许也可以用其他方式安装。安装dep耗时非常久,只能慢慢等了。然后就是按照grpc-web的流程去安装了。如图1.1,每一行都是一个命令行语句。

图1.1

它那边还有个使用现有的二进制文件的,但是我不会用这个二进制文件,所以就直接用building from source了。好了,安装好之后,在~/go/bin下面就会有个grpcwebproxy的可执行文件。这边建议把这个也加入环境变量中,这样就可以随时执行了。

使用

使用的话,很简单,在命令行敲入grpcwebproxy [options]就可以了。但是问题是按照grpc-web库中的使用方法,如图1.2,没有办法连上服务器。所以便看了一下源码。发现还有比较多的命令行选项没有列出来,所以这边说明一下选项(也没写全,不过够用了), 如表1.1。


图1.2
表1.1
选项 作用 默认
--server_tls_cert_file 设置代理服务器的https证书, 开启https代理服务器的时候必填
--server_tls_cert_key 设置代理服务器的https证书key,开启https代理服务器的时候必填 ../misc/localhost.key
--use_websockets 设置是否使用websocket false
--server_bind_address 代理服务器地址 0.0.0.0
--backend_max_call_recv_msg_size 设置单次请求可接受后端的最大信息量, 默认4MB,单位字节 4MB
--allow_all_origins 设置cors,写了这个表示允许所有域名可以访问
--run_http_server 设置是否启用http代理(表示启用接受http请求的代理服务器) true
--run_tls_server 设置是否启用https代理(表示启用接受https请求的代理服务器) ,注意设置这个选项之后,必须要设置 --server_tls_cert_file 和 --server_tls_cert_key true
--server_http_debug_port 设置启用的http代理服务器的端口号,默认8080 8080
--server_http_tls_port 设置启用的https代理服务器的端口号,默认8443 8443
--backend_addr 设置远端服务器的地址,包括主机名和端口
--backend_tls_noverify 设置是否跳过证书检查,生产环境请勿使用 false
--backend_client_tls_cert_file 设置远端服务器请求客户端证书的时候,客户端的证书位置
--backend_client_tls_key_file 设置远端服务器请求客户端证书key的时候,客户端的证书key的位置
--backend_tls 设置远端服务器是否开启了https服务 false
--allowed_headers 设置代理服务器允许的http头部
--allowed_origins 设置代理服务器允许的http域名

因为我用来作为本地开发,远端是https服务,需要使用websockets,所以如下配置,客户端证书用openssl生成,如何生成可以看看这位大佬的文章

grpcwebproxy --backend_addr=远端服务器地址 --backend_tls=true --backend_client_tls_cert_file=客户端证书路径 --backend_client_tls_key_file=客户端证书key路径 --run_tls_server=false --allow_all_origins


输入之后代理成功启动(这边我已经把grpcwebproxy加入环境变量),项目的基础请求路径改成代理服务器地址之后,可以成功发起请求,完成代理。再写一条远端非https服务器,然后使用websocket的指令:

grpcwebproxy --backend_addr=远端服务器地址 --backend-tls=false --run_tls_server=false --use_websockets=true


OK,以上

上一篇 下一篇

猜你喜欢

热点阅读