我有一台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
,那么返回的是文件系统上的任何内容:
/images/july/foo.jpg
而不是我现在得到的是:
/images/july/foo.jpg
答案 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”目录中的文件。
快乐的日子。