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: p_w_picpath/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: p_w_picpath/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 #创建硬连接


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