前言
首先理解一下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 | server { |
相关配置介绍
- http2 on:打开http2,该配置会让Nginx代理Http2的消息,这个配置是在1.25.1版本之后才有的,1.25.1之前的版本需要使用listen 8080 ssl http2
- 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要大,要考虑实际情况
- listen 8080 ssl、ssl_certificate、ssl_certificate_key:这三个配置是设置nginx ssl证书以及开启https,这一步对于http2来说,也不是必要的,只是对于浏览器来说,如果不配置ssl,那么浏览器就无法在握手阶段使用ALPN确定使用的协议,则默认会使用http/1.1,所以这一步是为了浏览器能通过http2向nginx发起请求