首页 > 解决方案 > Traefik Docker Swarm 基本身份验证

问题描述

我最近在启用 Docker Swarm 的集群上的 Docker 容器中设置了 Traefik v.1.7.14。作为测试,我创建了一个简单的服务:

docker service create --name demo-nginx \
--network traefik-net \
--label traefik.app.port=80 \
--label traefik.app.frontend.auth.basic="test:$$apr1$$LG8ly.Y1$$1J9m2sDXimLGaCSlO8.T20" \
--label traefik.app.frontend.rule="Host:t.myurl.com" \
nginx

正如上面的代码所述,我只是在我的 url 上,在t指定的子域上安装 nginx。

当此代码运行时,服务将成功创建。Traefik 还会在 traefik api 以及 traefik 管理员中显示该服务。

在traefik api中,后端服务报如下:

"frontend-Host-t-myurl-com-0": {
"entryPoints": [
"http",
"https"
],
"backend": "backend-demo-nginx",
"routes": {
"route-frontend-Host-t-myurl-com-0": {
"rule": "Host:t.myurl.com"
}
},
"passHostHeader": true,
"priority": 0,
"basicAuth": null,
"auth": {
"basic": {}
}

当我去访问时t.myurl.com,我得到了身份验证提示,正如预期的那样。

但是,当我输入我的用户名/密码(在本例中为 test:test)时,登录提示只会再次提示我并且不会对我进行身份验证。

我已经检查以确保我正在使用以下方法转义 docker 标签中的字符:

echo $(htpasswd -nb test test) | sed -e s/\\$/\\$\\$/g

生成密码。

作为测试的一部分,我还尝试关闭https入口点,因为我想看看这个循环是否是由 ssl 触发的。这似乎对解决这个问题没有任何影响(规则:)--label traefik.app.frontend.entryPoints=http。Traefik 确实http在这样做时做出了正确的响应,但密码验证仍然像以前一样陷入相同的提示循环。

当我删除traefik.app.frontend.auth.basic标签时,我可以通过我的 url (t.myurl.com) 访问我的网站。所以这个问题似乎在基本身份验证功能中是孤立的。

我的 DNS 提供商是 Cloudflare。

如果有人有任何想法,我将不胜感激。

标签: dockertraefik

解决方案


也许你可以试试这个:

echo $(htpasswd -nb your-user your-password);

$$因为您在命令行中不需要两个。


推荐阅读