Nginx Ingress控制器的自定义错误后端配置

问题描述 投票:0回答:1

我在Kubernetes集群的Nginx命名空间中部署了Nginx Ingress控制器,我正在构建一个自定义的后端镜像,并将其部署在Nginx命名空间中作为nginx默认后端。现在它应该提供自定义的http错误页面,如404,500和503等。

我建立了一个,并使用 helm-chart 部署了下面的 default.conf 文件,但它正在为 404 错误提供 index.html,而只提供默认的 503 错误(不是我自定义的 503.html 页面)。

server {
listen 8080 default_server;
root /var/www/html;
index index.html;
location / {
}
location /healthz {
    access_log off;
    return 200 "healthy\n";
}
location /metrics {
    stub_status on;
}
error_page 404 /404.html;
location = /404.html {
    internal;
}
error_page 500 /500.html;
location = /500.html {
    internal;
}
error_page 503 /503.html;
location = /503.html {
    internal;
}

}

Docker文件

FROM nginxinc/nginx-unprivileged
USER root
RUN rm /etc/nginx/conf.d/default.conf && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY content/ /var/www/html/
CMD ["nginx", "-g", "daemon off;"]

如果你需要更多的信息,请问我,你的帮助将是非常感激的,谢谢。

kubernetes dockerfile devops nginx-config nginx-ingress
1个回答
0
投票

更新默认错误页面,编辑nginx-ingress-controller的配置图。插入一个新的键 自定义http错误 与你想改变其错误页面的HTTP状态码,如。

apiVersion: v1  
kind: ConfigMap  
data:  
  custom-http-errors: 404,413,503 
  enable-vts-status: "false"  
metadata:  
  labels:  
    app: nginx-ingress  
    chart: nginx-ingress-1.6.0  
    component: controller  
    heritage: Tiller  
    release: nginx-ingress  
  name: nginx-ingress-controller  
  namespace: Nginx

现在,再次启动测试命令

curl -i "[http://err-test.192.168.64.5.nip.io/err?code=413](http://err-test.192.168.64.5.nip.io/err?code=413)"  
HTTP/1.1 404 Not Found  
Server: nginx/1.15.10  
Date: Sun, 05 May 2019 11:36:04 GMT  
Content-Type: text/plain; charset=utf-8  
Content-Length: 21  
Connection: closedefault backend - 404

这就是 你想要的东西。Nginx的入口控制器正确地捕获了我们想要自定义的HTTP状态码。然而,默认的Nginx "default-backend"。(图片:k8s.gcr.iodefaultbackend:1.4) 只是简单地返回404状态,而不考虑应用程序打算返回的实际状态码。如果状态码要用于其他目的,这将会导致一个问题。

Nginx入口控制器 的文档。

自定义后端将返回正确的HTTP状态码,而非 200. NGINX不会改变自定义默认后端的响应。

然后在Dockerfile中,你必须添加路径到你定义的自定义后端错误。

ADD custom-error-pages /  
CMD ["/custom-error-pages"]

构建镜像并推送到docker hub。在K3s中重新部署Nginx头盔图,它看起来像。

apiVersion: k3s.cattle.io/v1  
kind: HelmChart  
metadata:  
  name: nginx-ingress
  namespace: Nginx
spec:  
  chart: stable/nginx-ingress  
  targetNamespace: kube-system  
  valuesContent: |-  
    defaultBackend:  
      enabled: true  
      name: default-backend  
      image:  
        repository: your-image/custom-error-page  
        tag: latest

在K8s中简单执行。

helm upgrade nginx-ingress stable/nginx-ingress --set defaultBackendService.enabled=true --set defaultBackend.image.repository=your-image/custom-error-page --set defaultBackend.image.tag=latest

然后再次测试,执行同样的curl命令。

➜ curl -i "[http://err-test.192.168.64.5.nip.io/err?code=413](http://err-test.192.168.64.5.nip.io/err?code=413)"  
HTTP/1.1 413 Request Entity Too Large  
Server: nginx/1.15.10  
Date: Sun, 05 May 2019 12:09:21 GMT  
Content-Type: */*  
Transfer-Encoding: chunked  
Connection: close4xx html

你就会看到自定义的错误页面 有正确的HTTP状态代码。

由于你捕捉的是503状态,所以要缩小副本的规模。

执行命令。

$ kubectl scale deploy err-status-test --replicas=0

如果你再次访问应用程序,你会看到自定义的错误页面,状态码显示为503,这是预期的。

更多信息你可以在这里找到。自定义黑客错误.

© www.soinside.com 2019 - 2024. All rights reserved.