免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4630 | 回复: 2
打印 上一主题 下一主题

[FastDFS] 最新nginx 1.14 FastDFS模块 中诡异的location 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-07 18:41 |只看该作者 |倒序浏览
本帖最后由 yayu_myself 于 2013-01-07 19:06 编辑

在nginx中配置了
  1.    location /M00/ {
  2.        root /home/fastdfs/data;
  3.        ngx_fastdfs_module;
  4.    }
复制代码
然后通过php客户端上传了文件,保存的位置是:

group1/M00/00/02/wKgTdVDqo5KAXf5pAAAgVCxsfHo088.jpg

但是我通过http://192.168.19.117/M00/00/02/ ... pAAAgVCxsfHo088.jpg

得到404,看nginx错误日志,发现其访问的是 /usr/local/nginx/html 目录下的文件

之前也通过自带的file_upload上传过文件,保存的位置为:

group1/M00/00/00/wKgTdVDpRZiAQ77JAAAHe4FSy6M70.conf

这个文件通过  http://192.168.19.117/M00/00/00/ ... JAAAHe4FSy6M70.conf 访问没有问题。

就很奇怪了,为什么对第一个,nginx的location没有起作用,是模块的bug吗?

论坛徽章:
0
2 [报告]
发表于 2013-01-07 19:39 |只看该作者
本帖最后由 yayu_myself 于 2013-01-07 19:41 编辑

我知道原因了,是nginx图片缓存配置的问题

我的php客户端是采用如下方式上传的:

$file_id = $fdfs->storage_upload_by_filebuff("/usr/include/stdio.h", "jpg");

我发现,如果指定扩展名为jpg,就失效了,而指定为jp等就可以。

我在nginx的配置中有如下内容:
  1.      server {
  2.          listen       80;
  3.          server_name  localhost;
  4.          index index.html index.htm index.php;
  5.          #access_log  logs/host.access.log  main;

  6.          location / {
  7.              root   html;
  8.          }

  9.          # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  10.          #
  11.          location ~ \.php$ {
  12.              root           html;
  13.              fastcgi_pass   127.0.0.1:9000;
  14.              fastcgi_index  index.php;
  15.              fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
  16.              include        fastcgi_params;
  17.          }

  18.           location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  19.              expires  30d;
  20.          }

  21.          location ~ .*\.(js|css)$ {
  22.              expires  1h;
  23.          }

  24.          location /M00/ {
  25.              root /home/fastdfs/data;
  26.              ngx_fastdfs_module;
  27.          }
  28.      }
复制代码
是上面图片缓存那行起了作用,导致后面的 location失效了,nginx趋向于更精确的匹配,修改为

         location ^~/M00/ {  # 匹配到这里后就禁止正则的匹配
             root /home/fastdfs/data;
             ngx_fastdfs_module;
         }
但是这样的话,M00目录下的图片就没有缓存了,这可如何是好。

论坛徽章:
0
3 [报告]
发表于 2013-01-07 19:53 |只看该作者
本帖最后由 yayu_myself 于 2013-01-07 19:54 编辑

知道了,nginx的location正则表达式按顺序匹配,匹配到一个后就停止,所以,修改配置为下面内容,就可以优先匹配到M00下面的图片了。
  1.         location ~* /M00/.*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  2.             root /home/fastdfs/data;
  3.             ngx_fastdfs_module;
  4.             expires 30d;
  5.         }

  6.         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  7.             expires  30d;

  8.         }

  9.         location /M00/ {  # 这里不需要禁止查找正则了
  10.              root /home/fastdfs/data;
  11.              ngx_fastdfs_module;
  12.          }
复制代码
反正就是如果正则有一些通用匹配,M00也要再写一个特定的匹配,并且在通用匹配之前(因为nginx按照顺序查找正则,匹配到就返回了)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP