我正在寻找一种方法来设置nginx以使其具有反向代理(?)并具有缓存功能,但要显式地采用/重写原始URL,而该URL不是本地服务器,而是任何通用地址。
例如,我想显式缓存/代理URL。因此,对于像 https://org.url.baz/user/repo/foo 这样的原始URL,我希望能够通过nginx在 my.domain.foo 上通过nginx缓存所有请求,并带有明确的“缓存请求”就像
http://my.domain.foo/cache/http://org.url.baz/user/repo/foo
并重写所有后续请求。即,类似于Internet Archive的备忘录语法 archive.org/save/org.url.baz
由于我的想法在任何意义上都不是“真正的”反向代理,因此我猜想https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/中的示例并不完全适用,但需要大量扩展。
答案 0 :(得分:1)
您正在寻找类似this的东西。
特别是:
location ~* ^/cache/(?<pschema>https?)/(?<phost>[\w.]+)(?<puri>/.*) {
{
set $adr $pschema://$phost;
rewrite .* $puri break;
proxy_pass $adr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $phost;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_connect_timeout 1;
proxy_intercept_errors on;
expires 30;
}
这会将your.example.com/cache/https/org.url.baz/user/repo/foo
代理到https://org.url.baz/user/repo/foo
请注意,your.example.com/cache/https://org.url.baz/user/repo/foo
可能不是有效的URL,因此您的URL不应在远程网站的协议说明符中包含://
。