[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 设置证书链的验证深度
相关推荐
lwx9148528 分钟前
Linux-sftp命令详解
linux·运维·服务器
舒一笑11 分钟前
客户现场没有外网,Docker 服务怎么部署?
运维·后端·自动化运维
奥升新能源平台17 分钟前
奥升充电最小化高可用机房部署方案
运维·安全·开源·能源·springcloud
珠海西格19 分钟前
四可装置如何监测组件衰减与逆变器效率?
大数据·运维·服务器·分布式·能源
摇滚侠37 分钟前
Windows 版 Nginx 关闭
运维·windows·nginx
木子欢儿1 小时前
使用 Docker 快速搭建 MinIO 文件存储服务
运维·docker·容器
BieberChen1 小时前
ubuntu定时执行脚本---crontab详细使用指南
linux·运维·ubuntu
kida_yuan1 小时前
【以太来袭】5. Besu 组件组成与协同
运维·区块链
wzl202612132 小时前
基于规则引擎的新客欢迎语自动化:从0到1搭建智能破冰系统
大数据·运维·自动化
urkay-2 小时前
Android 图片轮廓提取与重叠轮廓合并处理
android·算法·iphone