Ingress-nginx默认后端只捕获控制器本身而不是应用程序产生的错误



我在aws的kubernetes集群中使用nginx ingress来提供内容。Nginx的ingress有默认的后端功能,它处理所有的URL路径和主机的ingress - Nginx控制器不理解。

我使用helm chart来部署入口,并使用defaultBackend启用默认后端。启用= true .

默认情况下,当我请求指向平衡器但不与入口相关联的任何域时,它会工作并显示错误页面。它只以这种方式工作,并显示404错误。正如我上面所说的,我也想在其他代码上显示自定义错误页面(比如403,当受到whitelist-source-range, 502和503的限制时,由控制器产生,等等)。

根据文档,我添加了custom-http-errors参数configmap。(custom-http-errors: 403, 404, 429, 503, 502)。现在它显示了错误页面的入口错误,但它也取代了页面来自上游。

取代来自前端或api的404页面。它取代了来自jenkins的403代码,这样用户就不会被重定向到登录页面。它用附加信息替换API中的503代码。

我需要捕获由入口控制器本身而不是应用程序产生的错误。

我试图找到方法来取代默认的静态页面,但似乎他们是硬编码在nginx。我也试过用配置片段自定义入口,但似乎没有工作。

提前感谢您的帮助。

这种行为的根本原因来自于vanilla NGINX,可以通过配置中的proxy_intercept_errors参数来管理,该参数告诉NGINX是否应该将代码大于或等于300的代理响应传递给客户端,或者被拦截并重定向到NGINX使用error_page指令进行处理。

当前nginx-ingress在启用custom-http-errors时激活此参数。根据文件:设置至少一个代码还可以启用proxy_intercept_errors,它是处理error_page所需的。

我发现拉请求增加了proxy_intercept_errors参数的单独选项,所以我们只需要合并它。

相关内容

最新更新