nginx - Nginx-Ingress 有时无法重写路径
问题描述
该错误很少发生。大多数情况下,路径重写按预期工作,当错误被触发时,人们会得到一个default backend - 404
HTML 页面作为结果。我检查了 Nginx-Ingress 日志,路径没有被重写,而是传递给upstream-default-backend
而不是我的服务。
这是我的入口清单。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: palette-dev-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /palette/$2
cert-manager.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"
nginx.ingress.kubernetes.io/session-cookie-name: "stickycookie" # secure cookie
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/session-cookie-path: "/"
nginx.ingress.kubernetes.io/client-max-body-size: 50m
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/server-snippet: |
location = / {
return 302 /palette ;
}
spec:
tls:
- hosts:
- dev.example.cloud
- dev.example.com
secretName: tls-secret
rules:
- host: dev.example.cloud
http:
paths:
- backend:
serviceName: palette-service
servicePort: 8080
path: /palette(/|$)(.*)
- host: dev.example.com
http:
paths:
- backend:
serviceName: palette-service
servicePort: 8080
path: /palette(/|$)(.*)
我从来没有亲身经历过这个错误,但至少有两个人经历过。据我所知,如果您再次访问相同的 URL,它将消失。
我在这里不知所措,非常感谢任何帮助。
解决方案
事实证明这是与我们的应用程序交互的 Nginx 错误配置。一旦知道如何触发它,就很容易修复。以前我试图仅从日志中调试它。所需要的只是更新 Nginx 配置(特别是 server-snippet)
推荐阅读
- angular - 角度 - 在 rxjs 订阅等待数据时显示加载
- c# - 互操作错误 HRESULT:服务器上的 0x80020005 (DISP_E_TYPEMISMATCH)
- c++ - contains 不是 std::map MSVC 的成员
- excel - INDEX MATCH 有 2 个条件,匹配部分文本
- ios - 更新终端后 Pod init 无法正常工作(一些弹出窗口变为 ZSH)
- ios - 如何修复 iOS 上 Ironsource Unity SDK 中的错误
- python - 每次我需要在 Lambda 中使用它时,如何避免打包请求?
- angular - 验证不会传播到 Angular 中的自定义表单控件 ng-select
- objective-c - 对具有不可变参数且没有初始化程序的方法进行单元测试的最佳方法是什么?
- polymer - 为什么 Webcomponent 对象的值在同一个 webcomponent 的不同实例之间共享?