Hello!
2014-04-27 23:08 GMT-07:00 wb du:
> location ~ /group([0-9])/M00 {
> ngx_fastdfs_module;
> }
>
> location /capture {
> content_by_lua '
> local res =
> ngx.location.capture("/group1/M00/00/05/CgkKPVNdqKKEQA5NAAAAACifiLk157.jpg")
> ngx.log(ngx.DEBUG, "res.status="..res.status)
> ';
> }
> 图片保存在61上,从59访问时fastdfs的ngx模块自己upstream到61读取
>
> 现在的情况是:当直接使用
> http://10.9.10.59/group1/M00/00/05/CgkKPVNdqKKEQA5NAAAAACifiLk157.jpg
> http://10.9.10.61/group1/M00/00/05/CgkKPVNdqKKEQA5NAAAAACifiLk157.jpg
> 都可以读取图片,
> 使用http://10.9.10.59/capture访问不到,报404
看起来像是 ngx_fastdfs 模块的问题。
ngx_fastdfs 模块貌似并不能和子请求或者内部跳转一起工作,因为它内部错误地使用了“r->unparsed_uri”:
https://code.google.com/p/fastdfs-nginx-module/source/browse/trunk/src/ngx_http_fastdfs_module.c#458
正确的做法应该是仅在“r->valid_unparsed_uri”为真时使用“r->unparsed_uri”,而在条件为假时改成读取
r->uri 和 r->args.
我记得我一年多以前曾经写信给 FastDFS 的作者于庆反映过这个问题,但他貌似仍然没有修正。
同时抄送给于庆。
> 59上的log是:res.status=404
> 60上的log是:
>
> 2014/04/28 14:02:06 [error] 115260#0: *119 open()
> "/root/openresty/nginx/html/capture" failed (2: No such file or directory),
> client: 10.9.10.59, server: localhost, request: "GET /capture?redirect=1
> HTTP/1.0", host: "10.9.10.59"
>
> 我弄不明白的是为什么59上upstream到61的请求是GET /capture?redirect=1,而不是GET
> /group1/M00/00/05/CgkKPVNdqKKEQA5NAAAAACifiLk157.jpg?redirect=1。
>
之所以这里的 URL 不对,是因为 ngx_fastdfs 模块有 bug,即上面说的错误地从“r->unparsed_uri”读取当前请求的 URI.
Regards,
-agentzh