使用不同于后端端口的前端端口
Using a frontend port that is different from the backend port
我在服务前面有一个 traefik 实例。端口 9000 上的服务 运行s。但是我希望端口 :8000 将请求代理到此服务。都运行参加了马拉松。
我尝试使用 traefik.port
标签,但是当我从 :8000/dashboard 的后端块判断时,似乎假设后端也在 8000 上 运行ning。
我也尝试了其他解决方案,例如
traefik.frontend.rule=Host:traefikhost:8000
没有成功
关于这个案例,文档确实不清楚
您需要使用traefik.port
来定义后端的端口。在您的情况下,它应该是 traefik.port=9000
.
默认情况下,Traefik 将监听端口 80
,因为您希望它监听另一个端口,您需要为 entryPoints
定义地址,例如 --entryPoints='Name:http Address::8000'
,在此示例中它将监听端口 8000
.
我用docker给你举个例子,然后你就可以和马拉松做个平行
运行 Traefik 监听端口 8000
:
docker service create \
--name traefik \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--network traefik-net \
--publish 8080:8080 \
--publish 8000:8000 \
traefik \
--entryPoints="Name:http Address::8000" \
--defaultentrypoints="http" \
--checknewversion=false \
--docker \
--docker.swarmmode \
--docker.domain=mydomain.com \
--docker.watch \
--docker.exposedbydefault=false \
--web \
--loglevel=DEBUG
后端侦听端口 9000
:
docker service create \
--name myweb \
--mount type=bind,source=$PWD/httpd.conf,target=/usr/local/apache2/conf/httpd.conf \
--label traefik.port=9000 \
--label traefik.enable=true \
--network traefik-net \
httpd
测试一下,检查 Traefik api
:
$ curl -s "http://localhost:8080/api" | jq .
{
"docker": {
"backends": {
"backend-myweb": {
"servers": {
"server-myweb-1": {
"url": "http://10.0.0.5:9000",
"weight": 0
}
},
"loadBalancer": {
"method": "wrr"
}
}
},
"frontends": {
"frontend-Host-myweb-mydomain-com": {
"entryPoints": [
"http"
],
"backend": "backend-myweb",
"routes": {
"route-frontend-Host-myweb-mydomain-com": {
"rule": "Host:myweb.mydomain.com"
}
},
"passHostHeader": true,
"priority": 0,
"basicAuth": []
}
}
}
}
现在请求您的后端服务:
$ curl -H "Host: myweb.mydomain.com" "http://localhost:8000/"
<html><body><h1>It works!</h1></body></html>
我在服务前面有一个 traefik 实例。端口 9000 上的服务 运行s。但是我希望端口 :8000 将请求代理到此服务。都运行参加了马拉松。
我尝试使用 traefik.port
标签,但是当我从 :8000/dashboard 的后端块判断时,似乎假设后端也在 8000 上 运行ning。
我也尝试了其他解决方案,例如
traefik.frontend.rule=Host:traefikhost:8000
没有成功
关于这个案例,文档确实不清楚
您需要使用traefik.port
来定义后端的端口。在您的情况下,它应该是 traefik.port=9000
.
默认情况下,Traefik 将监听端口 80
,因为您希望它监听另一个端口,您需要为 entryPoints
定义地址,例如 --entryPoints='Name:http Address::8000'
,在此示例中它将监听端口 8000
.
我用docker给你举个例子,然后你就可以和马拉松做个平行
运行 Traefik 监听端口 8000
:
docker service create \
--name traefik \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--network traefik-net \
--publish 8080:8080 \
--publish 8000:8000 \
traefik \
--entryPoints="Name:http Address::8000" \
--defaultentrypoints="http" \
--checknewversion=false \
--docker \
--docker.swarmmode \
--docker.domain=mydomain.com \
--docker.watch \
--docker.exposedbydefault=false \
--web \
--loglevel=DEBUG
后端侦听端口 9000
:
docker service create \
--name myweb \
--mount type=bind,source=$PWD/httpd.conf,target=/usr/local/apache2/conf/httpd.conf \
--label traefik.port=9000 \
--label traefik.enable=true \
--network traefik-net \
httpd
测试一下,检查 Traefik api
:
$ curl -s "http://localhost:8080/api" | jq .
{
"docker": {
"backends": {
"backend-myweb": {
"servers": {
"server-myweb-1": {
"url": "http://10.0.0.5:9000",
"weight": 0
}
},
"loadBalancer": {
"method": "wrr"
}
}
},
"frontends": {
"frontend-Host-myweb-mydomain-com": {
"entryPoints": [
"http"
],
"backend": "backend-myweb",
"routes": {
"route-frontend-Host-myweb-mydomain-com": {
"rule": "Host:myweb.mydomain.com"
}
},
"passHostHeader": true,
"priority": 0,
"basicAuth": []
}
}
}
}
现在请求您的后端服务:
$ curl -H "Host: myweb.mydomain.com" "http://localhost:8000/"
<html><body><h1>It works!</h1></body></html>