traefik尝鲜
简介
之前都是用Nginx来做反代,最近发现了新的玩具traefik
,来玩一下,看看对比NPM有什么优劣。
安装
这里就用Docker来安装
version: '3'
services:
reverse-proxy:
# The official v2 Traefik docker image
image: traefik:v2.9
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "85:80"
# The Web UI (enabled by --api.insecure=true)
- "8085:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
然后docker compose up -d
,起容器
UFW开对应的端口就OK了。
webUI
自带UI,还是很方便的
配置
Traefik 提供了多种配置方式,可以直接在容器的label中添加,也可以使用传统的配置文件的形式,更是提供了一大堆称为Providers
的插件来做到动态更改配置。
比如:
labels:
- "traefik.enable=true"
- "traefik.http.routers.unityacc.rule=Host(`acc.home.kuanmi.top`)"
- "traefik.http.routers.unityacc.entrypoints=web"
如果要在配置文件中调用docker的服务,要使用@符号,如:
http:
routers:
testRouters:
rule: "Host(`test.home.kuanmi.top`)"
service: whoami-traefik@docker
https
证书方面也提供了Let’s Encrypt来自动生成和更新,由于这里无法访问80和443端口,就使用DNS的方式来自动生成。
certificatesResolvers:
myresolver:
acme:
email: ma_zhengke@outlook.com
storage: /etc/traefik/acme.json
dnsChallenge:
provider: alidns
delayBeforeCheck: 0
http:
routers:
testRouters:
rule: "Host(`test.home.kuanmi.top`)"
service: whoami-traefik@docker
tls:
certresolver: myresolver
如果是要通配符的话:
http:
routers:
unityacc:
rule: "Host(`unity.home.kuanmi.top`)"
entryPoints:
- "web-secure"
service: unityAcc-unityacc@docker
tls:
certresolver: myresolver
domains:
- main: "home.kuanmi.top"
sans:
- "*.home.kuanmi.top"
总结
和Nginx对比的话,但就我能使用到的功能,二者相差不大,更多的功能还没有体验到,不敢妄下结论说二者的优劣。
唯一觉得有意思的一点是Traefik可以接入docker,使用label做到服务的发现(虽然还是要配置),方便不少。
但用NPM,同时给各个容器配置别名,其实也大差不差。
再加上一些nginx常用的便捷的如return 444等还不知道该怎么在Traefik中实现,目前还是沿用Nginx的配置不要变动了。
traefik尝鲜
https://www.kuanmi.top/2023/01/27/traefik/