nginx:如何设置为全局URL的缓存反向代理

时间:2019-02-20 09:12:18

标签: nginx caching proxy reverse-proxy

我正在寻找一种方法来设置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/中的示例并不完全适用,但需要大量扩展。

1 个答案:

答案 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不应在远程网站的协议说明符中包含://