对于一个项目,我实现了自动服务器端缩略图生成。如果您在其文件名中请求带有“_thumb”的图像,则服务器会检查原始图像是否已有缩略图,如果没有,则会生成并将其发回。工作正常。
现在我想将Nginx混合起来直接从硬盘驱动器提供图像而不涉及服务器应用程序(如果从服务器应用程序本身请求,则URL本身可以正常工作并返回图像)。 / p>
如果缩略图已存在,则以下块可正常工作。如果没有已经生成的缩略图,它只会响应404 - 毫不奇怪。
如果找不到缩略图来创建它,我如何修改以下Nginx-Block以向服务器发出另一个请求?
请求
http://www.proj.com/files/images/234782348234/bunny_thumb.jpg
的Nginx-块
location ~* ^/files/images/(\w+)/.+_thumb\.(jpg|png|gif)$ {
alias /srv/proj/data/uploads/images/temp/$1_thumb.$2;
// No image found? Request it from the server directly on "files/images/234782348234/bunny_thumb.jpg"
}
实际文件路径
/srv/proj/data/uploads/images/temp/234782348234_thumb.jpg
答案 0 :(得分:2)
有时阅读nginx公司的优秀博客会有所帮助。
您搜索的内容称为带有try_files的命名位置。
https://www.nginx.com/resources/admin-guide/nginx-web-server/
https://www.nginx.com/resources/admin-guide/serving-static-content/
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend.example.com;
}
对于您的情况,我会尝试以下
location ~* ^/files/images/(\w+)/.+_thumb\.(jpg|png|gif)$ {
try_files /srv/proj/data/uploads/images/temp/$1_thumb.$2 @callapp;
// No image found? Request it from the server directly
// on "files/images/234782348234/bunny_thumb.jpg"
}
location @callapp {
...
}
答案 1 :(得分:1)
所以,最后不得不再次解决它并找到了一个非常简单的解决方案。 RegexMatches仍然无法在try_files中运行。所以我只使用“alias”指向实际的文件路径,并定义了一个指向expressapp的'error_page 404':
location ~* ^/files/images/(\w+)/.+_thumb\.(jpg|png|gif)$ {
error_page 404 @makethumb
alias /srv/proj/data/uploads/images/temp/$1_thumb.$2;
}
location @makethumb {
proxy_pass http://localhost:3000$uri;
}