我有以下 nginx 配置:
server {
location ~ ^/(\d+)/(\d+)/(\d+)\.png$ {
alias /mount/cache/c/$1/$2/$3.png;
try_files $uri @proxy;
add_header x-source file;
}
location @proxy {
proxy_pass http://127.0.0.1:28000;
add_header x-source proxy;
}
}
我想要实现的是尝试从磁盘加载文件,如果找不到,才向上游询问。
我的问题是它try_files
似乎不起作用,它总是请求 @proxy(x-source 标头始终是代理)。如果我注释掉try_files
它,它会正确地从磁盘加载文件,但代理部分不起作用。
1
最佳答案
2
alias
在这个例子中,您根本不需要使用。
server {
location ~ ^/(\d+)/(\d+)/(\d+)\.png$ {
root /mount/cache/c;
try_files $uri @proxy;
add_header x-source file;
}
...
}
如果需要alias
,则不要使用try_files
。例如,使用error_page
。
server {
location ~ ^/(\d+)/(\d+)/(\d+)\.png$ {
alias /mount/cache/c/$1/$2/$3.png;
add_header x-source file;
error_page 404 = @proxy;
}
...
}
1
-
非常感谢,我一直不知道原因是什么
alias
!
–
|
该问题源于您的alias
指示。
http://example.com/1/2/3.png
假设请求一个资源。
该alias
指令意味着 nginx 将在 处查找文件/mount/cache/c/1/2/3.png/1/2/3/.png
。这是因为alias
设置了文件所在的基本路径,然后将$uri
附加到 获取最终资源。
这应该与以下配置一起工作:
server {
location ~ ^/(\d+)/(\d+)/(\d+)\.png$ {
alias /mount/cache/c;
try_files $uri @proxy;
add_header x-source file;
}
location @proxy {
proxy_pass http://127.0.0.1:28000;
add_header x-source proxy;
}
}
假设您的文件位于/mount/cache/c
目录中。
1
-
但是说“如果在使用正则表达式定义的位置内使用别名,那么该正则表达式应该包含捕获,并且别名应该引用这些捕获”
–
|
–
|