Configuration 如何将丢失文件的请求重定向到不同的服务器(nginx配置)?

Configuration 如何将丢失文件的请求重定向到不同的服务器(nginx配置)?,configuration,nginx,Configuration,Nginx,若在服务器上找不到映像,我想将映像请求重定向到github repo。 我哪里出错了 location ~* \.(gif|jpg|jpeg|png)$ { try_files $uri /gitpipe =404; } location ~* /gitpipe$ { proxy_pass https://raw.github.com/Org/$arg_repo/master/$uri; } 我将配置更改为下一

若在服务器上找不到映像,我想将映像请求重定向到github repo。 我哪里出错了

    location ~* \.(gif|jpg|jpeg|png)$ {
            try_files $uri /gitpipe =404;
    }

    location ~* /gitpipe$ {
            proxy_pass https://raw.github.com/Org/$arg_repo/master/$uri;
    }

我将配置更改为下一个

location ~* \.(gif|jpg|jpeg|png)$ {
    try_files $uri /gitpipe =404;   
}

location = /gitpipe {
            proxy_pass http://websaints.net/rlog.php?save;
}
但结果还是一样。Nginx不将请求重定向到静态url; 所以问题不在$uri中


顺便说一句,这个配置可以工作,但它重定向到uri,而不是代理和缓存它

location ~* \.(gif|jpg|jpeg|png)$ {
    try_files $uri @redirect;
}

location @redirect {
            return 301 http://websaints.net/rlog.php?save&req=$request_uri;
}

嗯…

首先,您可以轻松地将您的
位置更改为:

location = /gitpipe { 
因为它的意思与“^/gitpipe$”相同,但在nginx中具有最高的优先级,所以此类位置将始终作为第一个位置

接下来,您将尝试返回文件(如果文件存在),因此使用如下url:

http://your.domain.com/some_dir/another_dir/some_file.gif
您正试图从
指令获取文件的
位置
块中首先通过的是哪个块,如下所示:

root_directive/some_dir/another_dir/some_file.gif
如果此文件不存在,则您对
try\u files
指令说,它应该在第二个
location
块中进行搜索,这里是代理传递此url:

proxy_pass https://raw.github.com/Org/$arg_repo/master/$uri;
但就我们的例子而言,这意味着:

proxy_pass https://raw.github.com/Org/$arg_repo/master//root_directive/some_dir/another_dir/some_file.gif
其中,
$arg_repo
将更改其值

这是对你的指令的解释吗?这就是你的想法吗

以下是您可以轻松重定向到所需内容的方法:

location ~ \.(jpg|png|gif) {
   try_files $uri /proxy$request_url =404;
}

location ^~ /proxy(.*) {
   proxy_pass https://your.proxy.domain/$1;
}

首先,您可以轻松地将
位置更改为:

location = /gitpipe { 
因为它的意思与“^/gitpipe$”相同,但在nginx中具有最高的优先级,所以此类位置将始终作为第一个位置

接下来,您将尝试返回文件(如果文件存在),因此使用如下url:

http://your.domain.com/some_dir/another_dir/some_file.gif
您正试图从
指令获取文件的
位置
块中首先通过的是哪个块,如下所示:

root_directive/some_dir/another_dir/some_file.gif
如果此文件不存在,则您对
try\u files
指令说,它应该在第二个
location
块中进行搜索,这里是代理传递此url:

proxy_pass https://raw.github.com/Org/$arg_repo/master/$uri;
但就我们的例子而言,这意味着:

proxy_pass https://raw.github.com/Org/$arg_repo/master//root_directive/some_dir/another_dir/some_file.gif
其中,
$arg_repo
将更改其值

这是对你的指令的解释吗?这就是你的想法吗

以下是您可以轻松重定向到所需内容的方法:

location ~ \.(jpg|png|gif) {
   try_files $uri /proxy$request_url =404;
}

location ^~ /proxy(.*) {
   proxy_pass https://your.proxy.domain/$1;
}

为什么它不起作用?始终带着
404
或其他东西返回,并且永远不会提出请求。我用我的服务器和访问日志来测试这一点。你能给出一个示例url吗?你用什么来测试?是的,舒尔。这就是它-查看并向日志写入新请求,以及为什么它不工作?始终带着
404
或其他东西返回,并且永远不会提出请求。我用我的服务器和访问日志来测试这一点。你能给出一个示例url吗?你用什么来测试?是的,舒尔。这是它-查看和写入新的请求到logI得到了!代理传递不能包含目录!只有域名。代理通行证;-这项工作。重定向请求到现在,如果我只知道如何添加目录…我明白了!代理传递不能包含目录!只有域名。代理通行证;-这项工作。重定向请求到现在,如果我只知道如何添加目录。。。