我在aws eks kubernetes集群中使用nginx ingress来服务content。Nginx ingress有defaut-backend功能,可以处理所有URL路径,并托管Ingress-NGINX控制器无法理解的内容。
我使用helmx 1 e2f1x部署ingress,并使用defaultBackend.enabled=true启用默认后端。
默认情况下,它的工作原理,并显示错误页面时,我请求任何域指向平衡器,但不与入口相关联。它的工作方式只有这样,并显示404错误。正如我上面所说的,我想在另一个代码上显示自定义错误页面(如403,受whitelist-source-range
限制,502和503由控制器产生等)。
根据docs,我在configmap中添加了custom-http-errors
参数。(custom-http-errors: 403, 404, 429, 503, 502
)。现在它会像预期的那样显示入口错误页面,但它也会替换来自上游的页面。
它取代了来自前端或API的404页面。它取代了jenkins的403代码,因此用户不会被重定向到登录页面。它用附加信息替换来自API的503代码。
我需要捕捉错误probuced入口控制器本身没有应用程序。
我试图找到替换默认静态页面的方法,但似乎它们在nginx中是硬编码的。我也试着用配置片段自定义ingress,但似乎什么都不起作用。
提前感谢任何帮助。
1条答案
按热度按时间rbl8hiat1#
这种行为的根本原因来自vanilla NGINX,可以通过配置中的proxy_intercept_errors参数进行管理,该参数告诉nginx是否应该将代码大于或等于300的代理响应传递给客户端,或者拦截并重定向到nginx以使用error_page指令进行处理。
当前nginx-ingress在启用custom-http-errors时激活此参数。根据docs:设置至少一个代码也会启用处理error_page所需的proxy_intercept_errors。
我发现pull request为proxy_intercept_errors参数添加了单独的选项,所以我们只需要合并它。