本文来自:CSDN博客专栏《Nginx高性能Web服务器》及Poechant技术博客,转载请注明出处。
通过《高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景》一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率是相当高的。那么:
(转载请注明来自Poechant的CSDN博客:http://blog.csdn.net/poechant/article/details/7179891)
1. 如果不命中呢?
我们可以到相应的数据服务器上读取数据,然后将它缓存到Nginx服务器上,然后再将该数据返回给客户端。这样,对于该资源,只有穿透Memcached的第一次请求是需要到数据服务器读取的,之后在缓存过期时间之内的所有请求,都是读取Nginx本地的。不过Nginx的proxy_cache是本地硬盘缓存,效率要远低于Memcached。
2. 应该如何安装和配置呢?
(1)HttpMemcModule模块
如果使用Nginx的非核心模块——HttpMemcModule模块,则可以下载模块:
http://github.com/agentzh/memc-nginx-module/tags
michael@dev-machine:~$ tar -zxvf agentzh-memc-nginx-module-a0bc33a.tar.gz
michael@dev-machine:~$ tar -zxvf nginx-1.1.12.tar.gz
michael@dev-machine:~$ cd nginx-1.1.12
michael@dev-machine:~$ ./configure --add-module=/home/michael/agentzh-memc-nginx-module-a0bc33a
michael@dev-machine:~$ sudo make
michael@dev-machine:~$ 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的提示)
(转载请注明来自Poechant的CSDN博客:http://blog.csdn.net/poechant/article/details/7179891)
然后我们来编辑配置文件吧。如下:
http {
...
upstream data_server {
server 192.168.0.133:1234;
server 192.168.0.134:1234;
server 192.168.0.135:1234;
ip_hash;
}
upstream memc_backend {
server 127.0.0.1:11211;
}
...
server {
listen 8080;
server_name localhost;
default_type text/html;
location / {
set $memc_cmd get;
set $memc_key $uri;
memc_pass memc_backend;
error_page 404 @fallback;
}
location @fallback {
internal;
proxy_pass http://data_server;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
}
}
...
}
从上面的配置文件我们可以看出,一个请求到达后,会其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,是不是很好呢?
error_page 404 =200 @fallback;
非也,这样404传递到fallback处理请求后的状态如果不是200,就很不一致了,会引起更多问题。所以应该如下配置:
error_page 404 = @fallback;
这样fallback的处理结果状态是什么,就用什么替换404。
(2)Nginx内部的Memcached模块
如果你想使用Nginx内部的Memcached模块,配置文件可以结合参考上面的示例和《高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景》
(转载请注明来自Poechant的CSDN博客:http://blog.csdn.net/poechant/article/details/7179891)
本文来自:CSDN博客专栏《Nginx高性能Web服务器》及Poechant技术博客,转载请注明出处。
-
分享到:
相关推荐
proxy_cache机制允许Nginx将从后端服务器获得的静态内容缓存到磁盘上,当相同请求再次发生时,可以直接从磁盘缓存中提供数据,而无需每次都向后端服务器获取。 proxy_cache的基本用法是在Nginx的配置文件中进行设置...
Nginx是一款高性能的Web服务器和反向代理服务器,以其高效的并发处理能力、低内存占用和丰富的模块库而著名。它的工作模式基于事件驱动,可以高效地处理大量的连接请求,特别适合用作负载均衡器或缓存服务器。 ngx_...
在Web服务器配置中,特别是在使用Nginx作为反向代理服务器时,此指令变得非常关键,因为它能够帮助我们控制客户端得到的重定向地址,以确保返回给客户端的URL是符合我们安全和架构需求的。 在实际应用中,我们经常...
ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....
1. **Nginx proxy_cache**:proxy_cache是Nginx的一项功能,允许服务器缓存来自上游服务器(如后端应用服务器)的响应,减少对上游服务器的请求,提高响应速度。当一个请求到达Nginx时,如果该资源已经在缓存中,...
**Nginx高性能Web服务器详解** Nginx是一款开源、高性能、轻量级的Web服务器/反向代理服务器,广泛应用于互联网领域,以其高效的并发处理能力、低内存占用和丰富的模块化设计而著称。在Linux操作系统上运行,Nginx...
Nginx作为一个高性能的Web服务器,凭借其高效的并发处理能力、低资源消耗和强大的负载均衡功能,已经成为现代互联网架构中的重要组成部分。对于需要处理大量动态和静态内容的网站,以及需要实现复杂路由策略的场景,...
Nginx,以其高性能、稳定性以及模块化的特性,成为了许多网站首选的反向代理和负载均衡服务器。在Nginx中,缓存机制可以显著提升静态资源的访问速度,降低服务器压力。然而,如何有效地管理和清除这些缓存呢?这就是...
Nginx是一款高性能的Web服务器和反向代理服务器,以其轻量级、高效能和高并发处理能力在互联网行业中广泛应用。本文件主要介绍了Nginx的配置与部署,特别是Rewrite规则的设置以及Nginx的基本操作命令。 1. **Nginx ...
nginx+tomcat+memcached_SH nginx+tomcat+memcached_SH nginx+tomcat+memcached_SH nginx+tomcat+memcached_SH
《Nginx高性能Web服务器实战教程》是一本深入讲解如何利用Nginx构建高效稳定Web服务的书籍。Nginx以其高性能、轻量级、反向代理和负载均衡等特性,已经成为许多企业和开发者首选的Web服务器。这本书涵盖了从基础配置...
这里,`proxy_cache_path` 指定了缓存存储的路径,`levels` 参数定义了缓存目录的层级,`keys_zone` 设置了一个名为 `cache_one` 的内存缓存区域,大小为 200MB,`inactive` 参数指定了1天内未被访问的缓存将被自动...
在构建高性能、高可用性的Web服务时,常常会采用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为缓存系统。这种组合可以充分利用各自的优势,提升系统的响应速度和处理能力。接下来,...
通过合理配置和整合Memcached与Nginx,可以构建出一个高效、高可用的Web服务架构,有效提高响应速度,降低服务器压力,提供优质的用户体验。在实际应用中,需要根据具体业务场景进行灵活调整和优化。
《决战Nginx技术卷:高性能Web服务器部署与运维(基于php、Java、ASP.NET等)》详细讲述了Nginx服务器与动态语言应用的结合,动态语言包括PHP、Python、Perl、Java、Ruby及ASP.NET架构。对于PHP部分,我们使用了...
Nginx是一款高性能的Web服务器,它以其反向代理、负载均衡、静态文件处理和高效非阻塞I/O模型而闻名。Nginx的设计理念是轻量级、高并发,因此在处理高流量网站时表现出色。以下是Nginx的一些核心知识点: 1. **模块...
《Nginx高性能Web服务器》是一本深入探讨Nginx技术的权威著作,它涵盖了Nginx的基础知识、配置技巧以及优化策略。Nginx,以其高性能、轻量级和反向代理能力著称,是现代互联网架构中的关键组件。在本资料中,我们将...