`
lzj0470
  • 浏览: 1246301 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Nginx proxy_cache 使用示例

阅读更多
原文出处:http://blog.chenlb.com/2010/04/nginx-proxy-cache.html

动态网站使用缓存是很有必要的。前段时间使用了 nginx proxy_stroe 来保存静态页面,以达到缓存的目的。当然 proxy stroe 用来做缓存是不够好的方案。

缓存这一块当然还有 squid 之类的独立缓存服务器。如果使用 nginx 为 web 服务器,还要加个 squid 来缓存,是觉得多了一个 http 请求层。幸好 nginx 0.7 有了 proxy_cache 来做这个缓存的事。

之前来有个 ncache 是新浪员工开发的 nginx 模块(好像只能在 nginx 0.6 中编译无运行)。已经停止维护了,已经被加到 nginx 标准库里了。昨天还不知道 proxy_cache 就是 ncache 的功能时,还在努力匹配 ncahce,浪费了N多时间,最终没看到可以缓存。后来尝试 proxy_cache 才解决,且使用简单。

安装 Nginx 请看:安装 Nginx 配置负载均衡,如果没有 pcre 库,可以到http://sourceforge.net/projects/pcre/files/ 下载(我用的是 8.02)。

nginx 0.7.65 默认安装就可以了。

安装好后开始匹配 proxy_cache,先准备后台服务器的文件,如是 time.jsp,内容:
<%=new java.util.Date() %>


conf/nginx.conf:
user  nobody;   
worker_processes  1;   
error_log  logs/error.log;   
pid        logs/nginx.pid;   
  
events {   
    worker_connections  1024;   
    use epoll;   
}   
  
http {   
    include       mime.types;   
    default_type  application/octet-stream;   
  
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   
                      '$status $body_bytes_sent "$http_referer" "$request_body" '   
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';   
  
    sendfile        on;   
    keepalive_timeout  60;   
  
    proxy_cache_path /var/cache0 levels=1:2 keys_zone=pnc:100m inactive=2h max_size=10g;   
    upstream backend {   
        server 192.168.1.2:8080  weight=6;   
        #server 192.168.1.3:8080  weight=4;   
    }   
  
    server {   
        listen       80;   
        server_name  localhost;   
  
        access_log  logs/access.80.log  main;   
  
        location / {   
            proxy_cache pnc;   
            proxy_temp_path /var/nginx_temp;   
            #proxy_cache_key "$request_uri$request_body";   
            #proxy_cache_methods GET POST;   
            proxy_cache_valid 200 304 1m;   
            proxy_pass http://backend;   
        }   
  
        error_page   500 502 503 504  /50x.html;   
        location = /50x.html {   
            root   html;   
        }   
    }   
}  
启动 nginx 后,打开浏览器,可以狂刷 Ctrl + F5,可以看到一样的页面。一分钟后再会一个新的页面。

是 proxy_cache_valid 200 304 1m; 告诉 nginx 后台返回的结果是 200 或 304 的响应,用 1m(分钟)的缓存。

proxy_cache_key 默认是 "$scheme$host$request_uri"。

proxy_cache_methods 默认是 GET HEAD。

当要缓存 post 请求后,要用 proxy_cache_methods POST 来打开。并且 proxy_cache_key 要对,post 的请求 query string 是在请求体内,所以加 $request_body 作为 key 的一部分。要用 post ,上面匹配去了注释就可以了。

这些匹配指令详情请看官方:http://wiki.nginx.org/NginxHttpProxyModule,
中文版:http://wiki.nginx.org/NginxChsHttpProxyModule

分享到:
评论

相关推荐

    nginx缓存清除插件ngx_cache_purge.zip

    ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_...示例:nginx扩展模型ngx_cache_purge缓存清理插件

    Nginx服务器作反向代理时的缓存配置要点解析

    proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g; proxy_cache_key $host$request_uri; server { server_name www.jb51.net jb51.net; root /home/www.jb51.net/web; index ...

    nginx共享内存机制详解

    proxy_cache_path /Users/Mike/nginx-cache levels=1:2 keys_zone=one:10m max_size=10g inactive=60m use_temp_path=off; 这里只是声明的一个名称为one,最大可用内存为10g的共享内存。这里面各个参数的含义如下: ...

    实战Nginx高性能Web服务器

    13、高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式 内容:讲述一种提供双层缓存抗穿透的HTTP服务缓存解决方案。 14、高性能Web服务器Nginx的配置与部署研究(14)...

    nginx(1-9-8).syno.tar官方镜像

    $ docker run -d -p 80:80 --read-only -v $(pwd)/nginx-cache:/var/cache/nginx -v $(pwd)/nginx-pid:/var/run nginx 如果您具有更高级的配置,需要nginx写入其他位置,只需将更多的卷安装添加到这些位置。 在...

    实战nginx-张宴

    3.1 Nginx的完整配置示例 3.2 Nginx的虚拟主机配置 3.3 Nginx的日志文件配置与切割 3.4 Nginx的压缩输出配置 3.5 Nginx的自动列目录配置 3.6 Nginx的浏览器本地缓存设置 第4章 Nginx与PHP( FastCGI) 的安装、 配置...

    实战Nginx.取代Apache的高性能Web服务器

    3.1 Nginx的完整配置示例 3.2 Nginx的虚拟主机配置 3.3 Nginx的日志文件配置与切割 3.4 Nginx的压缩输出配置 .3.5 Nginx的自动列目录配置 3.6 Nginx的浏览器本地缓存设置 第4章 Nginx与PHP(FastCGI)的安装...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    3.1 Nginx的完整配置示例 3.2 Nginx的虚拟主机配置 3.3 Nginx的日志文件配置与切割 3.4 Nginx的压缩输出配置 .3.5 Nginx的自动列目录配置 3.6 Nginx的浏览器本地缓存设置 第4章 Nginx与PHP(FastCGI)的安装、配置与...

    ngx_rsplit:ngx_rsplit模块

    ngx_rsplit ngx_rsplit模块 ... proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=5d max_size=300g; server { listen 80; server_name _; location / { rsplit on; rsplit_frag_size

    开涛高可用高并发-亿级流量核心技术

    16.7.9 开启Nginx Proxy Cache性能不升反降 344 16.7.10 配送至读服务因依赖太多,响应时间偏慢 344 16.7.11 网络抖动时,返回502错误 346 16.7.12 机器流量太大 346 16.8 其他 347 17 京东商品详情页服务闭环实践 ...

Global site tag (gtag.js) - Google Analytics