nginx 入口控制器的自定义错误页面

nginx 入口控制器的自定义错误页面

当我的 kubernetes 服务无法正常工作时 ( ),我尝试获取漂亮的错误页面replicas: 0。因此,我找到了以下资源:

Go 源代码custom-error-pages需要编译,我试图避免这一点。因此,我搜索了预构建的 Docker 镜像,并在 quay.io 上找到了一个:

但是,quay.io 抱怨镜像中存在一些安全风险,所以我寻找了另一种解决方案。我的想法是使用标准nginxWeb 服务器获得类似的解决方案。

所需功能:

  • 使用 CSS 提供美观的自定义错误页面
  • 使用以下方式调用时提供 JSON 回复Accept: application/json
  • 返回标头中给出的 nginx ingress controller 的错误代码X-Code
  • 提供的错误页面应取决于错误代码(4xx 与 5xx)

经过一些研究,我想出了以下解决方案:

server {

  listen 0.0.0.0:8080;
  server_name default;
  root /app;

  location /healthz {
    return 200 "ok";
  }

  location /status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
  }

  set $uri_and_code "${http_x_original_uri}${http_x_code}";

  set $type "html";

  if ($http_x_format = 'application/json') {
    set $type "json";
  }

  error_page 403 404 /4xx.${type};
  error_page 500 502 503 504 /5xx.${type};

  location /4xx { internal; }
  location /5xx { internal; }

  location / {
    if ($http_x_original_uri = '') { return 404; }
    if ($uri_and_code = '/403') { return 403; }
    if ($uri_and_code = '/404') { return 404; }
    if ($uri_and_code = '/502') { return 502; }
    if ($uri_and_code = '/503') { return 503; }
    if ($uri_and_code = '/504') { return 504; }

    try_files $http_x_original_uri $uri $uri/ =404;
  }

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
  }

  location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off;
    log_not_found off;
    expires max;
  }

}

我并不完全满意,因为它依赖iflocation /伊菲斯维尔)。还有更好的解决办法吗?

干杯,

弗洛克

相关内容