traefik实现nginx proxy

阅读: 评论:0

traefik实现nginx proxy

traefik实现nginx proxy

traefik实现nginx proxy_redirect效果

问题背景

traefik本身使用了正常的80443端口。

然后分别在webwebsecureentrypoint上创建了route

然后为www-outer(在web entrypoint上)配置了重定向至httpsmiddleware

apiVersion: aino.us/v1alpha1
kind: IngressRoute
metadata:annotations:kubernetes.io/ingress.class: ingress-traefikgeneration: 1labels:app.kubernetes.io/instance: wwwapp.kubernetes.io/managed-by: Helmapp.kubernetes.io/name: wwwapp.kubernetes.io/version: 1.0.0name: www-outernamespace: hf
spec:entryPoints:- webroutes:- kind: Rulematch: Host(`www.hftest`)middlewares:- name: redirect-to-httpsservices:- kind: Servicename: wwwnamespace: hfpassHostHeader: trueport: 8000responseForwarding:flushInterval: 1msscheme: httpstrategy: RoundRobinweight: 100

middleware文件

apiVersion: aino.us/v1alpha1
kind: Middleware
metadata:name: redirect-to-httpsnamespace: hf
spec:redirectScheme:permanent: truescheme: https

此时访问traefik正常。

但是在与其他公司联调时,由于外网无法使用标准的80443端口,因此改用了80808443端口。

也就是说外网ip8080映射到traefik80, 8443映射到443

这时外网访问就出问题了,现象就是浏览器中打不开。

问题排查

curl调试如下:

# curl -i :8080
HTTP/1.1 301 Moved Permanently
Location: /
Date: Fri, 16 Sep 2022 09:39:38 GMT
Content-Length: 17
Content-Type: text/plain; charset=utf-8Moved Permanently

可以看到,traefik返回了不带端口的https链接,而这个在外网的确是访问不到的。

nginx proxy_redirect选项

nginxproxy_redirect参数可以解决这个问题。

但是现在使用的是traefikingress控制器,没用ingress-nginx

traefik是否有类似的选项呢?

RedirectScheme中的port选项

RedirectSchememiddleware是有一个port选项的,可以定义重定向后的端口。

这个我没有试,猜想,应该是可以在重定向之后带上自己设置的端口,比如8443

但是,在内网的就没法用了。当然也可以为traefik加上80808443entrypoint来支持这种情况。

还是感觉不太优雅。

问题解决

使用RedirectRegexmiddleware

这个middleware可以支持正则来进行重定向操作,相对RedirectScheme仅能重定向scheme,相对作用更广泛。

使用两个RedirectRegexmiddleware即可解决上面的问题。

apiVersion: aino.us/v1alpha1
kind: Middleware
metadata:name: redirect-8080-to-8443
spec:redirectRegex:regex: ^:8080/(.*)replacement: :8443/${1}
---
apiVersion: aino.us/v1alpha1
kind: Middleware
metadata:name: redirect-http-to-https-by-regex
spec:redirectRegex:regex: ^/(.*)replacement: /${1}

如果觉得在ingressroute中写两个middleware麻烦,还可以使用chain将这两个整合到一起,然后写一个即可。

这样就可以解决从外网访问时,因外网使用了与traefik不同端口带来的重定向问题了。

本文发布于:2024-01-29 03:00:42,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170646844912224.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:traefik   nginx   proxy
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23