auth_request 失败后如何返回 403 而不是 500 响应代码

joe*_*cks 4 nginx

是否有可能在auth_request nginx模块返回403后返回403响应码,这样也会向用户显示禁止指令而不是500内部服务器错误,这不是很有用。

Zer*_*ero 5

这可能有帮助:

如果要显示自己的页面而不是DotCloud 提供的默认错误页面,则必须使用一些技巧。

首先,请注意,这仅适用于嵌入 Nginx 服务器的堆栈。对于其他堆栈,DotCloud 负载均衡器将是您的用户和您的应用程序之间的唯一层,目前,它只能提供默认错误页面。

你需要告诉 Nginx 做所有这些事情:

对 502 和 504 错误使用自定义静态页面;将错误代码重新映射到例如 500(否则,DotCloud 负载均衡器将提供默认的 502 和 504 页面);拦截uwsgi/fastcgi发送的错误(否则我们自定义的静态页面将不会被使用);减少默认超时,因此您的超时处理程序将在平台范围的超时处理程序之前启动。假设您的错误页面在 /static/502.html 和 /static/504.html 中,您可以使用以下 nginx.conf 片段:

PHP:

fastcgi_read_timeout 10;
fastcgi_intercept_errors on;
error_page 502 =500 /static/502.html;
error_page 504 =500 /static/504.html;
Run Code Online (Sandbox Code Playgroud)

Perl/Phython:

uwsgi_read_timeout 10;
uwsgi_intercept_errors on;
error_page 502 =500 /static/502.html;
error_page 504 =500 /static/504.html;
Run Code Online (Sandbox Code Playgroud)

红宝石:

对于Ruby 应用程序,由于Passenger 将使用错误代码500,因此不需要重写。默认的 Nginx 配置已经为此提供了一个处理程序 (errorpage 500 /static/500.html)。此外,由于Passenger 没有公开配置变量来更改超时,因此您无法提供自定义504 页面。

一旦您在 Nginx 中启用了拦截错误,您就不能再生成自己的错误页面,例如 HTTP 代码 500、403 等。您还必须在 Nginx 中为这些错误定义静态页面。此限制将在服务的未来版本中取消。

来源:http : //docs.dotcloud.com/guides/5xx/

否则,请查看http://wiki.nginx.org/NginxVariableTutorialCn06上的此页面,该页面提供了一个不错的教程。[虽然我建议通过谷歌浏览器翻译页面...]