• 使用Nginx压缩文件、设置反向代理缓存提高响应速度


    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 }
  • 相关阅读:
    安全测试的概述和用例设计
    性能测试(四)常见调优
    性能测试(三)常见的性能测试缺陷
    Jmeter(七)六种参数化的方式
    Jmeter(六)所有的断言
    接口测试的问题解答
    ES学习
    flutter 之BottomNavigationBar属性
    flutter StaggeredGridView.countBuilder 上方取消空白
    flutter升级、回退到指定版本---mac版
  • 原文地址:https://www.cnblogs.com/weixupeng/p/11163961.html
Copyright © 2020-2023  润新知