如果在服务器上找不到图像,我想将图像请求重定向到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不会将请求重定向到静态网址http://websaints.net/rlog.php?save; 所以问题不在$ uri。
btw这个配置工作,但它重定向到uri,而不是代理并缓存它
location ~* \.(gif|jpg|jpeg|png)$ {
try_files $uri @redirect;
}
location @redirect {
return 301 http://websaints.net/rlog.php?save&req=$request_uri;
}
... hmmmm
答案 0 :(得分:1)
首先,您可以轻松地将location
更改为:
location = /gitpipe {
因为它与`^ / gitpipe $'相同,但在nginx中具有最高优先级,因此这样的位置将始终作为第一个。
接下来,如果文件存在,则尝试返回文件,所以使用url:
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
块中搜索,这里你是代理传递这样的网址:
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;
}