具有error_page +多个proxy_pass的Nginx状态代码

时间:2020-03-18 15:43:57

标签: nginx

我有一个简单的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;的状态代码?我希望这是默认行为...如果是这样,我在做什么错了?

0 个答案:

没有答案