我可以用proxy_pass配置nginx来使用代理服务器上的错误文档吗?

6tdlim6h  于 2023-01-16  发布在  Nginx
关注(0)|答案(1)|浏览(131)

我已经配置了带有proxy_pass的nginx来代理/uploads/foo.png这样的URL,以便从S3桶中获取,但显然丢失文件会导致丑陋的XML错误,我希望返回一个静态HTML文件。
我尝试使用S3的“静态网站”功能,但它总是返回(不正确的)403状态码和错误文档,而且似乎没有办法通过proxy_pass来改变这一点。
由于各种原因,使用nginx服务器上的本地文件不是一个选项,这个nginx示例 * 只 * 做代理。
我可以让nginx从代理的S3 bucket重新请求错误文档吗?

gdx19jrr

gdx19jrr1#

是的。首先将404.html放入您的S3存储桶中。然后按如下方式配置您的位置块:

location /uploads {
  proxy_pass YOUR_S3_BUCKET_URL;

  proxy_intercept_errors on;
  error_page 403 404 /uploads/404.html;
}

proxy_intercept_errors将告诉nginx处理代理响应中的错误代码。
error_page将通过在内部将请求更改为/uploads/404.html来处理S3错误代码
最后,您现有的location /uploads块将从代理服务器获取404文档!
假设您甚至可以从不同的来源获取错误文档:

location /uploads {
  proxy_pass ORIGIN_A_URL;
  proxy_intercept_errors on;
  error_page 403 404 /error-docs/404.html;
}

location /error-docs {
  proxy_pass ORIGIN_B_URL;
}

相关问题