我有一个Nginx作为上游
upstream img_servers {
server localhost:8000;
server localhost:8001 backup;
}
我期待服务器监听80将尝试上游的2台服务器。找不到文件时,应该尝试另一个文件 我正在做的是
location ~ (jpg|jpeg|png|gif)$ {
proxy_pass http://img_servers;
proxy_next_upstream http_404;
}
但是,上游服务器使用了image_filter模块,当找不到某个图像时,它总是返回415.
server {
listen 8000;
access_log logs/access_8000.log main;
error_page 415 =404 /empty.gif;
location ~ (sku_\d+(\d)(\d)(\d)_\d+)_(thumb|small)\.(jpg|png|jpeg|gif)$ {
alias /srv/http/media/$2/$3/$4/$1.$6;
image_filter resize 150 -;
image_filter_buffer 2M;
}
}
因此,当代码运行到该位置,并且该文件不存在时,它会向代理返回415。我期望返回404,以便代理知道尝试下一个上游服务器。根据{{3}}的文件,我希望通过以下方式实现这一目标:
error_page 415 =404 /empty.gif;
我不知道为什么这对我不起作用。有什么建议?
答案 0 :(得分:0)
最后我找到了解决方案。一个小技巧可以解决这个问题:
error_page 404 =404 /empty.gif;
虽然nginx向用户返回了415
,但在内部仍然认为它是404
。由于我使用的是modified version图像过滤器,因此可能是导致此问题的补丁。我确定后,我会编辑我的答案。
答案 1 :(得分:0)
{{1}}