[英]Traefik reverse proxy service into sub folder that doesn't allow BASE URL changing
我最近进入了自我托管,我发现 tailscale 是在我所有设备上访问我想要的服务的最佳方式,但输入端口真的很烦人,我正在尝试为一些重要服务启用 SSL。 现在大多数关于反向托管的指南都说要使用子域,但我不想这样做,因此想让它们在子文件夹而不是子域中访问。 我一直在尝试设置一个反向代理来做到这一点,现在我已经尝试了 Nginx 代理管理器、Caddy 和 Traefik,我发现 Traefik 是最容易理解的菜鸟。
我正在尝试使用 traefik 来反向代理东西以取得一些成功,简单的服务,比如只有一页的服务,但对于更大的服务,它不起作用。
这是我的 traefik docker-compose.yml
version: "3"
networks:
# network created for reverse proxy such that all other
# containers are also on it can communicate with each other
revProxy-net:
name: revProxy-net
driver: bridge
services:
traefik:
image: traefik:v3.0.0-beta2
container_name: traefik
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- ./config:/etc/traefik
- ./logs:/var/log/traefik
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
- /var/run/docker.sock:/var/run/docker.sock
networks:
- revProxy-net
restart: unless-stopped
这是 traefik.yml
global:
checkNewVersion: true
sendAnonymousUsage: false # true by default
# (Optional) Log information
# ---
log:
level: ERROR # DEBUG, INFO, WARNING, ERROR, CRITICAL
format: common # common, json, logfmt
filePath: /var/log/traefik/traefik.log
# (Optional) Accesslog
# ---
accesslog:
format: common # common, json, logfmt
filePath: /var/log/traefik/access.log
# (Optional) Enable API and Dashboard
# ---
api:
dashboard: true # true by default
insecure: true # Don't do this in production!
# Entry Points configuration
# ---
entryPoints:
web:
address: :80
# (Optional) Redirect to HTTPS
# ---
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: :443
certificatesResolvers:
tailsolver:
tailscale: {}
providers:
docker:
exposedByDefault: false # Default is true
file:
# watch for dynamic configuration changes
directory: /etc/traefik
watch: true
让我们看一下简单的(它只有一个 html 和一个加载的 js 文件),它适用于此配置,可在https://lenovo-ideapad-320-15ikb.tail9ece4.ts.net/glances/上访问
version: "3"
services:
glances:
image: nicolargo/glances:latest-full
container_name: glances
restart: always
ports:
- 61208-61209:61208-61209
environment:
- GLANCES_OPT=-w
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./glances.conf:/etc/glances.conf
pid: host
networks:
- revProxy-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.glances.entrypoints=web,websecure"
- "traefik.http.routers.glances.rule=Host(`lenovo-ideapad-320-15ikb.tail9ece4.ts.net`) && PathPrefix(`/glances`)"
- "traefik.http.middlewares.strip-glances.stripprefix.prefixes=/glances"
- "traefik.http.routers.glances.middlewares=strip-glances@docker"
- "traefik.http.routers.glances.tls=true"
- "traefik.http.routers.glances.tls.certresolver=tailsolver"
- "traefik.http.routers.glances.tls.domains[0].main=lenovo-ideapad-320-15ikb.tail9ece4.ts.net"
networks:
revProxy-net:
external: true
但是当我尝试在 jellyfin 上使用同样的东西时,它会在转到https://lenovo-ideapad-320-15ikb.tail9ece4.ts.net/jellyfin/时给出Bad Gateway
,这是 jellyfin docker-compose.yml
version: "2.1"
#name: media-stack
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ_NAME}
#- JELLYFIN_PublishedServerUrl=192.168.0.25 #optional
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
volumes:
- ./jellyfin/config:/config
- /home/sagnik/Projects/yt-diff/yt-dlp/:/yt-dlp
# Removed for testing purposes
ports:
- ${JELLYFIN_PORT}:8096
- 8920:8920
- 7359:7359/udp
- 1900:1900/udp
deploy:
resources:
reservations:
devices:
- capabilities: [ gpu ]
restart: unless-stopped
labels:
- 'traefik.enable=true'
## HTTP Router
#### Entry point where Jellyfin is accessible via
#### Change secure to https in the line below to have accessible without needing to specify a port and change the SSLHost option below
- 'traefik.http.routers.jellyfin.entryPoints=web,websecure'
#### Host or Path where Jellyfin is accessible
#### Remove (or change) this rule if you'd rather have Jellyfin accessible at a PathPrefix URI
- 'traefik.http.routers.jellyfin.rule=Host(`lenovo-ideapad-320-15ikb.tail9ece4.ts.net`) && PathPrefix(`/jellyfin`)'
#### Prefix stripper
- "traefik.http.middlewares.strip-jellyfin.stripprefix.prefixes=/jellyfin"
- "traefik.http.routers.jellyfin.middlewares=strip-jellyfin@docker"
#### Using the tailscale ones
- "traefik.http.routers.jellyfin.tls=true"
- "traefik.http.routers.jellyfin.tls.certresolver=tailsolver"
- "traefik.http.routers.jellyfin.tls.domains[0].main=lenovo-ideapad-320-15ikb.tail9ece4.ts.net"
networks:
- revProxy-net
networks:
revProxy-net:
external: true
我已经尝试阅读文档,并阅读了为某些服务更改 base url 的方法,但我不明白发生了什么。
你忘了港口!
- 'traefik.http.routers.jellyfin.service=jellyfin-svc'
- 'traefik.http.services.jellyfin-svc.loadBalancer.server.port=8096'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.