zoukankan      html  css  js  c++  java
  • Nginx缓存配置

    访问我的博客

    前言

    本文介绍利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,前几篇文章介绍了 Nginx 的动静分离以及 CDN 技术,在其基础上,再对整个页面进行缓存,将大大提高服务器的负载能力。

    基础环境

    环境搭建

    Nginx 与 nginx_ngx_cache_purge 下载解压

    安装 wget

    yum install wget
    

    下载 Nginx

    wget  http://nginx.org/download/nginx-1.12.1.tar.gz
    

    解压 Nginx/usr/local/src/ 目录

    tar -zxvf nginx-1.8.1.tar.gz -C /usr/local/src/
    

    下载 ngx_cache_purge

    wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
    

    解压到 Nginx 同一级目录

    tar -zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/src/
    

    目录结构为

    ---/usr/local/src
       --nginx-1.8.1
       --ngx_cache_purge-2.3
    

    进入 Nginx 解压目录

    cd nginx-1.8.1
    

    安装必要依赖

    yum -y install gcc pcre-devel openssl openssl-devel
    

    检查安装环境,并指定将来要安装的路径和要安装的插件

    ./configure --prefix=/usr/local/nginx/ --with-http_realip_module --add-module=../ngx_cache_purge-2.3
    

    参数说明:
    --prefix: 将 nginx 安装到此目录
    --with-http_realip_module 启用获取用户真实 IP 模块
    --add-module=../ngx_cache_purge-2.3 添加 ngx_cache_purge 模块,用于缓存

    进行编译安装

    make && make install
    

    编译完成后,没有出现 error 为编译安装成功

    设置 Nginx 缓存

    编辑 nginx.conf 配置文件

    vi /usr/local/nginx/conf/nginx.conf
    

    添加如下配置

    # 需要在 /tmp 目录下创建 cache 文件夹!
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=tmpcache:200m inactive=10m max_size=5g;
    
    server {
    	listen       80;
    	server_name  www.domain.com;#你的域名
    	charset utf8;
    
    	proxy_set_header        Host            $host;
    	proxy_set_header        X-Real-IP       $remote_addr;
    	proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header        X-Up-Calling-Line-Id $http_x_up_calling_line_id;
    	proxy_ignore_headers    X-Accel-Expires Expires Cache-Control Set-Cookie;
    
    	access_log logs/access.log  main;
    
    	location / {
    			proxy_pass http://127.0.0.1:8080;
    			#proxy_cache 的值是 proxy_cache_path 中的 keys_zone 的值
    			proxy_cache tmpcache;
    			#缓存 key 的值
    			proxy_cache_key $host$uri$is_args$args;
    			proxy_cache_valid 200 301 5m;
    			proxy_cache_use_stale updating error timeout invalid_header http_500 http_502 http_503 http_504;
    
    			expires 1m;
    			# 将缓存的状态添加到 Header 中
    			add_header X-Cache '$upstream_cache_status';
    	}
    }
    

    启动 Nginx

    /usr/local/nginx/sbin/nginx
    

    启动 Tomcat

    可以使用自己的项目,或者使用我提供的项目来进行测试。

    wget http://ojt4b2cr5.bkt.clouddn.com/SpringDemo.war
    

    将下载的 war 包放到 Tomcat 的 webapps 目录下,启动 Tomcat。

    测试 Nginx 缓存

    缓存之前

    查看 /tmp/cache 目录, 目录下面没有任何文件

    修改本机(windows)的 hosts 文件,将配置的域名指向服务器 IP

    192.168.200.129 www.domain.com
    

    打开浏览器访问 www.domain.com/SpringDemo/testpage1

    mark

    发现 X-Cache 的状态为 MISS ,说明没有缓存。

    再次刷新页面后

    mark

    X-Cache 的状态已经变成了 HIT

    同时在服务器上查看 /tmp/cache 目录

    cd /tmp/cache/

    发现该目录下面已经多了文件目录,进去之后打开文件,发现正是刚刚访问页面的源码,说明 Nginx 的缓存已经配置成功了。只要是配置的域名下面的页面, 如果没有进行过滤,都会缓存到服务器。当第二次访问的时候,请求经过 Nginx 服务器时,Nginx 直接返回已经缓存的静态页面,这样将大大降低应用服务器 Tomcat 的负载。

    需要注意的是:并不是该域名下的所有页面都需要进行缓存,如果缓存有误,会出现很严重的问题。比如不正确的将域名下的用户中心进行了缓存,当其他用户也进入页面的时候,显示的全部都是第一个进入该页面用户的信息。因此建议做缓存时,最好根据域名来做, 根据用户不同显示不同的页面的地址就不要做缓存。当然,如果接口地址规范,亦可以通过 Nginx 正则匹配路径的方式,只将某些匹配的路径做缓存。

  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/vcmq/p/9484379.html
Copyright © 2011-2022 走看看