【问题标题】:how to redirect request for lost files to different server (nginx configuration)?如何将丢失文件的请求重定向到不同的服务器(nginx配置)?
【发布时间】:2013-01-27 07:42:03
【问题描述】:

如果在服务器上找不到图像,我想将图像请求重定向到 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 http://websaints.net/rlog.php?save; 所以问题不在 $uri 中。


顺便说一句,此配置有效,但它重定向到 uri,而不是代理和缓存它

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

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

嗯嗯……

【问题讨论】:

  • 为什么它不起作用?总是以404 或其他方式返回?
  • 并且从未向raw.github.com 提出请求。我用我的服务器和访问日志对此进行测试
  • 你能举个例子 url 你用什么来测试?
  • 是的,舒尔。这就是websaints.net/rlog.php — 查看和websaints.net/rlog.php?save 将新请求写入日志

标签: configuration nginx


【解决方案1】:

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

location = /gitpipe { 

因为它的含义与 `^/gitpipe$' 相同,但在 nginx 中具有最高优先级,因此该位置将始终被视为第一个。

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

http://your.domain.com/some_dir/another_dir/some_file.gif

通过第一个location 块,您尝试从root 指令获取文件:

root_directive/some_dir/another_dir/some_file.gif

如果这个文件不存在,那么你对try_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;
}

【讨论】:

猜你喜欢
  • 2016-12-16
  • 1970-01-01
  • 2010-10-10
  • 2019-05-16
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
相关资源
最近更新 更多