高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式

通过《高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景》一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率是相当高的。那么:

1. 如果不命中呢?

我们可以到相应的数据服务器上读取数据,然后将它缓存到Nginx服务器上,然后再将该数据返回给客户端。这样,对于该资源,只有穿透
Memcached的第一次请求是需要到数据服务器读取的,之后在缓存过期时间之内的所有请求,都是读取Nginx本地的。不过Nginx的
proxy_cache是本地硬盘缓存,效率要远低于Memcached。

2. 应该如何安装和配置呢?

(1)HttpMemcModule模块

如果使用Nginx的非核心模块——HttpMemcModule模块,则可以下载模块:

http://github.com/agentzh/memc-nginx-module/tags

  1. [email protected]:~$ tar -zxvf agentzh-memc-nginx-module-a0bc33a.tar.gz
  2. [email protected]:~$ tar -zxvf nginx-1.1.12.tar.gz
  3. [email protected]:~$ cd nginx-1.1.12
  4. [email protected]:~$ ./configure --add-module=/home/michael/agentzh-memc-nginx-module-a0bc33a
  5. [email protected]:~$ sudo make
  6. [email protected]:~$ sudo make install

目前验证发现Nginx 1.0.10版本 Nginx的1.1.3及其之前的版本,需要额外通过--add-module来加载upstream-keepalive模块,请自行google之。其他版本还不确定,猜测是在1.1  从nginx的1.1.4及其之后的版本开始,自动携带upstream-keeplive模块的。 (感谢agentzh的提示)

然后我们来编辑配置文件吧。如下:

  1. http {
  2. ...
  3. upstream data_server {
  4. server  192.168.0.133:1234;
  5. server  192.168.0.134:1234;
  6. server  192.168.0.135:1234;
  7. ip_hash;
  8. }
  9. upstream memc_backend {
  10. server  127.0.0.1:11211;
  11. }
  12. ...
  13. server {
  14. listen      8080;
  15. server_name localhost;
  16. default_type    text/html;
  17. location / {
  18. set     $memc_cmd   get;
  19. set     $memc_key   $uri;
  20. memc_pass   memc_backend;
  21. error_page  404 @fallback;
  22. }
  23. location @fallback {
  24. internal;
  25. proxy_pass      http://data_server;
  26. proxy_cache     cache_one;
  27. proxy_cache_valid   200 302 1h;
  28. proxy_cache_valid   301 1d;
  29. proxy_cache_valid   any 1m;
  30. expires         30d;
  31. }
  32. }
  33. ...
  34. }

从上面的配置文件我们可以看出,一个请求到达后,会其uri作为key去Memcached服务器127.0.0.1:11211上查找
value,如果没有命中,则返回404。这时通过error_page将404接收转到@fallback,然后去data_server中取文件,取
完后将该文件在本地磁盘缓存,同时用户的浏览器也通过expires设置缓存时间。

这样绝大多数请求如果被第一层Memcached的内存缓存拦截的话,剩余的请求可以通过访问第二层Nginx服务器的硬盘缓存文件,来减少穿透。

按照上面的方式,客户端得到的请求响应中虽然包含了正确的文件内容,但状态码都是404(可以通过Fiddler来观察)。这似乎会引起问题。什么
问题呢?绝大多数浏览器,即使在404的情况下,也会尝试去读取内容,如果有正确的内容,是可以正确显示的。但是比较常见的可能引起问题的两种情况是:

(a)、搜索引擎的spider爬到的404时,一般不会收录该URL,我想这不是你所希望看到的;

(b)、Flash等方式加载时,如果头是404,可能不予显示,我想着也不是你所希望看到的。

