一、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
本文暂时没有评论,来添加一个吧(●'◡'●)