一次nginx 做负载均衡 +cache时 CACHE 全部不命中排错

简介:

nginx 中设置如下
http{
......

server{
....

location ~*\.(gif|jpg|jpeg|png|bmp|swf|htm|html|shtml)$
      {

      expires 1d;
      proxy_cache cache_one;
      proxy_cache_valid 200 304 12h;
      proxy_cache_valid 301 302 30m;
      proxy_cache_valid any 30m;
      proxy_cache_key $host$uri$is_args$args;
      add_header Nginx-Cache "$upstream_cache_status from skybug's cache ";
      proxy_set_header Host $server_name

       proxy_pass_header X-Real-IP;
       proxy_pass_header REMOTE-HOST;
       proxy_pass_header X-Forwarded-For;
      proxy_pass  http://xxxx.server_pool;
              }

....
}


用httpdebug测试n次 发现  
$upstream_cache_statu s 一直是MISS

初步认为是 cache_one的物理路径 权限不够 写不了cache文件

ls -al /var/nginx/cache/cache_one 
看到 权限是正常的
反复检查 nginxd.conf 和站点的conf  发现没有错误

用httpdebug直接访问后端服务器 图片文件
http头响应也无异常

HTTP/1.1 200 OK
Content-Length: 137
Content-Type: image/gif
Last-Modified: Wed, 28 Sep 2011 08:11:24 GMT
Accept-Ranges: bytes
ETag: "09e9236b67dcc1:17fb"


Date: Sat, 27 Apr 2013 14:35:23 GMT

使用ipad下的webdebug直接访问后端服务器的图片文件
发现http响应头为
HTTP/1.1 200 OK
Content-Length: 137
Content-Type: image/gif
Last-Modified: Wed, 28 Sep 2011 08:11:24 GMT
Accept-Ranges: bytes
Cache-Control:no-cache
ETag: "09e9236b67dcc1:17fb"
Date: Sat, 27 Apr 2013 14:35:23 GMT

多了个no-cache
问题就在这里了

检查后端服务器,想起来前几天由于应急,临时在站点的http头里将 立即失效打了勾勾, 也就是相当于 no-cache
关闭后端服务器的no-cache后

重新测试nginx  $upstream_status 在第二次访问同一个图片的时候 返回HIT 终于不是MISS了

结论1 后端服务器如果设置no_cache 要么在nginx前端设置 proxy_ignore_headers "cache-control"忽略后端服务器的cache控制头,要么直接关闭后端的cache-control:no-cache

结论2  桌面上用的免费的httpdebug软件 不靠谱 竟然没有返回正确的cache-control的响应头 在IPAD上花了16元钱买的webdebug倒是正确返回了  忘记用IE10自带的F12工具测试 估计这个返回也是正常的。



另 在查看cache MISS问题的时候 发现/var/log/message 里有如下错误
restorecond: Will not restore a file with more than one hard link (/etc/resolv.conf)  

文件硬链接 出错导致
  1. 1  # ls -i /etc/resolv.conf #查找 inode

  2. 3735567 /etc/resolv.conf

  3. 2 # find /etc -inum 3735567#查找硬连接

  4. /etc/sysconfig/networking/profiles/default/resolv.conf

  5. /etc/resolv.conf

  6. # lsof|grep resolv.conf #确认文件是否被打开

  7. # rm /etc/sysconfig/networking/profiles/default/resolv.conf #删除文件

  8. # restorecon /etc/resolv.conf  恢复文件预设

  9. # ln /etc/resolv.conf /etc/sysconfig/networking/profiles/default/resolv.conf #创建硬连接


问题解决

至于为什么硬连接文件出错 尚未查明  估计与磁盘文件写满有关



      本文转自天山三害 51CTO博客,原文链接:http://blog.51cto.com/skybug/1337794,如需转载请自行联系原作者





相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
22天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
35 0
|
1月前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
43 4
|
7天前
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
12天前
|
负载均衡 应用服务中间件 nginx
Nginx 负载均衡
Nginx 负载均衡
23 2
|
3月前
|
负载均衡 Java 应用服务中间件
|
3月前
|
负载均衡 监控 应用服务中间件
Nginx负载均衡:你的网站流量翻倍利器
Nginx负载均衡:你的网站流量翻倍利器
46 0
|
3月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
67 0
|
4月前
|
缓存 负载均衡 算法
【Nginx】Nginx 负载均衡
【1月更文挑战第25天】【Nginx】Nginx 负载均衡
|
4月前
|
负载均衡 应用服务中间件 nginx
【实践】使用Nginx作为GrayLog日志接入的负载均衡
【实践】使用Nginx作为GrayLog日志接入的负载均衡
50 0
|
4月前
|
负载均衡 算法 应用服务中间件
深入了解Nginx底层负载均衡算法
深入了解Nginx底层负载均衡算法
33 0