[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 设置证书链的验证深度
相关推荐
宇钶宇夕1 小时前
三旺 INP314T 网关快速入门指南:从登录到基础配置
运维·自动化·软件工程
2***s6722 小时前
Failed to restart nginx.service Unit nginx.service not found
运维·nginx
游戏开发爱好者82 小时前
iOS 开发者的安全加固工具,从源码到成品 IPA 的多层防护体系实践
android·安全·ios·小程序·uni-app·cocoa·iphone
YongCheng_Liang2 小时前
Zabbix 6.4 完整部署教程:从环境准备到监控实战
linux·运维·zabbix
数字化顾问3 小时前
(65页PPT)大型集团物料主数据管理系统建设规划方案(附下载方式)
大数据·运维·人工智能
翼龙云_cloud3 小时前
阿里云渠道商:新手怎么操作阿里云无影云电脑?
运维·服务器·阿里云·云计算·电脑
回忆是昨天里的海4 小时前
docker存储-目录挂载
运维·docker·容器
爱吃萝卜的美羊羊4 小时前
ubuntu下国内升级ollama
linux·运维·ubuntu
Erwin Rommel5594 小时前
nginx的https服务搭建实验
服务器·nginx·https
mzhan0174 小时前
Linux: console: printk: console_no_auto_verbose
linux·运维·服务器