前言

首先理解一下Nginx代理Http2,按照nginx代理http1的逻辑,客户端与nginx使用http/1.1进行数据传输,nginx与服务端也使用http/1.1进行数据传输,那么代理http2时,应该也是如此,但是实际不太一样,可能出于某些考虑,nginx似乎并不支持反向代理http2,即无法使用http2请求服务端,因为proxy_http_version配置只支持1.0和1.1,所以Nginx代理http2只支持客户端像nginx提交http2请求

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {

listen 8080 ssl;
server_name localhost;
http2 on;

ssl_certificate certificate.pem;
ssl_certificate_key certificate.key;

location /activity/servicetime {
keepalive_requests 10000;
fastcgi_hide_header Access-Control-Allow-Origin;
proxy_hide_header Access-Control-Allow-Origin;
add_header Access-Control-Allow-Origin *;
proxy_pass http://server;
proxy_http_version 1.1;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_connect_timeout 100;
}

}

相关配置介绍

  1. http2 on:打开http2,该配置会让Nginx代理Http2的消息,这个配置是在1.25.1版本之后才有的,1.25.1之前的版本需要使用listen 8080 ssl http2
  2. keepalive_requests 10000:这个配置是设置单个tcp连接上最大请求数的,默认是1000,这个参数的目的之一是为了控制tcp连接在合适的时候关闭,而不是一直开着,占用资源。举个例子,在http/1.1的情况下,请求数为10000,并发数为10,那么客户端会直接创建10个连接,每个连接会按顺序进行1000个请求的提交,正好全部提交完的情况下,nginx将10个连接全部关闭,同等情况下,换成http2,那么nginx只会创建一个连接,但是一个连接只能进行1000个请求的提交,所以nginx会频繁的关闭连接,但实际上是没有必要的。所以这里设置的10000只是代表相对于http/1.1来说,使用http2时,这个值可以设置大一点,并不是代表一定要比默认的1000要大,要考虑实际情况
  3. listen 8080 ssl、ssl_certificate、ssl_certificate_key:这三个配置是设置nginx ssl证书以及开启https,这一步对于http2来说,也不是必要的,只是对于浏览器来说,如果不配置ssl,那么浏览器就无法在握手阶段使用ALPN确定使用的协议,则默认会使用http/1.1,所以这一步是为了浏览器能通过http2向nginx发起请求

本站总访问量:次本站总访问数:人
本站由 Peng Tong 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。