Gzip压缩:
最开始,这个竟然要6m多(大到不寻常),响应的速度3分多钟。
所以先对返回的文件进行gzip压缩。判断返回的资源是否有使用gzip压缩,观察响应头部里面,如果没有
Content-Encoding: gzip;这意味着文件是在没有压缩的情况下提供。
在nginx.conf中进行如下配置:
1 http{ 2 .... 3 #使用gzip压缩; 4 gzip on ; 5 6 #对大于1k的文件进行压缩; 7 gzip_min_length: 1k; 8 9 #压缩的程度(1~10,数字越大压缩程度越大,对应消耗时间和cpu越多); 10 gzip_comp_level 5; 11 12 #对特定文件进行压缩; 13 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; 对以上文件进行压缩; 14 ... 15 }
配置好后reload Nginx,再次访问
从上图可以看到,压缩效果很明显,此时的vendor从原来的6mb压缩至980kb,体积小了响应时间也小了。开启的level为5,虽然越高压缩后体积就会越小,尝试将level调制9,试试压缩后体积大小:
调制为9后发现体积跟之前变化不是很大(按比例来说)。再试试8
查找资料发现以下回答:
发现其实1,2的时候变化较大,后续的压缩体积变化不大,而且压缩程度越高,会耗费更多的cpu和时间,所以这里一般不需要设置得太高;
代理缓存:
文件大小得到压缩了,此时在尝试使用缓存提高一下响应时间;压缩后vendor大小在1mb左右,响应时间大概需要1min,这跟原来比虽然快了很多,但还是太慢;
在nginx.conf中添加如下配置:
1 http{ 2 .... 3 proxy_buffering on; 4 proxy_temp_path /usr/local/nginx-1.14.2/nginx-cache/temp; 5 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; 6 .... 7 location /ospf/ { 8 ...... 9 proxy_cache my-cache; 10 proxy_cache_valid 200 304 301 302 8h; 11 proxy_cache_valid 404 1m; 12 proxy_cache_valid any 1d; 13 proxy_cache_key $host$uri$is_args$args; 14 ... 15 } 16 }
配置说明:
proxy_buffering on:代理的时候,开启缓冲后端服务器的响应; proxy_temp_path : 缓存临时目录。后端的响应并不直接返回客户端,而是先写到一个临时文件中,然后被rename一下当做缓存放在 proxy_cache_path 。 proxy_cache_path: 设置缓存目录,目录里的文件名是cache_key 的MD5值。 levels=1:2 表示采用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
1 #运行用户 2 #user nobody; 3 4 #启动进程,通常设置成和cpu的数量相等 5 worker_processes 1; 6 7 #全局错误日志 8 #error_log logs/error.log; 9 #error_log logs/error.log notice; 10 #error_log logs/error.log info; 11 12 #PID文件,记录当前启动的nginx的进程ID 13 #pid logs/nginx.pid; 14 15 #工作模式及连接数上限 16 events { 17 worker_connections 1024; #单个后台worker process进程的最大并发链接数 18 } 19 20 21 #设定http服务器,利用它的反向代理功能提供负载均衡支持 22 http { 23 #设定mime类型(邮件支持类型),类型由mime.types文件定义 24 include mime.types; 25 default_type application/octet-stream; 26 27 #设定日志 28 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 29 # '$status $body_bytes_sent "$http_referer" ' 30 # '"$http_user_agent" "$http_x_forwarded_for"'; 31 32 #access_log logs/access.log main; 33 #rewrite_log on; 34 35 #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, 36 #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. 37 sendfile on; 38 #tcp_nopush on; 39 40 #连接超时时间 41 keepalive_timeout 120; 42 tcp_nodelay on; 43 44 #gzip压缩开关 负责压缩数据流 45 gzip on; 46 #对于超过10k的数据进行压缩 47 gzip_min_length 10k; 48 #压缩的程度(0~9,数字越大压缩程度越大,对应消耗时间和cpu越多,其实1,2的时候变化较大,后续的压缩体积变化不大); 49 gzip_comp_level 2; 50 #对于以下类型数据进行压缩 51 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; 52 53 #代理缓存 54 proxy_buffering on; 55 proxy_temp_path /usr/local/nginx-1.14.2/nginx-cache/temp; 56 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; 57 58 59 #设定实际的服务器列表 设定负载均衡的服务器列表 60 upstream list_server{ 61 #weigth参数表示权值,权值越高被分配到的几率越大 62 server 127.0.0.1:8080 weight=1; 63 server 127.0.0.1:8080 weight=2; 64 } 65 66 server { 67 #监听80端口,80端口是知名端口号,用于HTTP协议 68 listen 80; 69 70 #定义使用localhost访问 71 server_name localhost; 72 73 #编码格式 74 #charset utf-8; 75 76 #反向代理的路径(和upstream绑定),location 后面设置映射的路径 77 #对所有请求进行负载均衡请求 78 location / { 79 #root /u01; #定义服务器的默认网站根目录位置 80 root html; 81 index index.html index.htm; #定义首页索引文件的名称 82 proxy_pass http://list_server; #请求转向list_server 定义的服务器列表 83 84 #以下是一些反向代理的配置可删除 85 proxy_redirect off; 86 #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 87 proxy_set_header Host $host; 88 proxy_set_header X-Real-IP $remote_addr; 89 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 90 client_max_body_size 10m; #允许客户端请求的最大单文件字节数 91 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数 92 proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时) 93 proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时) 94 proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时) 95 proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 96 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 97 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) 98 proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 99 100 #代理缓存 101 proxy_cache my-cache; 102 proxy_cache_valid 200 304 301 302 8h; 103 proxy_cache_valid 404 1m; 104 proxy_cache_valid any 1d; 105 proxy_cache_key $host$uri$is_args$args; 106 } 107 108 #静态文件,nginx自己处理 109 #location ~ ^/(images|javascript|js|css|flash|media|static)/ { 110 # root D: 1_WorkspaceProjectgithubzpSpringNotesspring-securityspring-shirosrcmainwebappviews; 111 # #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 112 # expires 30d; 113 #} 114 115 #禁止访问 .htxxx 文件 116 #location ~ /.ht { 117 # deny all; 118 #} 119 120 #错误处理页面(可选择性配置) 121 #error_page 404 /404.html; 122 123 # redirect server error pages to the static page /50x.html 124 # 125 error_page 500 502 503 504 /50x.html; 126 location = /50x.html { 127 root html; 128 } 129 130 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 131 # 132 #location ~ .php$ { 133 # proxy_pass http://127.0.0.1; 134 #} 135 136 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 137 # 138 #location ~ .php$ { 139 # root html; 140 # fastcgi_pass 127.0.0.1:9000; 141 # fastcgi_index index.php; 142 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 143 # include fastcgi_params; 144 #} 145 146 # deny access to .htaccess files, if Apache's document root 147 # concurs with nginx's one 148 # 149 #location ~ /.ht { 150 # deny all; 151 #} 152 } 153 154 155 # another virtual host using mix of IP-, name-, and port-based configuration 156 # 157 #server { 158 # listen 8000; 159 # listen somename:8080; 160 # server_name somename alias another.alias; 161 162 # location / { 163 # root html; 164 # index index.html index.htm; 165 # } 166 #} 167 168 169 # HTTPS server 170 # 171 #server { 172 # listen 443 ssl; 173 # server_name localhost; 174 175 # ssl_certificate cert.pem; 176 # ssl_certificate_key cert.key; 177 178 # ssl_session_cache shared:SSL:1m; 179 # ssl_session_timeout 5m; 180 181 # ssl_ciphers HIGH:!aNULL:!MD5; 182 # ssl_prefer_server_ciphers on; 183 184 # location / { 185 # root html; 186 # index index.html index.htm; 187 # } 188 #} 189 190 }