Nginx在一个别名

时间:2017-07-04 15:11:40

标签: windows nginx

我正在从apache转换到nginx,我无法获得别名来提供图像。阅读nginx文档,在Google中潜水以及哪些内容都没有给我带来任何可接受的结果;(

图片位于C:/xampp/htdocs/content/XYZ/thumbn/image.jpg

XYZ部分是动态的并且会发生变化。

Nginx设置为提供来自root C:/nginx/public_html/domain.dev/

的内容

在apache中我简单地制作了Alias /CDN "C:\xampp\htdocs\content"

这样,当我请求www.domain.dev/CDN/XYZ/thumbn/image.jpg时,我会从别名目录中获取图像。

所以我试图在nginx中复制相同的内容

location /CDN {
alias C:/xampp/htdocs/content;
autoindex on; # just there to see if it works.
}

不幸的是,当我访问图像www.domain.dev/CDN/XYZ/thumbn/image.jpg时,我得到404.在Nginx日志中,我看到以下记录:

2017/07/04 16:43:32 [error] 10532#6488: *4 CreateFile() "C:/nginx/public_html/domain.dev/CDN/XYZ/thumbn/two.jpg" failed (3: The system cannot find the path specified), client: 127.0.0.1, server: www.domain.dev, request: "GET /CDN/XYZ/thumbn/two.jpg HTTP/1.1", host: "www.domain.dev"

它是列出目录内容的方式。

现在,如果我将位置块更改为此

    location ^~ /CDN/ {
        alias C:/xampp/htdocs/content/;
    } 

我在日志中遇到同样的错误,只有这样才能让它工作(但不是我需要的方式)当我使用这个位置块时

    location ^~ /CDN/ {
        alias C:/xampp/htdocs/content/XYZ/thumbn/;
    } 

然后显示图像,但图像的网址不同,对我的项目无效。

现在的问题是:我如何只在同一别名下的多个静态目录中提供图像? 图像位于以下结构中

C:/xampp/htdocs/content/one/thumbn/image.jpg
C:/xampp/htdocs/content/two/thumbn/cats.jpg
C:/xampp/htdocs/content/three/thumbn/dogs.jpg
C:/xampp/htdocs/content/another_random_direcotry/thumbn/random.jpg

它们应该通过URL访问,如下所示

www.domain.dev/CDN/one/thumbn/image.jpg
www.domain.dev/CDN/two/thumbn/cats.jpg
www.domain.dev/CDN/three/thumbn/dogs.jpg
www.domain.dev/CDN/another_random_direcotry/thumbn/random.jpg

Nginx甚至可以实现这一点吗?那我怎么做到这一点?这个场合需要正则表达式吗?

完整配置文件here

2 个答案:

答案 0 :(得分:0)

试试这个

location /CDN/ {
        alias C:/xampp/htdocs/content/;
} 

答案 1 :(得分:0)

问题是由

引起的
    location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 7d;
    }

当我注释掉这个位置指令时,我可以从别名目录访问图像。

这样可以删除图像的过期标题,如果启用此功能,则无法访问图像。