(转载请注明来自Poechant的CSDN博客:http://blog.csdn.net/poechant/article/details/7179891

那我们把它改成都是200,是不是很好呢?

  1. error_page  404 =200 @fallback;

非也,这样404传递到fallback处理请求后的状态如果不是200,就很不一致了,会引起更多问题。所以应该如下配置:

  1. error_page  404 = @fallback;

这样fallback的处理结果状态是什么,就用什么替换404。

(2)Nginx内部的Memcached模块

如果你想使用Nginx内部的Memcached模块,配置文件可以结合参考上面的示例和《高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景》

时间: 2024-10-12 19:58:02

高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式的相关文章

高性能Web服务器Nginx的配置与部署研究(11)应用模块之Memcached模块的两大应用场景

一.应用场景1 最近在一个项目中,用到了Nginx的Memcached模块,所以就在这个系列教程中提前把Memcached模块拿出来写了.另外发现最近我的 博客文章频频被很多用采集器的网站拿走,帮我发扬光大,都不听我说声谢谢.在此还是希望我的博文被转载的时候能够被注明出处,满足下我小小的虚荣心. 现在有这样一种应用场景: 客户端Client通过Nginx反向代理,访问服务器Server.每次访问的内容就是将文件File传到Server上,然后可以访问到File的URL被广播到所有Client上,

高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“Hello World”

1. Nginx 程序包 目前最新的开发版本时1.1.12: Linux/Unix:nginx-1.1.12.tar.gz Windows:nginx-1.1.12.zip 我们可以下载稳定版尝试: Linux/Unix:nginx-1.0.11.tar.gz Windows:nginx-1.0.11.zip 2. 下载.解压.安装 Nginx 我们这里以Linux/Unix:nginx-1.0.11.tar.gz为例.下载并解压缩: wget http://nginx.org/download

高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例

概述 从这篇博文起,将带领读者们一起领略Nginx的强大. Nginx 是做什么用的?我相信很多朋友都已经使用过,如果你没有,那么你一定知道以下这些名称之一:Apache,Lighttpd,Tomcat,Jetty. 它们占据了目前Web服务器的几乎全部江山,其中 Apache 是知名度最高的,同时也是最为重量级的.Lighttpd.Tomcat 和 Jetty 相对轻量级,其中 Jetty.Tomcat 多用于作为Java服务器容器. Nginx 是一个基于 BSD-like 协议.开源.高性

高性能Web服务器Nginx的配置与部署研究(4)Nginx常用命令

1. 启动 Nginx [email protected]:sudo ./sbin/nginx 2. 停止 Nginx [email protected]:sudo ./sbin/nginx -s stop [email protected]:sudo ./sbin/nginx -s quit -s都是采用向 Nginx 发送信号的方式. 3. Nginx 重载配置 [email protected]:sudo ./sbin/nginx -s reload 上述是采用向 Nginx 发送信号的方

高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题

在上一篇文章中,提到的Nginx的Memcached模块应用场景,主要是作为文件缓存.然后就发现了一个问题,当以字节数组方式缓存较大的文件时,缓存数据会被压缩,从而在读取的时候出现问题. (本文欢迎转载,尊重他人劳动,转载请注明出处:http://blog.csdn.net/poechant/article/details/7177603) 解决方法很简单,就是在MemcachedClient端设置压缩的阈值.如果你使用的是net.spy.memcached的API,则可以如下设置: int E

高性能Web服务器Nginx的配置与部署研究系列(1)-- 入门 hello work

简介: Nginx 是一个基于 BSD-like 协议.开源.高性能.轻量级的HTTP服务器.反向代理服务器以及电子邮件(SMTP.POP3.IMAP)服务器.Nginx 是由一个俄罗斯的名叫“Igor Sysoev”的软件工程师开发的,最初用于 Rambler.ru 网站(该网站在俄罗斯国内访问量排名第二) 例子:hello work 1:配置清单: worker_processes  4; events { worker_connections  1024; } http { server

高性能Web服务器Nginx的配置与部署研究(3)Nginx请求处理机制

1. 处理什么样的请求 处理访问到 Nginx 所在 IP 地址的请求,并且这些请求的 HTTP 头信息中的 Host 为所要处理的域名(如下以80端口为例),如下几个 server 就对应响应的请求: server { listen 80; server_name nginx.org www.nginx.org; ... } server { listen 80; server_name nginx.net www.nginx.net; ... } server { listen 80; se

高性能Web服务器Nginx的配置与部署研究(9)核心模块之HTTP模块基本常用指令

一.HTTP模块的作用是什么? Nginx的HTTP模块用于控制Nginx的HTTP进程. 二.指令 1. alias 含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适用文件系统的路径. 语法:alias <file-path | directory-path> 缺省:N/A 作用域:http.server.location 示例: location /i/ { alias /home/michael/web/i/; } 则请求 /i/logo.png 则返回

高性能Web服务器Nginx的配置与部署研究(15)Upstream负载均衡模块

Nginx 的 HttpUpstreamModule 提供对后端(backend)服务器的简单负载均衡.一个最简单的 upstream 写法如下: server backend1.example.com; server backend2.example.com; server.backend3.example.com; location / { proxy_pass http://backend; } 1.后端服务器 通过 upstream 可以设定后端服务器,指定的方式可以是 IP 地址与端口