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

在auth_request nginx模块返回403之后是否可以返回403响应代码,以便向用户显示禁用指令而不是500内部服务器错误,这不是非常有用的信息.
最佳答案
这可能有所帮助:

如果要显示自己的页面而不是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;

的Perl / Phython:

uwsgi_read_timeout 10;
uwsgi_intercept_errors on;
error_page 502 =500 /static/502.html;
error_page 504 =500 /static/504.html;

ruby:

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

一旦在Nginx中启用了intercept_errors,就无法生成你的
    自己的错误页面,例如HTTP代码500,403等.您必须定义静态
    Nginx中这些错误的页面也是如此.这个限制将被取消
    未来版本的服务.

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

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

转载注明原文:nginx – 如何在auth_request失败后返回403而不是500响应代码 - 代码日志