我有一个简单的AWS Lambda图像生成器,可将图像保存到S3进行缓存。在我的服务器上,我使用nginx来检查所请求的图像是否已经生成。然后提供服务或将请求传递给Lambda生成它。
简化的nginx配置:
location ~/img/(.*)\.(png|gif|jpg|jpeg|webp|svg)$ {
# check file on S3
proxy_pass https://S3Url.com;
proxy_redirect off;
proxy_intercept_errors on;
# if not found, use generator
error_page 404 @image_proxy;
}
location @image_proxy {
# ... do some rewrites ...
# pass request to Lambda image generator
proxy_pass https://LambdaUrl.com;
proxy_redirect off;
}
现在,当S3上不存在图像时,请求将正确传递给Lambda函数,然后Lambda函数将返回带有200状态代码的图像(或必要时返回带有404/500的错误消息)。但是,当需要生成图像时,我的浏览器始终显示404状态代码(第一个proxy_pass的结果,而不是@image_proxy的第二个)。
我总是可以将error_page重写为error_page 404 =200 @image_proxy
,这在浏览器中会很好地显示,但是由于生成器还可能遇到错误或文件丢失,并且需要能够返回404或500,因此无法解决该问题。
如何使Nginx返回proxy_pass https://LambdaUrl.com;
的状态代码?我希望这是默认行为...如果是这样,我在做什么错了?