前言

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 设置证书链的验证深度

参考

[nginx]反向代理grpc的更多相关文章

  1. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  2. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  3. Nginx反向代理部署指南

    一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. Nginx反向代理和负载均衡

    一.Nginx反向代理设置 从80端口转向其他端口反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的 ...

  6. nginx 反向代理

    nginx 反向代理 vim nginx.conf http { ..... upstream "tomcatweb" { server 172.30.13.199:8080; s ...

  7. 关于nginx反向代理后获取不到客户端的真实ip地址问题

    前段时间在我的网站上用nginx做了一下反向代理,最近发现不能获取客户端ip了,都是拿到的127.0.0.1的本地ip... 通过查资料后,再去看了看我的配置文件,结果发现我没有如下配置: nginx ...

  8. Nginx反向代理配置可跨域

    由于业务需要,同一项目中的前端代码放在静态环境中,而后端代码放在tomcat中,但此时问题却出现了:前端使用ajax请求后端获取数据时出现如下报错 XMLHttpRequest cannot load ...

  9. Nginx反向代理搭建配置

    1.反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个 ...

  10. nginx反向代理docker registry报”blob upload unknown"解决办法

    问题症状:keepalived+nginx反向代理后端docker registry群集时,使用docker客户机向registry push镜像时出现 "blob upload unkno ...

随机推荐

  1. ubuntu18.04.4修改静态ip

    ubuntu18.04.4修改静态ip 修改interfaces文件 sudo vim /etc/network/interfaces

  2. 2021-08-03:完美洗牌问题。给定一个长度为偶数的数组arr,假设长度为N*2,左部分:arr[L1……Ln],右部分: arr[R1……Rn],请把arr调整成arr[L1,R1,L2,R2,

    2021-08-03:完美洗牌问题.给定一个长度为偶数的数组arr,假设长度为N*2,左部分:arr[L1--Ln],右部分: arr[R1--Rn],请把arr调整成arr[L1,R1,L2,R2, ...

  3. 2021-09-28:合并区间。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠

    2021-09-28:合并区间.以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合并所有重叠的区间,并返回一个不重叠 ...

  4. .Net8顶级技术:边界检查之IR解析(慎入)

    前言 C#这种语言之所以号称安全的,面向对象的语言.这个安全两个字可不是瞎叫的哦.因为JIT会检查任何可能超出分配范围的数值,以便使其保持在安全边界内.这里有两个概念,其一边界检查,其二IR解析.后者 ...

  5. HDU - 7125 Master of Shuangpin

    D. Master of Shuangpin time limit per test 1 second memory limit per test 256 megabytes input standa ...

  6. 如何基于G6进行双树流转绘制?

    1. 背景 业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达. 技术背景:在开发之前 ...

  7. .net 搜索联想词

    思路: 1.ajax请求后台方法获取数据. 2.通过jquery将请求到的数据显示在页面上. 前台 <div class="sc_con" id="bbsearch ...

  8. 通过实例了解vue3.3更新的特征

    开场白 5月份,vue团队发布了 vue3.3. 这次小版本的发布主要解决了-- Vue 与 TypeScript 一起使用时的许多长期存在的痛点. 下面我们一起来学习一下vue3.3新特征 准备新新 ...

  9. .NET Core 程序实现 Windows 系统 Development、Staging、Production 三种环境的无感部署

    〇.前言 日常开发中,程序的环境切换是相当频繁的了,如果不同环境中的某些参数不同,那就需要每次编辑之前手动进行修改,比较麻烦,效率低下. 本文将以 .NET Core WebAPI 项目的配置方法为例 ...

  10. Python 包安装和 postgresql 的一些问题

    今天安装 hgvs 这个 python 包的时候,遇到几个比较有代表性的问题,记录分享一下. hgvs is a Python package to parse, format, validate, ...