静态图像无法重定向

时间:2014-08-08 09:42:29

标签: nginx ghost-blog

我有一台NGINX服务器用于向两个Ghost博客站点提供反向代理服务。对于静态内容,我想让它跳过node服务,并由NGINX直接提供。应该是非常直接的,但有一个扭曲。

这是一个配置块,用于设置反向代理,然后为静态内容提供例外。这很好用(注意:双括号引用被替换为我正在使用的两个不同Ghost服务的名称):

location / {
    proxy_redirect off;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_set_header    Host                $http_host:$server_port;
    proxy_set_header    X-NginX-Proxy       true;
    proxy_set_header    Connection          "";
    proxy_http_version  1.1;
    proxy_cache         ghost_{{slug}}_cache;
    proxy_cache_key     ghost$request_uri$scheme;
    proxy_pass          http://ghost_{{slug}}_upstream;
}

location /assets {
    root                {{assets_root}};    
}

所以在/assets的情况下,http://example.com/assets/js/doit.js这样的请求和上面的配置会在/assets上匹配,然后将“assets / js / doit.js”追加到直接定义的根以上。正如我所说,这部分工作并且它有效,因为我指向的位置具有文件系统中表示的完整URL路径(例如,其中有一个文件assets/js的目录doit.js) 。

我正在努力 - 而且我对NGINX很新,所以怀疑这很容易 - 就像你有这样的配置块的类似情况:

location /content {
    root                {{content_root}};
}

这个块 - 从配置和执行的角度来看 - 与assets块相同,但在这种情况下,我想要发生的事情是我希望它只传递跟随 内容的网址的一部分。因此,如果请求是http://example.com/content/images/july/foo.jpg,那么返回的是文件系统上的任何内容:

  • {{content_root}} + /images/july/foo.jpg

而不是我现在得到的是:

  • {{content_root}} + 内容 + /images/july/foo.jpg

1 个答案:

答案 0 :(得分:0)

好的,我已经找到了我的问题的答案......假设我http://example.com/content/js/foobar.js的网址获取请求:

  • 原始位置指令:

    location /content {
        root                /var/www/content;
    }
    

    会错误地在“/ var / www / content / 内容”目录中查找javascript文件

  • 而是使用以下位置指令:

    location /(content)/ {
        root                /var/www/content;
    }
    

    这将正确查找“/ var / www / content”目录中的文件。

快乐的日子。