本文最后更新于 2024-05-13,文章可能存在过时内容,如有过时内容欢迎留言或者联系我进行反馈。

启用HTTP/2协议

HTTP/2协议相比HTTP/1.1效率更高,它支持请求的多路复用,可以减少服务器延迟。在Nginx中配置启用HTTP/2协议,只需要在server中listen的端口后面配置增加http2标识即可。此外,HTTP/2协议需要在TLS/SSL的基础上工作,因此还需要配置SSL证书开启https访问。(注意:Nginx在1.10.0以上版本才支持HTTP/2协议,还需要Nginx已经安装了ngx_http_v2_module模块

以下是我网站的HTTP/2配置:

server {
    listen       443 ssl http2;
    server_name  www.maxbill.cn;

    ssl_certificate      cert/www.maxbill.cn.pem;
    ssl_certificate_key  cert/www.maxbill.cn.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass         http://host:port;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

验证是否Nginx配置生效:在浏览器打开网站地址,然后通过F12开发者工具的网络模块查看请求消息头,如果版本是HTTP/2说明配置生效。

GET https://www.maxbill.cn
状态 200
版本 HTTP/2
传输 215.05 kB(大小 214.69 kB)
请求 优先级Highest
DNS 解析系统

启用Gzip压缩

Nginx的Gzip功能是用于压缩HTTP响应内容的功能。当启用Gzip配置时,在发送给客户端数据之前,Nginx会将响应内容压缩以减小其大小。这样可以减少数据传输的带宽消耗和响应时间,从而提升网站的性能和速度。启用Gzip功能可以在Nginx配置文件中进行设置,通过在http或server中添加Gzip相关参数,可以指定要压缩的响应内容类型、压缩级别以及开启或关闭Gzip功能等。需要注意的是,Gzip压缩需要确保客户端支持Gzip解压,否则无法享受到Gzip功能带来的速度和性能提升。

以下是我网站Gzip的配置:

server {
    listen       443 ssl http2;
    server_name  www.maxbill.cn;

    # 开启gzip压缩
    gzip on;
    gzip_min_length  50k;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/xml text/css text/javascript application/xml application/json application/css application/javascript;

    # SSL证书配置
    ssl_certificate      cert/www.maxbill.cn.pem;
    ssl_certificate_key  cert/www.maxbill.cn.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass         http://host:port;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

验证是否Nginx配置生效:在浏览器打开网站地址,然后通过F12开发者工具的网络模块查看响应头,如果content-encoding的值是gzip和含有vary Accept-Encoding标识说明配置生效。

content-encoding gzip
content-language zh-CN
content-type text/html
date Sun, 12 May 2024 15:01:29 GMT
referrer-policy strict-origin-when-cross-origin
server nginx/1.24.0
strict-transport-security max-age=31536000 ; includeSubDomains
vary Accept-Encoding
x-content-type-options nosniff
X-Firefox-Spdy h2
x-frame-options SAMEORIGIN
x-xss-protection 0

Gzip参数说明:

gzip on; 开启关闭gzip,on开启,off关闭
gzip_min_length  50k; 进行压缩响应数据的最小长度,该数值以下的不压缩
gzip_disable "MSIE [1-6]\."; 对IE6以下的版本都不进行压缩,以下的版本不支持
gzip_vary on; 往响应头信息中添加压缩标识
gzip_proxied any; 该指令设置是否对服务端返回的结果进行Gzip压缩
	off - 关闭Nginx服务器对后台服务器返回结果的Gzip压缩
	expired - 启用压缩,如果header头中包含 "Expires" 头信息
	no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
	no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
	private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
	no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
	no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
	auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
	any - 无条件启用压缩
gzip_comp_level 5; 设置gzip压缩等级1-9,等级越低压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
gzip_buffers 16 8k; 该指令用于处理请求压缩的缓冲区数量和大小
gzip_http_version 1.1; 指定压缩响应所需要的最低HTTP请求版本
压缩源文件类型,根据具体的访问资源类型设定
gzip_types text/plain text/xml text/css text/javascript application/xml application/json application/css application/javascript;