Are you using Kubernetes and want to redirect a www website to its non-www counterpart, or vice versa? Hey, me too! đ
I recently re-launched the website for dictate.life and in the midst of planning the deployment I realized that there were a couple of simple requirements that I hadnât been fully aware of at first:
- I want people to be able to access the site via https://www.dictate.life or https://dictate.life (or even http://dictate.life, for that matter!)
- While youâre browsing the website, I want the address bar to always show that youâre on the www. version of the site.
Iâm familiar with performing this sort of task using a 301 redirect in a traditional Apache or Nginx environment, but I was unfamiliar with how to do this in a Kubernetes environment. Hereâs how I ended up accomplishing it:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: my-nginx-ingress
annotations:
...other annotations...
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($host = 'myhost.com') {
return 301 https://www.myhost.com$request_uri;
}
The neat thing about this redirect is that it not only redirects requests to the root path, /, but also to any other path. So if someone visits http://dictate.life/about, theyâll be taken to the correct HTTPS-enabled, www-toting version of the url đ
This isnât the only way to use the configuration-snippet option of Kubernetesâ nginx ingress. Iâve found that the above snippet best suits my needs, but letâs say that regardless of the URL input by the user, you always wanted to redirect them to the root. This would be a useful situation if you were moving to a new website where the URLs didnât match. In that case, youâd simply leave off the $request_uri portion, e.g.
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($host = 'myhost.com') {
return 301 https://www.myhost.com;
}
This is the best way Iâve found to apply configuration changes to one ingress, assuming that you have only one. Nginx ingress also supports altering the default configuration of multiple ingresses at once, using ConfigMaps. More info on that can be found here: https://kubernetes.github.io/ingress-nginx/examples/customization/custom-headers/
Want to learn more? Here's a shameless plug: come watch me code or ask me a question on my Twitch stream! https://www.twitch.tv/malgasm/
original article: https://malgasm.com/blog/32/write-redirects-in-kubernetes-nginx-ingress-how-to
Top comments (0)