带有前缀路径的 nginx 入口删除尾部斜杠

时间:2021-06-09 20:05:37

标签: kubernetes-ingress nginx-ingress

这就是我如何使用入口定义对我的服务的访问。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: client-ingress
spec:
  rules:
    - host: gemini.demo
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: client-service
                port:
                  number: 80

基本上它可以根据我的需要工作,除了一个小细节。在浏览器中,如果没有后续路径,前缀斜杠将保留在域后面。

所以当我去http://gemini.demo时我会得到http://gemini.demo/

如何去掉域名末尾的斜杠?

1 个答案:

答案 0 :(得分:-1)

根据RFC 2616 (HTTP/1.1), section 3.2.2,,URL http://www.example.comhttp://www.example.com/ 是等价的,HTTP 客户端在向服务器发送请求之前必须将前者规范化为后者:

“如果 abs_path 不存在于 URL 中,则在用作资源的请求 URI (section 5.1.2) 时,它必须以“/”形式给出。” >

第 5.1.2 节所述:

“请注意,绝对路径不能为空;如果原始 URI 中不存在,则必须以“/”(服务器根目录)形式给出。”

RFC 3986 (URI Generic Syntax)section 6.2.3, Scheme-Based Normalization 中确认了这一点,并指出:

"例如,由于"http"方案使用了权限组件,默认端口为"80",并且定义了一个空路径等效于"/",所以以下四个URI是等效的:< /p>

http://example.com
http://example.com/
http://example.com:/
http://example.com:80/

一般来说,一个使用通用语法的带有空路径的权限的 URI 应该被规范化为“/”的路径。同样,显式的“:port”,其端口为空或方案的默认值,等同于省略了端口及其“:”定界符,因此应通过基于方案的规范化删除。例如,上面的第二个 URI 是“http”方案的标准形式。

从技术上讲,RFC 3986 第 6.2.3 节中描述的规范化对于以下实现是可选的,例如仅索引 URL,尽管 RFC 2616 强制要求希望实际发送 HTTP 请求的客户端。尽管如此,鉴于标准允许这种规范化,并且考虑到搜索引擎通常不想故意向其索引添加重复项,我们可以合理地确定几乎所有搜索引擎都会将所有这些 URL 规范化为相同。

因此,无论您使用 http://www.example.com 还是 http://www.example.com/,对浏览器或搜索引擎都没有影响。它们是等价的。

接下来,如果您提供有关您正在执行的现场场景或测试的更多详细信息,将会很有帮助。