Master URL Rewrites with Ingress Nginx Controller: Practical Configurations
This guide explains why URL rewriting is essential for security, performance, content transformation, load balancing, session persistence, and cache optimization, and provides step‑by‑step Ingress Nginx Controller configurations to reduce, add, or set root paths for Kubernetes services.
In modern application development, managing many service endpoints is crucial; the Ingress Nginx Controller offers load balancing, service discovery, and complex routing, with URL rewrite functionality to hide internal structures, simplify URLs, or perform permanent redirects.
Why Rewrite?
Security enhancement : add or modify HTTP headers such as X-Frame-Options or Content‑Security‑Policy to prevent XSS, click‑jacking, and other threats.
Performance optimization : refine load‑balancer routing rules or modify requests/responses to boost application performance.
Content transformation : convert URL schemes, redirect HTTP to HTTPS, or migrate old URL patterns to new ones.
Load balancing : ensure traffic is distributed to servers according to specific rules.
Session persistence : maintain consistent user sessions across requests.
Cache optimization : control caching behavior by rewriting URLs or query parameters.
Practical Ingress Rewrite Configurations
1. Reduce URL Path
Scenarios include overly long URLs, multiple modules under one domain, or moving an application’s root from
/xxxto
/.
Tip : This article discusses three such cases.
<code>$ kubectl get service simple
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
simple ClusterIP 10.97.177.81 <none> 9999/TCP 5d11h
$ curl 10.97.177.81:9999/who/hostname
simple-7864ccf7c9-s5dmz</code> <code>$ cat <<'EOF' | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple
namespace: default
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /who/$1
spec:
ingressClassName: nginx
rules:
- host: simple.jiaxzeng.com
http:
paths:
- backend:
service:
name: simple
port:
number: 9999
path: /(.*)
pathType: Prefix
EOF</code> <code>$ curl -H "host: simple.jiaxzeng.com" 172.139.20.100/hostname
simple-7864ccf7c9-s5dmz</code>Tip : The simple app rewrites
/who/hostnameto
/hostname;
172.139.20.100is the Ingress address.
2. Add URL Path
Rewrite
/headerto
/request/header.
<code>$ kubectl get service simple
... (output) ...
$ curl 10.97.177.81:9999/header
{ "Accept": ["*/*"], "User-Agent": ["curl/7.29.0"] }</code> <code>$ cat <<'EOF' | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple
namespace: default
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: simple.jiaxzeng.com
http:
paths:
- backend:
service:
name: simple
port:
number: 9999
path: /request(/|$)(.*)
pathType: Prefix
EOF
</code> <code>$ curl -H "host: simple.jiaxzeng.com" 172.139.20.100/request/header
{ "Accept": ["*/*"], "User-Agent": ["curl/7.29.0"], "X-Forwarded-For": ["172.139.20.92"], "X-Forwarded-Host": ["simple.jiaxzeng.com"], "X-Forwarded-Port": ["80"], "X-Forwarded-Proto": ["http"], "X-Forwarded-Scheme": ["http"], "X-Real-Ip": ["172.139.20.92"], "X-Request-Id": ["7c057e4e1bb4683a4ef72879e0789ebb"], "X-Scheme": ["http"] }</code>Tip : The simple app rewrites
/headerto
/request/header;
172.139.20.100is the Ingress address.
3. Set Application Root Path
Change the application’s root from
/helloto
/.
<code>$ kubectl get service simple
... (output) ...
$ curl 10.97.177.81:9999/hello
hello go server.</code> <code>$ cat <<'EOF' | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple
namespace: default
annotations:
nginx.ingress.kubernetes.io/app-root: /hello
spec:
ingressClassName: nginx
rules:
- host: simple.jiaxzeng.com
http:
paths:
- backend:
service:
name: simple
port:
number: 9999
path: /
pathType: Prefix
EOF
</code> <code>$ curl -I -L -H "host: simple.jiaxzeng.com" 172.139.20.100/
HTTP/1.1 302 Moved Temporarily
Location: http://simple.jiaxzeng.com/hello
...
HTTP/1.1 200 OK
...</code>Tip : The simple app changes
/helloto the root path;
172.139.20.100is the Ingress address.
References
https://kubernetes.github.io/ingress-nginx/examples/rewrite
https://www.kancloud.cn/jiaxzeng/kubernetes/3125882
By configuring rewrite rules in the Ingress Nginx Controller, you can simplify URL structures and improve system maintainability and scalability.
Linux Ops Smart Journey
The operations journey never stops—pursuing excellence endlessly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.