我想用 捕獲subdomain和重寫 URL /subdomain,例如bhautik.bhau.tk重寫為bhau.tk/bhautik。
我也https://github.com/google/re2/wiki/Syntax試過組語法
這是我的nginx入口配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: subdomain
namespace: subdomain
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
# nginx.ingress.kubernetes.io/rewrite-target: /$sub
nginx.ingress.kubernetes.io/server-snippet: |
set $prefix abcd;
if ($host ~ ^(\w ).bhau\.tk$) {
// TODO?
}
nginx.ingress.kubernetes.io/rewrite-target: /$prefix/$uri
spec:
rules:
- host: "*.bhau.tk"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: subdomain
port:
number: 80
如何從 $host 捕獲子域?
uj5u.com熱心網友回復:
我相信您想要重定向而不是重寫。這是server-snippet您需要的:
nginx.ingress.kubernetes.io/server-snippet: |
if ($host ~ ^(?<subdom>\w )\.(?<basedom>bhau\.tk)$) {
return 302 https://$basedom/$subdom/ ;
}
如果您確實想要重寫,其中用戶看到的 URL 保持不變,但請求將被路由到由同一服務提供的子路徑:
nginx.ingress.kubernetes.io/server-snippet: |
if ($host ~ ^(?<subdom>\w )\.(?<basedom>bhau\.tk)$) {
rewrite ^/(.*)$ /$subdom/$1 ;
}
洗掉rewrite-target指定$prefix. 你不需要它。
?<capturename>and$capturename對是您正在尋找的技巧。
uj5u.com熱心網友回復:
你可以試試
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/server-snippet: |
if ($host ~ "bhautik.bhau.tk")
{
rewrite ^ https://bhau.tk$host permanent;
}
name: test-ingress
spec:
rules:
- host: bhau.tk
http:
paths:
- backend:
serviceName: app-service
servicePort: 3000
path: (/|$)(.*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428593.html
標籤:nginx Kubernetes Kubernetes入口
上一篇:如何使用nginx將所有以www.example.com/page開頭的鏈接重寫為www.example.com/new-page
下一篇:處理PHPURL和GET請求
