【问题标题】:Ingress rewrite string is being ignored入口重写字符串被忽略
【发布时间】:2022-01-05 14:42:25
【问题描述】:

要求是访问https://meals.food.com/burger2中的汉堡服务。 应用内的上下文路径是/burger

入口

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /burger/$2
spec:
  rules:
  - host: meals.food.com
    http:
      paths:
      - backend:
          service:
            name: burger
            port:
              number: 80
        path: /burger2(/|$)(.*)
        pathType: Prefix

在检查入口控制器日志时:

[05/Jan/2022:13:54:11 +0000] "GET // HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11;Linux x86_64)AppleWebKit/537.36(KHTML,像 Gecko) Chrome/96.0.4664.110 Safari/537.36" 957 0.002 [anotherservice-80] [] x.x.x.x:80 0 0.002 304 230200x023

我的入口配置是否正确? 我的怀疑是某些东西正在改变我从浏览器到入口控制器的请求之间的请求。

【问题讨论】:

    标签: kubernetes-ingress nginx-ingress


    【解决方案1】:

    我的入口配置正确吗?我怀疑有些东西正在改变我从浏览器到入口控制器的请求之间的请求。

    您的ingress config 看起来不错。我没有看到任何错误。他将采取以下行动: 示例地址meals.food.com/burger2/blah-blah-blah 将被重写为meals.food.com/burger/blah-blah-blah。如果这是您的意图,那么配置就可以了。

    但是你有304 HTTP code

    HTTP 304 Not Modified客户端重定向响应码表示不需要重传请求的资源。它是对缓存资源的隐式重定向。当请求方法为 safe(如 GETHEAD 请求)或请求是有条件的并使用 If-None-MatchIf-Modified-Since 标头时,会发生这种情况。

    等效的 200 OK 响应将包含标题 Cache-ControlContent-LocationDateETagExpiresVary

    换句话说 当浏览器收到请求,但不知道是否有最新版本的写入时,它会发送一个条件验证请求,通过If-Modified-SinceIf-None-Match 标头将最后修改的日期和时间传达给服务器。

    服务器然后检查这些标头并确定它们的值是否相同。如果是这样 - 服务器将发回 HTTP 304 代码,浏览器将使用资源的缓存副本。如果不是,则说明文件已被修改,浏览器会通过发送 HTTP 200 代码保存一个新的副本。

    在您的情况下,看起来好像有人试图多次下载相同(未更改)的资源,因此得到代码 304。如果是这样,一切都很好。

    【讨论】:

    • 你好@letthefireflieslive。这是answer你的问题吗?
    • 经过进一步检查,有另一个入口将主机餐点.food.com 它使用 / 作为路径..它是日志中的另一个服务..所以我把规则放在这个后端之前。 . 它适用于我的问题,但它仍然不起作用,因为我们有一个 nginx 映射(在 k8s 之外),它将餐食.food.com/burger 映射到 docker 服务..我相信这可以捕获餐食.food。 com/burgers 也
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多