JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx 备忘录 - 07. 长链接与响应压缩

wys521 2024-09-14 13:27:02 精选教程 37 ℃ 0 评论

一、Keepalive 长链接

Keepalive 用于在网络连接中保持持久的连接状态。通常,网络连接在完成请求响应周期后会立即关闭,而 Keepalive 机制可以使连接保持打开状态,以便让后续的请求重用连接。

1. 与上游后端服务器保持长链接

# 激活与上游服务器连接的缓存。
# 设置每个工作进程与上游服务器的最大空闲连接数。
# 当超过此数量,将关闭最近最少使用的连接。
Syntax:	 keepalive connections;
Default: —
Context: upstream

# 设置一个活动连接可以处理的最大并发请求数。
# 在达到最大请求数后,连接将关闭。
Syntax:	 keepalive_requests number;
Default: keepalive_requests 1000;
Context: upstream

# 限制通过一个保持连接处理请求的最大时间。
# 达到此时间后,将在后续请求处理后关闭连接。
Syntax:	 keepalive_time time;
Default: keepalive_time 1h;
Context: upstream

# 设置与上游服务器的空闲连接保持打开的超时时间。
Syntax:	 keepalive_timeout timeout;
Default: keepalive_timeout 60s;
Context: upstream

对于 http 请求需要设置 http 版本为 1.1,并清除 Connection 头信息:

upstream liwy_server {
  server 127.0.0.1:8080;
  keepalive 16;
  keepalive_time 1h;
  keepalive_timeout 60s;
  keepalive_requests 1000;
}

server {
  ...
  location /http/ {
    proxy_pass http://liwy_server;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    ...
  }
}

2. 与客户端保持长连接

# 禁用与部分浏览器的保持连接
Syntax:  keepalive_disable none | browser ...;
Default: keepalive_disable msie6;
Context: http, server, location

# 设置一个活动连接可以处理的最大并发请求数。
# 在达到最大请求数后,连接将关闭。
Syntax:	 keepalive_requests number;
Default: keepalive_requests 1000;
Context: http, server, location

# 限制通过一个保持连接处理请求的最大时间。
# 达到此时间后,将在后续请求处理后关闭连接。
Syntax:	 keepalive_time time;
Default: keepalive_time 1h;
Context: http, server, location

# 设置与客户端的空闲连接保持打开的超时时间。
# 第二个参数设置 Keep-Alive: timeout= time 响应头的值。
Syntax:	 keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location

当客户端发起一个请求到 Nginx 服务器时,服务器会返回响应并在响应头中包含 Keepalive 标识。如果该连接被标记为 Keepalive,客户端和服务器之间的连接将保持打开状态,在一定的时间内可以重复使用。

server {
  listen 80;
  server_name  www.liwy-nginx.com;
  
  # 与客户端保持长链接
  # 部分浏览器禁用 keepalive
  keepalive_disable msie6; 
  # 单链接可并发的请求数量
  keepalive_requests 1000;
  # 连接总时长,超过则断开连接
  keepalive_time 1h;
  # 超过这个时间没有活动断开连接
  keepalive_timeout 75s;
  
  location / {
    proxy_pass http://liwy_server;
  }
}

二、响应压缩

在 Nginx 中,响应压缩是一种优化网站性能的技术。Nginx 压缩支持两种方式,静态压缩和动态压缩。

  • 静态压缩:先把文件压缩为 .gz 文件,客户端访问时会自动下载 .gz 文件,并在客户端自动解压后访问。
  • 动态压缩:客户端发起请求时,nginx 动态将文件压缩后返回给客户端,客户端收到后自动解压并访问。

1. 动态压缩

# 启用或禁用 gzip 压缩。
Syntax:  gzip on | off;
Default: gzip off;
Context: http, server, location, if in location

# 设置压缩缓冲区数量与大小,
# 默认情况下,缓冲区大小等于一个内存页。
# 根据平台的不同,可以是 4K 或 8K。
Syntax:  gzip_buffers number size;
Default: gzip_buffers 32 4k|16 8k;
Context: http, server, location

# 设置压缩级别,范围是 1 到 9。
Syntax:	 gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http, server, location

# 根据 User-Agent 禁用部分浏览器压缩功能。
Syntax:	 gzip_disable regex ...;
Default: —
Context: http, server, location

# 设置压缩所需的最低 http 版本
Syntax:	 gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location

# 设置将被压缩的响应的最小长度。
# 该长度仅由 Content-Length 响应头确定。
Syntax:	 gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location

# 指定 MIME 类型的响应启用 gzip 压缩
Syntax:	 gzip_types mime-type ...;
Default: gzip_types text/html;
Context: http, server, location

# 是否设置 Vary: Accept-Encoding 响应头
Syntax:	 gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location

nginx 开启动态压缩配置:

server {
  # ...其他配置

  # 开启gzip压缩
  gzip on;
  gzip_types text/plain text/css 
             application/json 
             application/javascript 
             text/xml application/xml 
             application/xml+rss 
             text/javascript;
  gzip_min_length 1k;
  gzip_comp_level 6;
  gzip_vary on;
  # 禁用对 IE 1 到 7 版本的 gzip 压缩,
  # 存在兼容性问题
  gzip_disable "MSIE [1-7]\.";
  gzip_buffers 16 8k;
  gzip_http_version 1.1;

  # ...其他配置
}

可以到浏览器中查看配置后的效果:

2. 静态压缩

# 开启静态压缩功能
Syntax:	 gzip_static on | off | always;
Default: gzip_static off;
Context: http, server, location

首先 nginx 需要启用静态压缩模块:

# 查看 Nginx 是否启用静态压缩模块
./nginx -V

# 重新编译并启用静态压缩模块
./configure --prefix=/opt/nginx \
--with-http_gzip_static_module

make

# 备份并替换 nginx 执行文件
mv /opt/nginx/sbin/nginx \
/opt/nginx/sbin/nginx.old
cp /opt/nginx-1.26.1/objs/nginx \
/opt/nginx/sbin/

# 检查 nginx 是否正常
./nginx -t

配置 nginx:

server {
  listen 80;
  server_name  www.liwy-nginx.com;
  
  gzip_static on;
  
  location / {
    root html/static;
    index index.html;
  }
}

将准备好的压缩文件拷贝到 html/static 目录下正常访问即可:

cp *.js.gz /opt/nginx/html/static
cp *.css.gz /opt/nginx/html/static

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表