【问题标题】:How to change the status code of a proxied server response in nginx?如何在 nginx 中更改代理服务器响应的状态码?
【发布时间】:2017-05-24 10:13:56
【问题描述】:

我很难将 nginx 配置为公共 S3 端点的代理。我的用例需要更改 S3 响应的状态代码,同时保留响应负载。

S3 返回的可能状态码包括 200 和 403。对于我的用例,我需要将这些状态码映射到 503。

我尝试了以下不起作用:

location ~* ^/.* {
  [...]
  proxy_intercept_errors on;
  error_page             200 =503 $upstream_http_location
}

Nginx 输出如下错误:

nginx: [emerg] 值“200”必须在 /etc/nginx/nginx.conf:xx 中的 300 到 599 之间

这是一个更完整的sn-p:

server {
  listen       80;

  location ~* ^/.* {
    proxy_http_version         1.1;
    proxy_method               GET;
    proxy_pass                 http://my-s3-bucket-endpoint;
    proxy_pass_request_body    off;

    proxy_set_header       Content-Length "";
    proxy_set_header       Connection "";
    proxy_set_header       Host my-s3-bucket-endpoint;
    proxy_set_header       Authorization '';

    proxy_hide_header      x-amz-id-2;
    proxy_hide_header      x-amz-request-id;
    proxy_hide_header      Set-Cookie;
    proxy_ignore_headers   "Set-Cookie";

    proxy_cache            S3_CACHE;
    proxy_cache_valid      200 403 503 1h;
    proxy_cache_bypass     $http_cache_purge;
    add_header             X-Cached $upstream_cache_status;

    proxy_intercept_errors on;
    error_page             200 =503 $upstream_http_location;
  }
}

有没有可能用 nginx 实现我所需要的?

【问题讨论】:

  • 阅读系统告诉你的内容。您不能更改“成功”返回码。这毫无意义。

标签: nginx proxy proxypass


【解决方案1】:

我找到了一个或多或少合适的解决方案。这有点骇人听闻,但它确实有效。

关键是将我的 S3 存储桶的索引文档设置为不存在的文件名。这会导致对 S3 存储桶端点 / 上的请求导致 403。

由于 nginx 代理将所有传入请求映射到 S3 存储桶端点上的 /,因此结果始终为 403,nginx 代理可以拦截该结果。从那里,error_page 指令告诉它通过在 S3 存储桶端点中请求特定文档(在本例中为 error.json)进行响应,并使用 503 作为响应状态代码。

location ~* ^/. {
  proxy_intercept_errors on;
  error_page             403 =503 /error.json;
}

此解决方案涉及将两个请求发送到 S3 存储桶端点(/、/error.json),但至少似乎使用上面更完整的 sn-p 中的配置为这两个请求启用了缓存。

【讨论】:

  • 只需关闭后端服务器进行维护,您就会得到错误而无需任何技巧。
  • 但随后用户将看到负载均衡器的默认通用 503 消息。我需要返回一个自定义错误消息,最终可由团队中的非技术人员配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多