HTTP 响应代码 500 vs 502 vs 503?

HTTP response codes 500 vs 502 vs 503?

完成 HTTP response codes .. 并了解这些响应代码 (rcode) 代表什么

但我不确定在下面的情况下会向 client/consumer(比如浏览器)发送什么 rcode。我使用 NGINX 作为反向代理,使用 Apache 作为 HTTP NGINX 后面的服务器 运行 Web 应用程序(比如应用程序)。

场景组合

  1. 应用程序发生运行时错误,抛出 rcode 为 500(默认运行时错误代码)。我的理解是 nginx 将继续抛出 500 而不是转换 它到 502 ?

  2. 应用程序已关闭或不可用。我的理解是 nginx 在这种情况下会抛出 503 而不是 502 ?

  3. 应用程序的处理时间比 nginx 默认连接超时时间长。我的理解是 nginx 在这种情况下会抛出 504 ?

  4. 如果以上几点都正确不知道 nginx 什么时候会抛出 502? NGINX 何时会将上游服务器收到的响应视为无效响应?

  1. NGINX 不会更改应用程序中的 500 ,只要 它不会遇到从 Apache 联系/获取数据的问题。例如。您的应用程序生成 500 是一种完全可能的情况,但是 NGINX 与 Apache 通信的问题将导致不同的 50x,因此客户端将看到 50x。

  2. 如果 Apache 完全关闭,您应该得到 502(网关错误),因为在您的设置中,Apache NGINX 的网关。如果 NGINX 没有以某种方式 "like" Apache 的响应,也会发生同样的情况,例如当 Apache 发送 headers 超过 NGINX 的 proxy_buffer_size

  3. 的响应时
  4. 是的,当 Apache/app 相对于 NGINX 超时

  5. 超时时,您应该得到 504(网关超时)
  6. 参见第 2 点。以及以下内容:NGINX 将简单地传递来自上游的任何响应代码(如在网关 = Apache 中),因此它不需要考虑是否给定默认情况下,响应在响应代码方面无效。

可以 让 NGINX 考虑来自 Apache 的错误响应代码,并通过使用 proxy_intercept_errors, which combined with error_page 采取不同的操作,可以让您 "rewrite" 响应来自 Apache 的代码/错误消息,例如"masquarade" 应用程序失败 Service Unavailable:

error_page 500 =503 /503.html;
proxy_intercept_errors on;