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

在auth_request nginx模块返回403后是否可以返回一个403响应代码,以便向用户显示一个禁止的指令,而不是500个内部服务器错误,这是不是很有用的信息。

这可能有助于:

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

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

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

为502和504错误使用自定义静态页面; 将错误代码重新映射到例如500(否则,DotCloud负载均衡器将提供缺省的502和504页); 截获uwsgi / fastcgi发送的错误(否则,我们自定义的静态页面将不会被使用); 减less默认超时,所以你的超时处理程序将在平台范围的超时处理程序之前启动。 假设您的错误页面位于/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,所以不需要重写。 默认的Nginxconfiguration已经提供了一个处理程序(errorpage 500 /static/500.html)。 此外,由于Passenger不公开一个configurationvariables来改变超时,所以你不能提供一个自定义的504页面。

一旦你在Nginx中启用了intercept_errors,你就不能再为HTTP代码500,403等生成你自己的错误页面了。你也必须在Nginx中为这些错误定义静态页面。 这个限制将在未来版本的服务中解除。

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

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

感谢Zero Stack的帮助,但是我只是偶然发现了自己的答案,似乎我把configuration错误放在第一位。 我将nginxconfiguration为一个透明的ssl代理,通过一个ssl连接来提供http内容。 对于身份validation,我使用了auth_request模块,它不包含在nginx的标准包中。

所以现在,当我拒绝authentication服务器的请求时,nginx提供了一个500er的页面,这看起来很奇怪,因为模块应该设置了一个403错误代码。 但我不明白为什么nginx解释为500错误。 偶然,我发现我应该configurationproxy_pass不拦截错误页面!

解决我的具体问题是设置:

 proxy_intercept_errors off; 

嗯任何意见,如何处理赏金?