• nginx四 之缓存模块


    友情提示: 缓存模块是在动静分离的环境基础上搭建,动静分离可以参考http://www.cnblogs.com/dahuandan/p/6759212.html

    介绍

    提高网站响应速度是web应用不容忽视的目标,在之前动静分离的基础上,我们已经降低了后端服务器压力,提高了处理请求的性能,但是用户请求的静态资源是从硬盘读取,相比内存的性能还有很大的提高;

    Nginx自带的缓存模块可以把静态资源缓存到内存中,提高了用户请求静态资源的速度,并且nginx自带缓存模块配置简单,使用灵活,搭配第三方插件可以实现手动清除指定的缓存。

    配置

    添加缓存模块


    #创建缓存目录
    mkdir /dev/shm/demo
    #进入nginx安装的conf目录
    cd /usr/local/nginx/conf/
    
    #打开nginx.conf文件添加以下内容:
    proxy_temp_path /dev/shm/transfer/proxy_temp_path;
    proxy_cache_path /dev/shm/transfer/proxy_cache_path levels=1:2 keys_zone=cache_one:6072m inactive=7d max_size=30g;
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
    
    proxy_cache cache_one;
    proxy_cache_valid 200 304 302 5d;
    proxy_cache_valid any 7d;
    proxy_cache_key $host$uri$is_args$args;
    add_header X-Cache '$upstream_cache_status from $host';

    完整的配置文件


    #工作进程个数:多开几个可以减少io带来的影响,
    #根据 lscpu查出来的cpus设置(一般为当前机器核心数的1-2倍,最大不超过8),
    worker_processes 2; 
    
    #worker_cpu_affinity需要结合worker_processes使用,一个worker_processes绑定一个CPU,
    #比如两核是01,四核是0001,下面是8核绑定8个worker_processes的示例
    worker_cpu_affinity 01 10;
    
    #error_log logs/error.log info;
    
    
    events {
        #使用epoll模型提高性能
        use epoll;
    
        #单个进程连接数(最大连接数=连接数*进程数)
        worker_connections 65535;
    }
    
    
    http {
    
        #文件扩展名与文件类型映射表 
        include mime.types;
    
        #默认文件类型 
        default_type application/octet-stream;
    
        
        #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,
        #如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
        #注意:如果图片显示不正常把这个改成off
        sendfile on;
    
    
        #长连接超时时间,单位是秒 
        keepalive_timeout 65;
    
        #gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
        gzip on;
        gzip_min_length 1k; #最小1K
        gzip_buffers 16 64K;
        gzip_http_version 1.1;
        gzip_comp_level 6;
        gzip_types text/plain application/x- text/css application/xml application/;
        gzip_vary on;
    
        #header设置:用户真实的ip地址转发给后端服务器
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    
        #缓冲
        client_body_buffer_size 512k;
        proxy_connect_timeout 5;
        proxy_read_timeout 60;
        proxy_send_timeout 5;
        proxy_buffer_size 16k;
        proxy_buffers 4 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
    
        
        
        
        ##########################缓存#####################
        #设置缓存临时目录,要配合linux的内存目录/dev/shm使用的话,必须给赋予目录权限,因为默认root权限
        proxy_temp_path /dev/shm/demo/proxy_temp_path;
    
        #设置缓存目录,并设置Web缓存区名称为cache_one,内存缓存空间大小为128m,7天没有被访问的内容自动清除,硬盘缓存空间大小为5GB。
        proxy_cache_path /dev/shm/demo/proxy_cache_path levels=1:2 keys_zone=cache_one:128m inactive=7d max_size=5g;
    
        #启用html、jsp...<meta>标签不缓存的设置
        proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
    
    
        
        ################################################集群 ###################################################    
    
        #动态资源集群
        upstream dynamic_server { 
    
            #服务器配置 weight是权重的意思,权重越大,分配的概率越大。 
            server 192.168.1.111:8080 weight=1 max_fails=2 fail_timeout=30s;
            server 192.168.1.111:8081 weight=1 max_fails=2 fail_timeout=30s; 
        } 
    
    
        #静态资源集群(一般由nginx管理,因为nginx处理静态资源性能好,如果服
        #务器有限,也可以部署在代理服务器本地)
        upstream static_server { 
            server 192.168.1.111:808 weight=1;
        }
    
    
        ################################################Nginx代理###################################################    
        server {
    
            #监听80端口,可以改成其他端口 
            listen 80;
    
            #nginx服务的域名,通过域名就可以访问应用
            server_name localhost;
    
            ##静态资源存放在nginx服务器的地址
            #root /opt/static/demo;
    
    
            #用于清除缓存的url设置
            #假设一个URL为demo/test.gif,那么就可以通过访问demo/purge/test.gif清除该URL的缓存。
            location ~ /purge(/.*) {
    
                #设置只允许指定的IP或IP段才可以清除URL缓存
                allow 127.0.0.1;
                allow 10.74.147.91;
    
                deny all;
    
                proxy_cache_purge cache_one $host$1$is_args$args;
            }
    
    
            #反向代理:网页、视频、图片文件从nginx服务器读取
            location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
            { 
    
                ##########################缓存#####################
                #使用web缓存区cache_one
                proxy_cache cache_one;
    
                #对200 304 302状态码设置缓存时间5天,其他的7天
                proxy_cache_valid 200 304 302 5d;
                proxy_cache_valid any 7d;
    
                #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
                proxy_cache_key $host$uri$is_args$args;
    
                #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
                #proxy_next_upstream http_502 http_504 error timeout invalid_header;
    
                #增加一个header字段方便在浏览器查看是否击中缓存(生产中可注释)
                add_header X-Cache '$upstream_cache_status from $host';
    
    
    
                #反向代理,静态的由nginx来处理(不配置默认nginx的html目录,静态资源的目录结构必须和tomcat的web工程一致)
                proxy_pass http://static_server; 
    
                #浏览器中缓存30天
                expires 30d;
            } 
    
    
            #反向代理: 其他动态文件转发到后端的tomcat集群
            location ~ .*$ {
    
                proxy_pass http://dynamic_server; 
            }
    
    
            #错误提示页面
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }
        }
    
    
        #静态资源服务器,这里监听本地808端口,因为静态资源服务器和代理服务器是同一台机器,所以有如下配置
        #如果是独立的服务器,直接在集群upstram配置即可。
        server{
    
            listen 808;
    
            server_name static;
    
            #反向代理:网页、视频、图片文件从nginx服务器读取
            location /
            { 
                #浏览器中缓存30天
                expires 30d;
            } 
        }
    }
    View Code

    重新加载配置文件


    /usr/local/nginx/sbin/nginx -s reload

    测试

    添加测试图片


     在/usr/local/nginx/html/demo目录下添加测试图片test.png

    测试缓存


     1、当我们第一次访问测试图片地址 http://192.168.1.111/demo/test.png 是没有缓存命中的:

    2、再次访 问http://192.168.1.111/demo/test.png 我们可以看到命中缓存了:

    3、清除之前访问url的缓存:

  • 相关阅读:
    php redis 操作大全
    迟到的2017读书计划
    将博客搬至CSDN
    maven安装教程
    liunx centOS6.5安装jdk教程
    centOS6.0虚拟机ip配置
    html网页调用本地exe程序的实现方法:
    org.springframework.beans.factory.BeanCreationException 解决异常错误
    sqlserver查看锁表进程及对锁定的表进行解锁
    tomcat免安装版做成windows系统服务
  • 原文地址:https://www.cnblogs.com/dahuandan/p/6765042.html
Copyright © 2020-2023  润新知