跳转至

如何在 Nginx 上支持 HTTP/2

HTTP/2(原名HTTP 2.0)即超文本传输协议第二版,使用于万维网。HTTP/2 主要基于 SPDY 协议,通过对 HTTP 头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措,来减少网络延迟,提高客户端的页面加载速度。HTTP/2 没有改动 HTTP 的应用语义,仍然使用 HTTP 的请求方法、状态码和头字段等规则,它主要修改了 HTTP 的报文传输格式,通过引入二进制分帧实现性能的提升。

编译带有 HTTP/2 支持的 Nginx

默认编译的 Nginx 并不包含 HTTP/2 模块,我们需要加入参数来编译。

我们首先记录下 Nginx 原先的编译配置:

/usr/local/nginx/sbin/nginx -V

得到下面的内容:

nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --add-dynamic-module=../ngx-fancyindex-master/ --add-dynamic-module=../njs/nginx/ --with-http_addition_module --with-http_ssl_module --with-compat --with-http_stub_status_module

我们需要将到 Nginx 的configure arguments复制下来,到安装包的./configure中加入--with-http_v2_module,如果没有 ssl 支持,还需要加入--with-http_ssl_module

参考:

./configure --prefix=/usr/local/nginx --add-dynamic-module=../ngx-fancyindex-master/ --add-dynamic-module=../njs/nginx/ --with-http_addition_module --with-http_ssl_module --with-compat --with-http_stub_status_module --with-http_v2_module --with-http_sub_module

Nginx 配置文件

主要是配置 Nginx 的 server 块:在listen 443 ssl的后面加一个http2即可

server {
listen 443 ssl http2 ;
server_name mirrors.qlu.edu.cn;

ssl_certificate /.../public.crt;
ssl_certificate_key /.../private.key;

...