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.