我在我的 VPS 中使用
Traefik
将流量路由到我的网站,经过几个小时的摆弄,我终于设法使用 Le's Encrypt 让它与 https
一起工作。
现在,我需要做的一件事是也能够通过普通的
http
访问我的网站,因为这是旧版浏览器的一个爱好项目,我添加 tls
的唯一原因是因为 Firefox 不喜欢我的网站没有它。
问题是,使用我当前的配置,我可以正常通过
https
访问我的网站,但是当我使用普通 http
尝试时,我收到 404
错误。
这是我在
docker-compose
上的配置:
version: "3"
services:
traefik:
image: "traefik:v2.5"
container_name: "traefik"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.teeresolver.acme.tlschallenge=true"
- "[email protected]"
- "--certificatesresolvers.teeresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "443:443"
- "80:80"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- mywebsite
# [...]
mywebsite:
image: my-web-site/site
build:
context: ~/mywebsite-runner/_work/my-web-site-php/my-web-site-php
dockerfile: Dockerfile
volumes:
- ./tee-downloads:/var/www/build/downloads
- ./tee-contents:/var/www/build/contents
ports:
- "0.0.0.0:8001:80"
labels:
- "traefik.enable=true"
- "traefik.http.routers.themywebsite.rule=Host(`mywebsite.com`, `www.mywebsite.com`)"
- "traefik.http.routers.themywebsite.entrypoints=websecure,web"
- "traefik.http.routers.themywebsite.tls.certresolver=teeresolver"
networks:
- mywebsite
networks:
mywebsite:
我一直在寻找解决方案几个小时,但我在谷歌上唯一能找到的就是将
http
重定向到 https
的配置,但我做不到。
有人知道该怎么做吗?
提前感谢您的帮助。
在 traefik 中,每个
router
定义了一组根据规则和入口点应用的策略。
如果你想要 2 个策略,一个用于 http,一个用于 https,则需要定义 2 个 traefik
routers
:
mywebsite:
...
labels:
- "traefik.enable=true"
- "traefik.http.routers.themywebsite.entrypoints=websecure"
- "traefik.http.routers.themywebsite.tls.certresolver=teeresolver"
- "traefik.http.routers.themywebsite.rule=Host(`mywebsite.com`, `www.mywebsite.com`)"
- "traefik.http.routers.httpwebsite.entrypoints=web"
- "traefik.http.routers.httpwebsite.rule=Host(`mywebsite.com`, `www.mywebsite.com`)"
themywebsite
httpwebsite
因此,您不会对
httpwebsite
路由器使用 certresolver。
也许这是在 Traefik 的未来版本中添加的,但从版本 3.0.0 开始,您可以在单个配置中定义多个入口点,用逗号分隔它们,就像在初始配置中一样:
traefik.http.routers.themywebsite.entrypoints=websecure,web