You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
Nginx Ingress
Nginx Ingress 配置 URL 重写规则
复制全文
下载 pdf
Nginx Ingress 配置 URL 重写规则
Nginx Ingress 支持 URL 重写功能。本文为您介绍如何配置 Nginx Ingress 的 URL 重写功能。​
注意​
Nginx Ingress 功能即将下线,详情请参见 【产品公告】NGINX Ingress 停止维护公告。​
背景说明​
在某些应用场景中,后端服务提供的 URL 与 Nginx Ingress 规则中配置的路径不同。默认情况下,Nginx Ingress 将访问路径直接转发到后端服务中的相同路径,如果不配置 URL 重写规则,由于访问路径和服务路径不同,访问将返回404。此时,需要使用 URL 重写规则,改写服务访问的 URL,使其能够访问到后端服务的真实路径。​
前提条件​
  • 已安装 ingress-nginx 组件。详情请参见 安装组件。​
操作步骤​
Nginx Ingress 支持通过 Annotation 配置 URL 重写规则,示例和说明如下:​
​
apiVersion: networking.k8s.io/v1​
kind: Ingress​
metadata:​
name: nginx-ingress # 路由规则的名称​
annotations:​
nginx.ingress.kubernetes.io/rewrite-target: "/$2"​
spec:​
ingressClassName: nginx # 指定 Ingress Controller​
rules:​
- host: example.com # 转发规则域名​
http:​
paths:​
- backend:​
service:​
name: service-demo # 请求被转发到的目标服务名称​
port:​
number: 80 # 请求被转发到的目标服务开放端口号​
path: /demo(/|$)(.*) # 访问路径​
pathType: ImplementationSpecific​
​
Annotation 说明如下表所示。​
​
字段​
类型​
是否必须​
描述​
默认值​
nginx.ingress.kubernetes.io/rewrite-target​
String​
是​
URL 重写的目标 URI,并使用正则表达式定义捕获组。​
无​
​
在nginx.ingress.kubernetes.io/rewrite-target注解中,您可以使用正则表达式定义捕获组,例如本例中,$2表示将访问路径中,第二个括号(.*)中匹配到的所有字符填写到nginx.ingress.kubernetes.io/rewrite-target注解中。例如:​
  • 请求example.com/demo会重写为example.com/​
  • 请求example.com/demo/会重写为example.com/​
  • 请求example.com/demo/test会重写为example.com/test​
结果验证​
查看配置​
执行以下命令,查看 ingress 配置。​
​
kubectl get ingress​
​
预期返回结果如下,表示 Ingress 创建成功。其中180.xxx.xxx.xxx为 Nginx Ingress 对应 CLB 的公网或私网 IP 地址。​
​
NAME CLASS HOSTS ADDRESS PORTS AGE​
nginx-ingress nginx example.com 180.xxx.xxx.xxx 80 74s​
​
访问服务​
由于后端服务默认的服务路径为/,而 Ingress 中配置的路径为/demo。当未配置 URL 重写规则时,由于路径不一致,直接通过 Ingress 访问服务时,返回404。​
​
curl -H "Host: example.com" http://180.xxx.xxx.xxx/demo​
​
预期返回结果如下:​
​
<html>​
<head><title>404 Not Found</title></head>​
<body>​
<center><h1>404 Not Found</h1></center>​
<hr><center>nginx</center>​
</body>​
</html>​
​
当配置了 URL 重写规则后,使用以下命令访问服务。​
​
curl -H "Host: example.com" https://180.xxx.xxx.xxx/demo​
​
预期输出如下,能够正确地访问到后端服务。​
​
<!DOCTYPE html>​
<html>​
<head>​
<title>Welcome to nginx!</title>​
<style>​
html { color-scheme: light dark; }​
body { width: 35em; margin: 0 auto;​
font-family: Tahoma, Verdana, Arial, sans-serif; }​
</style>​
</head>​
<body>​
<h1>Welcome to nginx!</h1>​
<p>If you see this page, the nginx web server is successfully installed and​
working. Further configuration is required.</p>​
​
<p>For online documentation and support please refer to​
<a href="http://nginx.org/">nginx.org</a>.<br/>​
Commercial support is available at​
<a href="http://nginx.com/">nginx.com</a>.</p>​
​
<p><em>Thank you for using nginx.</em></p>​
</body>​
</html>​
​
​
最近更新时间:2026.04.07 14:29:43
这个页面对您有帮助吗?
有用
有用
无用
无用