[nginx]反向代理grpc

nginx从1.13.10版本开始提供对gRPC代理的支持。由于grpc基于http2,因此编译nginx时需要添加参数--with-http_v2_module来启用对http2协议的支持。

常用配置

应该是nginx 1.25版本开始,声明http2的语法应该单独写,而不是写在listen中。

复制代码
listen 80;
http2 on;
  • 基本配置

    http {
    server {
    listen 80 http2;
    location / {
    grpc_pass grpc://192.168.0.14:84;
    }
    }

    复制代码
      # 示例2, 通过server_name复用端口
      server {
          listen 80 http2;
          server_name demo2.test.com;
          location / {
              grpc_pass grpc://192.168.0.14:85;
          }
      }

    }

  • 反向代理后端SSL gRPC

    server {
    listen 80 http2;
    grpc_ssl_verify off; # 关闭对grpc服务器的ssl证书验证
    grpc_ssl_session_reuser on; # 启用与grpc服务器https连接的ssl会话重用功能
    location / {
    grpc_pass grpcs://192.168.0.14:84; # grpc后端地址
    }
    }

  • nginx同时启用https。客户端 -> nginx(https) -> 服务端(SSL)

    server {
    listen 443 ssl http2;
    ssl_certificate ssl/test.pem;
    ssl_certificate_key ssl/test.key;

    复制代码
      grpc_ssl_verify off;
      grpc_ssl_session_reuser on;
      location / {
          grpc_pass grpcs://192.168.0.14:84;
      }

    }

  • 负载均衡配置

    upstream grpc_backend {
    server 192.168.0.11:8001;
    server 192.168.0.12:8001;
    }
    server {
    listen 80 http2;
    location / {
    grpc_pass grpc://grpc_backend;
    }
    }

配置指令

名称 语法 默认值 说明
grpc_bind address [transparent] 或off nil 设置从指定的本地IP地址及端口进行反向代理。设置transparent时,将客户端真实IP透传给后端。
grpc_buffer_size size 4k或8k 设用于从grpc服务器读取响应数据缓冲区大小。
grpc_pass address nil 后端grpc的地址
grpc_hide_header field nil 指定grpc后端响应数据中,不向客户端传递的http头
grpc_pass_header field nil 允许部分后端请求头返回给客户端
grpc_ignore_headers fields nil 设置禁止nginx处理从后端获取响应的header
grpc_set_header field value 在转发给grpc后端前,修改或添加请求头
grpc_connect_timeout time 60s nginx与后端建立连接的超时时间
grpc_read_timeout time 60s 从后端连续接收两个读操作之间的超时时间
grpc_send_timeout time 60s 从后端连续接收两个写操作之间的超时时间
grpc_socket_keepalive on 或 off off 启用nginx与后端的tcp keepalive机制
grpc_intercept_errors on 或 off off 启用拦截后端响应码大于或等于300的结果
grpc_next_upstream 当出现指令之中指定的条件时,将未返回响应的请求传递给upstream中的另一个后端
grpc_next_upstream_timeout time 0 next_upstream过程中的超时时间
grpc_next_upstream_tries number 0 next_upstream中下一个后端的尝试次数
grpc_ssl_protocols 指定nginx与后端建立ssl连接的ssl协议的版本
grpc_ssl_session_reuse on 或 off on 启用与后端https连接的ssl会话复用功能
grpc_ssl_ciphers 设置建立https连接时用于协商使用的加密算法组合
grpc_ssl_server_name on或off off 在与grpc服务器建立ssl连接时,设置是否启用通过SNI或RFC6066传递主机名
grpc_ssl_certificate file nil 指定后端对nginx的ssl证书文件
grpc_ssl_certificate_key file nil 指定后端对nginx的ssl私钥文件
grpc_ssl_password_file file nil 指定后端对nginx的ssl密码文件
grpc_ssl_verify on 或 off off 设置是否启用对grpc后端的ssl证书验证机制
grpc_ssl_name name proxy_pass指令指定的主机名 指定对后端ssl证书验证的主机名
grpc_ssl_crl file nil 证书吊销列表文件
grpc_ssl_trusted_certificate file nil 指定一个pem格式的ca证书文件
grpc_ssl_verify_depth number 1 设置证书链的验证深度
相关推荐
热爱Liunx的丘丘人16 分钟前
Ansible-doc及常用模块
linux·运维·服务器·ansible
tianyuanwo1 小时前
OS/DevOps程序员切入Harness Engineering的入门与进阶指南
运维·devops·harness
高木木的博客1 小时前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
飞飞传输1 小时前
国产化FTP替代方案哪个好?选对平台让传输更安全高效
大数据·运维·安全
一生了无挂1 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
王飞飞不会飞2 小时前
Mac 安装Hermes Agent 过程记录
运维·深度学习·机器学习
徐子元竟然被占了!!2 小时前
Nginx
运维·nginx
SPC的存折3 小时前
6、Docker常用配置
运维·docker·容器
图图玩ai3 小时前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
星谐4 小时前
AutoUploadLL:自动化上传工具开发实践
运维·自动化