Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Kubernetes ingress重写目标和重写正则表达式/捕获组(?i)_Regex_Nginx_Kubernetes - Fatal编程技术网

Regex Kubernetes ingress重写目标和重写正则表达式/捕获组(?i)

Regex Kubernetes ingress重写目标和重写正则表达式/捕获组(?i),regex,nginx,kubernetes,Regex,Nginx,Kubernetes,基于 我创建了以下入口: apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/enable-rewrite-log: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 name: ing-something namespace: samples spe

基于

我创建了以下入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: ing-something
  namespace: samples
spec:
  rules:
  - host: myhost.internal
    http:
      paths:
      - backend:
          serviceName: my-app
          servicePort: 8080
        path: /api(/|$)(.*)
  tls:
  - hosts:
    - myhost.internal
    secretName: lets
status:
  loadBalancer:
    ingress:
    - {}
当我查看生成的nginx.config的底部时,它包含:

## start server myhost.internal
server {
    server_name myhost.internal ;
    
    listen 80;
    
    set $proxy_upstream_name "-";
    set $pass_access_scheme $scheme;
    set $pass_server_port $server_port;
    set $best_http_host $http_host;
    set $pass_port $pass_server_port;
    
    listen 443  ssl http2;
    ...
    location ~* "^/api(/|$)(.*)" {
        
        set $namespace      "samples";
        set $ingress_name   "ing-something";
        set $service_name   "my-app";
        set $service_port   "8080";
    set $location_path  "/api(/|${literal_dollar})(.*)";
        
        ...
        

        
        rewrite "(?i)/api(/|$)(.*)" /$2 break;
        proxy_pass http://upstream_balancer;
        
        proxy_redirect                          off;
        
    }
    
    location ~* "^/" {
        
        set $namespace      "";
        set $ingress_name   "";
        set $service_name   "";
        ...
    }
我不明白这部分
(?I)
从何而来:

        rewrite "(?i)/api(/|$)(.*)" /$2 break;
这意味着什么


有什么想法吗?

这是一个基于评论信息的社区维基答案,为了更好的可见性而发布。请随意扩展它

正如注释中已经指出的,路径匹配:

使用
nginx.ingres.kubernetes.io/use regex
注释将 指示入口上定义的路径是否使用常规路径 表达。默认值为
false

以下内容将指示正在创建正则表达式路径 使用:

以下内容将指示正则表达式路径不可用 正在使用:

nginx.ingress.kubernetes.io/use-regex: "false"
当此注释设置为
true
时,不区分大小写的规则 表达式将在所有路径上强制执行 给定的主机,无论它们在什么入口上定义

此外,如果在任何 给定主机的入口,然后是不区分大小写的正则表达式 将在给定主机的所有路径上强制执行 无论它们在什么入口上定义

使用前请先阅读相关内容 修饰语

有关模式修改器的所有详细信息,请参见:

模式修饰符语法由两个不同于正则表达式的元素组成 口味。括号和问号用于添加修饰符 给正则表达式。取决于它在正则表达式和正则表达式中的位置 它可能影响整个正则表达式或其一部分。如果有味道 至少支持一个修饰符语法,那么它也将支持一个修饰符语法 一个或多个可在修改器内使用的字母进行切换 具体模式。如果不符合要求,则所有字母均表示“不适用” 那味道

请注意不敏感的情况:

(?i)    Turn on case insensitivity. (?i)a matches a and A.

不是100%确定,但我发现这表明
(?I)
开启了大小写不敏感。匹配@u123的路径有进展吗?你有机会看到上面的建议吗?@WytrzymałyWiktor真的不知道该怎么办我可以在某个地方单击“批准/应用”按钮吗?看起来不错!你好@u123。我发布了一个社区维基答案,以提高可见性。我不会因此获得任何声誉,但其他人会更容易找到它。请随意批准。这没有提到@Sumit在第一条评论中提供的(?i)(这是我最初的问题)的细节。嗨@u123。谢谢你指出这一点。我已经编辑了答案以包含这些信息。
(?i)    Turn on case insensitivity. (?i)a matches a and A.