使用Nginx压缩文件、设置反向代理缓存提高响应速度
Gzip压缩:
最开始,这个竟然要6m多(大到不寻常),响应的速度3分多钟。
所以先对返回的文件进行gzip压缩。判断返回的资源是否有使用gzip压缩,观察响应头部里面,如果没有
Content-Encoding: gzip;这意味着文件是在没有压缩的情况下提供。
在nginx.conf中进行如下配置:
http{
....
#使用gzip压缩;
gzip on ; #对大于1k的文件进行压缩;
gzip_min_length: 1k; #压缩的程度(~,数字越大压缩程度越大,对应消耗时间和cpu越多);
gzip_comp_level ; #对特定文件进行压缩;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; 对以上文件进行压缩;
...
}
配置好后reload Nginx,再次访问
从上图可以看到,压缩效果很明显,此时的vendor从原来的6mb压缩至980kb,体积小了响应时间也小了。开启的level为5,虽然越高压缩后体积就会越小,尝试将level调制9,试试压缩后体积大小:
调制为9后发现体积跟之前变化不是很大(按比例来说)。再试试8
查找资料发现以下回答:
发现其实1,2的时候变化较大,后续的压缩体积变化不大,而且压缩程度越高,会耗费更多的cpu和时间,所以这里一般不需要设置得太高;
代理缓存:
文件大小得到压缩了,此时在尝试使用缓存提高一下响应时间;压缩后vendor大小在1mb左右,响应时间大概需要1min,这跟原来比虽然快了很多,但还是太慢;
在nginx.conf中添加如下配置:
http{
....
proxy_buffering on;
proxy_temp_path /usr/local/nginx-1.14.2/nginx-cache/temp;
proxy_cache_path /usr/local/nginx-1.14.2/nginx-cache/cache levels=1:2 keys_zone=my-cache:100m inactive=600 max_size=2g;
....
location /ospf/ {
......
proxy_cache my-cache;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
...
}
}
配置说明:
proxy_buffering on:代理的时候,开启缓冲后端服务器的响应; proxy_temp_path : 缓存临时目录。后端的响应并不直接返回客户端,而是先写到一个临时文件中,然后被rename一下当做缓存放在 proxy_cache_path 。 proxy_cache_path: 设置缓存目录,目录里的文件名是cache_key 的MD5值。 levels=: 表示采用2级目录结构,第一层目录只有一个字符 keys_zone=my-cache:100m Web缓存区名称为my-cache,内存缓存空间大小为100MB,这个缓冲zone可以被多次使用。 inactive=600m 表示600分钟没有被访问的内容自动清除 max_size=2g 硬盘最大缓存空间为2GB,超过这个大小将清除最近最少使用的数据。 proxy_cache my-cache; 定义用于缓存的共享内存区域。 proxy_cache_valid:缓存的有效期;指定对200、301或者302有效代码缓存的时间长度。特定参数any表示对任何响应都缓存一定时间长度。 proxy_cache_key 用来区分缓存文件的key,作为缓存key的一个字符串,用于存储或者获取缓存值。默认值为$scheme$proxy_host$uri$is_args$args
然后再次访问(已访问过一次,使其有缓存文件)
可以看到,开启了缓存,速度较之前又快了很多,没用缓存之前是1min,现在大约是10s的时间,其他较小的文件大部分都是ms级的响应速度。
总结:使用gzip压缩可以缩小文件体积,使用缓存可以不用直接访问源服务器,直接在Nginx代理缓存中返回资源,从而加快响应的速度,以上虽然从原来的3min到10s左右的提升,但是对应加载一个页面的速度来说还是太慢,还有一个关键的问题是如果缩小该文件的大小。
下面是我的一个配置demo
#运行用户
#user nobody; #启动进程,通常设置成和cpu的数量相等
worker_processes 1; #全局错误日志
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #PID文件,记录当前启动的nginx的进程ID
#pid logs/nginx.pid; #工作模式及连接数上限
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
} #设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型(邮件支持类型),类型由mime.types文件定义
include mime.types;
default_type application/octet-stream; #设定日志
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main;
#rewrite_log on; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on; #连接超时时间
keepalive_timeout 120;
tcp_nodelay on; #gzip压缩开关 负责压缩数据流
gzip on;
#对于超过10k的数据进行压缩
gzip_min_length 10k;
#压缩的程度(0~9,数字越大压缩程度越大,对应消耗时间和cpu越多,其实1,2的时候变化较大,后续的压缩体积变化不大);
gzip_comp_level 2;
#对于以下类型数据进行压缩
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; #代理缓存
proxy_buffering on;
proxy_temp_path /usr/local/nginx-1.14.2/nginx-cache/temp;
proxy_cache_path /usr/local/nginx-1.14.2/nginx-cache/cache levels=1:2 keys_zone=my-cache:100m inactive=600 max_size=2g; #设定实际的服务器列表 设定负载均衡的服务器列表
upstream list_server{
#weigth参数表示权值,权值越高被分配到的几率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8080 weight=2;
} server {
#监听80端口,80端口是知名端口号,用于HTTP协议
listen 80; #定义使用localhost访问
server_name localhost; #编码格式
#charset utf-8; #反向代理的路径(和upstream绑定),location 后面设置映射的路径
#对所有请求进行负载均衡请求
location / {
#root /u01; #定义服务器的默认网站根目录位置
root html;
index index.html index.htm; #定义首页索引文件的名称
proxy_pass http://list_server; #请求转向list_server 定义的服务器列表 #以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 #代理缓存
proxy_cache my-cache;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
} #静态文件,nginx自己处理
#location ~ ^/(images|javascript|js|css|flash|media|static)/ {
# root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;
# #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
# expires 30d;
#} #禁止访问 .htxxx 文件
#location ~ /\.ht {
# deny all;
#} #错误处理页面(可选择性配置)
#error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }
使用Nginx压缩文件、设置反向代理缓存提高响应速度的更多相关文章
- Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存
Nginx地址重写 Nginx rewrite rewrite语法规则1).变量名可以使用 "=" 或 "!=" 运算符~ 区分大小写~* 不区分大小写^~ 禁 ...
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...
- nginx反向代理缓存服务器的构建
一:代理服务可简单的分为正向代理和反向代理: 正向代理:用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送 ...
- 安装Nginx并为node.js设置反向代理
最近看了反向代理和正向代理的东西,想到自己的node.js服务器是运行在3333端口的,也没有为他设置反向代理,node.js项目的一些静态文件是完全可以部署在Nginx上,以减少对node.js的请 ...
- nginx清除反向代理缓存
nginx重启无法清除反向代理的缓存,可以清空安装目录下的proxy_cache文件夹里的内容来清除.
- nginx反向代理缓存配置
关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...
- Nginx的安装及反向代理设置
因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5. ...
- 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》
本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...
- nginx基于TCP的反向代理
一.4层的负载均衡 Nginx Plus的商业授权版开始具有TCP负载均衡的功能.从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请.也就是说,Nginx除了 ...
随机推荐
- ubuntu学习笔记-sudo/gedit
1.sudo命令 sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 和管理时间 ...
- ogg中断处理
ogg因为网络问题导致中断无法启动,需要重新抽取数据: --前滚抽取进程生成新的trail文件 alter extract ext147 etrollover alter ext147 extseqn ...
- 源码安装 qemu-2.0.0 及其依赖 glib-2.12.12
源码安装qemu-2.0.0 下载源代码并解压 http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 .tar.gz 编译及安装: cd q ...
- VMware中linux虚拟机无法全屏显示的解决方法(1080P分辨率调节)
安装了linux(这里以Ubuntu为例)后,发现无法全屏,如下图 即使在设置里面也找不到适合我的显示器的分辨率(我的显示器为1080P) 网上很多人都说是因为没装显卡驱动,其实不是这样的.要解决这个 ...
- 关于int指令
1.关于int指令 格式:int n n为中断类型码: 作用: 调用n号中断程序: 指令“int n”的执行过程: 1]获取中断类型码n 2]标志寄存器入栈,IF. ...
- 解压 压缩 C#
public class SharpZip { public SharpZip() { } /// <summary> /// 压缩 /// </summary> /// &l ...
- BFS解决九宫重排问题
问题 1426: [蓝桥杯][历届试题]九宫重排 时间限制: 1Sec 内存限制: 128MB 提交: 215 解决: 47 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个 ...
- CSS 中蒙版相关设置二三事
写 蒙版 时会使用透明度,第一反应会使用 opacity 但这个会使子元素继承,蒙版内还有内容会被影响,从而会设置 background 属性的 rgba 值. 需要注意的是 rgba 和 gba 颜 ...
- 自定义MessageConverter--消息转换器
我们在进行发送消息的时候,正常情况下消息体为二进制的数据方式进行传输,如果希望内部帮我们进行转换,或者指定自定义的转换器,就需要用到MessageConverter 自定义常用转换器:MessageC ...
- MySQL_(Java)使用JDBC向数据库中插入(insert)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...