nginx与memcache缓存无法命中

参考网站:http://www.jdon.com/39179


因为项目中的静态资源(HTML,JS,JPG)比较多, 多心考虑台面用nginx搭载memcache增加访问量. 其中nginx.conf中配置(节选如下):

   upstream memcached {  
        server localhost:11211;  
    }  
  
    server {  
            listen 4444;  
            server_name localhost;  
  
               location / { #这里面上线时会配置成静态资源  
            proxy_set_header        X-Real-IP $remote_addr;  
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;              
            proxy_redirect          off;  
        charset             utf-8;  
        set                     $memcached_key $uri;  
        memcached_pass      memcached;  
        error_page          500 404 405 = @fallback;  
}  
  
        location @fallback {  
            root   /Users/crystal/www/html;  
        }  



访问http://localhost:4444/a/b/c/static.html资源的时候,后台日志出现

 key: "/a/b/c/static.html" was not found by memcached while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /webpro/img/b.html HTTP/1.1", upstream: "memcached://127.0.0.1:11211", host: "localhost:4444".



但我用JAVA的客户端从memcache中读取key为/a/b/c/static.html的值是可以准备提取到对应的资源的, 不知为什么nginx就是读不出来. 后来将

set                     $memcached_key $uri;  
#改成
set                     $memcached_key 'fixed_key';  #固定的值,不用$uri

立即可以显示正确的页面, 另外发现如果key中包含有'/', 那nginx也不能正常读出.

请问, 大家碰到过这种问题没有.

PS: 对C不熟悉, 读nginx的源码有点费劲.

----------------------------

看你的意思是想把页面缓存到memcache里,然后直接读出..这样可以减少磁盘的io开销.
我就不回答你的提问了.不过我给你个建议.
可以使用proxy_cache模块来处理这个问题.
把proxy_cache里的cache_path设置到你的系统的内存分区下,这样就和放到内存没什么区别了.(通常/tmp,就是内存分区).也能解决你想要的问题了.

----------------------------------------

谢谢
ronalfei 的建议. 尝试了用proxy_cache这个模块, 它把URL对应的资源以md5(key)的形式存储在了proxy_cache_path这个目录下, 但还有个疑问
1. 就是proxy_temp_path这个路径不能任意设置吗? 如果是系统内存分区(比如/tmp, 对这个概念还不熟悉), 它是把这个目录下的文件映射到内存了吗还是? 如果仅仅只是把url保存为文件, 那还是有文件IO, 这岂不是与nginx读取root rootdir这下面的文件一样了?

PS: to banq大哥, .htaccess这个东东项目没有生成:)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值