Nginx反向代理GRPC服务

Nginx代理Gprc服务

编译Nginx

nginx从1.13.10版本开始支持grpc协议的反向代理。本文以目前最新稳定版本的nginx源码为例来实现grpc的反向代理。

  • 执行sudo apt update 更新ubuntu系统

  • 安装依赖包:apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

  • linux下执行wget http://nginx.org/download/nginx-1.26.2.tar.gz下1.26.2版本的nginx源码到本地。

  • 执行tar -zxvf nginx-1.26.2.tar.gz 解压源码。

  • 由于grpc是基于http2的所以编译nginx时需要添加 --with-http_v2_module和--with-stream选项。

  • 在源码目录下执行./configure --with-http_v2_module --with-stream完成编译配置。

  • sudo Make & make install编译安装nginx。默认安装到/usr/local/nginx目录下。

配置Nginx

Nginx配置文件默认存放在/usr/local/nginx/conf目录下,拷贝nginx.conf重命名为grpc.conf。打开grpc.conf修改如下内容:

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 

改为:

 http2 on;
    upstream grpc_backend {
            server 192.168.1.100:30034;
            server 192.168.1.101:30000;
            server 192.168.1.102:30036;
    }

    server {
        listen       8000;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        client_max_body_size 1000000000;
        location / {
                grpc_pass   grpc://grpc_backend;
                #grpc_set_header Host $host;
                #grpc_set_header X-Real-IP $remote_addr;
                #keepalive_timeout 300s;
        }

error_page部分直接删掉,因为要使用的是grpc后台服务不是web站点,没有页面可供显示,所以直接删掉。http2 on;表示启用http2协议以支持grpc,grpc就是基于http2的。 upstream grpc_backend里是要反向代理的grpc服务程序的ip地址和端口。 client_max_body_size指定客户端报文最大长度,这里设置的是1G个byte。如果不设置默认是1M,当请求报文或响应报文大于1M时会导致不能正常工作。 location里指定要代理的grpc后端服务。注意这里的grpc_pass表明反向代理的协议是grpc协议。

修改完配置文件后,可以执行 nginx -t -c /usr/local/nginx/grpc.conf 来验证配置文件是否正确,如果有格式错误或语法错误会给出具体错误位置的行号。

启动Nginx

以守护的方式启动Nginx: nginx -c /usr/local/nginx/conf/grpc.conf -g 'daemon off; master_process on;' &

执行netstat -anp|grep 8000查看nginx监听端口是否正常在监听了。如果上面配置的8000端口已经在监听了则可以使用客户端来连接这个地址和端口。

root@hy-pc009:~# netstat -anp|grep 8000
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      12732/nginx: master
tcp        0      0 172.19.169.241:8000     172.19.160.1:59751      ESTABLISHED 13558/nginx: worker

LISTEN表明已在监听。ESTABLISHED表明有客户端连接到了8000端口,这个是我使用客户端连接上来测试的。

如果在nginx允许期间修改了配置文件,则可以通过执行nginx -s reload来重新加载启动时指定的配置文件。

常用命令汇总

  • 启动nginx服务:ngnix -c x.conf -g 'daemon off; master_process on;' &

  • 检查nginx配置是否正确:ngnix -t -c x.conf

  • 修改配置后重新加载配置:nginx -s reload

  • 查看指定端口是否在监听状态:netstat -anp|grep port_number

  • 查看有多少个nginx进程在工作:netstat -antp|grep "nginx: worker"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值