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

参考

posted @ 2023-07-23 18:03  花酒锄作田  阅读(1390)  评论(0编辑  收藏  举报