Unraid 篇九:traefik反向代理最强教程

2022-08-08 16:30:58 15点赞 149收藏 9评论

traefik官方见文档参考: https://doc.traefik.io/traefik/

前言

本篇分公网IP方案有公网IP方案

  • 无公网IP方案: 采用cloudflare白嫖无限永久的隧道 , 注意追求速度的自行购买收费FRP或者选择有公网IP的宽带运营商 , cloudflare的隧道不可用于jellyfin/emby/plex等需要较大流量和网速的应用

  • 有公网IP方案: 直接跳过下面的大标题 '1. 先从CF官网设置API令牌'

本篇不适合没有任何基础的人,容易出现看不懂瞎配置的情况

如果只需求反代的效果,NPM即可,傻瓜无脑可视化

如果已经用上swag,npm等nginx方式的反代,其实也没大必要再折腾弄traefik

有需求就搞,没需求也不要创造需求

本事不行又要搞的就自己恶补知识,不要在评论里怪我讲的不够通俗易懂像那些保姆教程只教配置,不教原理.

看教程不要看的杂,学会认准一个对的人的教程看他的系列,小白混着看搞不清原理的情况下容易出错

一百个人配置traefik可以有一百种方式

准备工作

1. 先从CF官网设置API令牌

traefik反向代理最强教程

1.1 配置安装cloudflared

为了缩短篇幅以及避免歧义,去看我发布的另一篇文章 cloudflared安装配置教程

2. 创建 acme.json 并修改权限 (600权限,重要坑点)

mkdir -p /mnt/user/appdata/traefik
touch /mnt/user/appdata/traefik/acme.json; chmod 600 /mnt/user/appdata/traefik/acme.json

3. 安装traefik

安装完成后先关闭,后面还要配置 .yml 相关文件

traefik反向代理最强教程

traefik反向代理最强教程

  • 喜欢一直保持docker最新版本状态的,存储库就不要加后面的 :版本号

  • traefik仪表盘官方文档 https://doc.traefik.io/traefik/operations/dashboard/

  • 如要需要安全方法-则选择安装 dockersocket

  • 有公网IP的忽略删除 'Cloudflare API Token' 这一条,看下面的3.1

意义: 只读访问其他容器,无法启动其他容器或者通过 docker API 运行任何命令
dockersocket默认安装即可
转到traefik配置界面,添加一个变量(如果启用了dockersocket,需要把traefik.yml文件中的 endpoint: "tcp://dockersocket:2375" 启用)

DOCKER_HOST
dockersocket

traefik反向代理最强教程

添加此变量后记得删除 /var/run/docker.sock 这条.

traefik反向代理最强教程

3.1 设置traefik的域名DNS解析的API (选择CF方案不需要配置此条)

以DNSPOD为例,其他DNS商的方式自行查看官方文档

3.1.1 DNSPOD官网创建一条API秘钥

traefik反向代理最强教程

3.1.2 增加一个变量

DNSPOD_API_KEY

ID,Token

traefik反向代理最强教程

  • ID,Token 条目中间用英文逗号隔开, 自己的TOKEN自行去dnspod网站创建

3.1.3 修改traefik.yml 内 certificatesResolvers 下的相关字段 (traefik.yml 文件看下文)

范例:

# 使用letsencrypt生成SSL Serficiates

certificatesResolvers:

letsencrypt:

acme:

email: 123456@qq.com

storage: /etc/traefik/acme.json

dnsChallenge:

provider: dnspod

delayBeforeCheck: 30

# 用于确保DNS挑战传播到权利DNS服务器

# resolvers:

# - "1.1.1.1:53"

# - "1.0.0.1:53"

############# pilot #############

4.安装完后,关闭traefik,配置yml

yml文件路径 : 保存在上文中的docker配置文件里的 Config Folder 下, 下面不再重复赘述

4.1 静态文件 traefik.yml

修改保存后,需要手动重启traefik才能生效

traefik反向代理最强教程

traefik反向代理最强教程

如果启用了dockersocket,需要把 endpoint: "tcp://dockersocket:2375" 启用

以下是traefik.yml文件范例

(替换domain.com为自己的域名,如果是使用DNSPOD等解析的,需要修改certificatesResolvers后面的内容)

global:

checkNewVersion: true

sendAnonymousUsage: false

serversTransport:

insecureSkipVerify: true

# 启用Traefik UI

api:

dashboard: true

insecure: true

entryPoints:

# 不在应用中使用,而是重定向从HTTP到HTTPS

http:

address: :80

# forwardedHeaders:

# trustedIPs: &trustedIps

# # Start of Clouflare public IP list for HTTP requests, remove this if you don't use it

# - 173.245.48.0/20

# - 103.21.244.0/22

# - 103.22.200.0/22

# - 103.31.4.0/22

# - 141.101.64.0/18

# - 108.162.192.0/18

# - 190.93.240.0/20

# - 188.114.96.0/20

# - 197.234.240.0/22

# - 198.41.128.0/17

# - 162.158.0.0/15

# - 104.16.0.0/12

# - 172.64.0.0/13

# - 131.0.72.0/22

# - 2400:cb00::/32

# - 2606:4700::/32

# - 2803:f800::/32

# - 2405:b500::/32

# - 2405:8100::/32

# - 2a06:98c0::/29

# - 2c0f:f248::/32

# # End of Cloudlare public IP list

http:

redirections:

entryPoint:

to: https

scheme: https

# HTTPS endpoint, with domain wildcard

https:

address: :443

# forwardedHeaders:

# # CloudFlare Trusted IP的重复使用列表上面的HTTPS请求列表

# trustedIPs: *trustedIps

http:

tls:

# 生成通配符域证书

certResolver: letsencrypt

domains:

- main: domain.com

sans:

- '*.domain.com'

middlewares:

- securityHeaders@file

providers:

providersThrottleDuration: 2s

# 文件提供商,用于连接在Docker /定义中间件之外的事物

file:

filename: /etc/traefik/fileConfig.yml

watch: true

# Docker提供商用于连接Docker网络内部的所有应用程序

docker:

watch: true

network: dockernetwork # 在此处添加您的Docker网络名称

# 默认主机规则to contain name.domain.example

defaultRule: "Host(`{{ lower (trimPrefix `/` .Name )}}.domain.com`)" # 替换为您的域

swarmModeRefreshSeconds: 15s

exposedByDefault: false

endpoint: "tcp://dockersocket:2375" # 如果您使用的是dockersocket


# Log level INFO|DEBUG|ERROR
log:
level: INFO

# Use letsencrypt to generate ssl serficiates
certificatesResolvers:
letsencrypt:
acme:
email: 123456@qq.com
storage: /etc/traefik/acme.json
dnsChallenge:
provider: cloudflare
# Used to make sure the dns challenge is propagated to the rights dns servers
resolvers:
- "1.1.1.1:53"
- "1.0.0.1:53"

4.2 动态文件 fileConfig.yml

修改保存动态文件后,traefik会自动重启启用相关配置

traefik反向代理最强教程

traefik反向代理最强教程

以下是fileConfig.yml文件范例

http:

## 外部路由 - 仅在您想手动代理某些东西时使用 ##

########### ROUTERS ###########

routers:

# qbittorrent

# qbittorrent:

# entryPoints:

# https

# rule: 'Host(`qb.domain.com`)' ## 缩略域名

# service: qbittorrent

# middlewares:

# - "auth"

########### SERVICES ###########

services:

# qbittorrent

# qbittorrent:

# loadBalancer:

# servers:

# - url: http://qbittorrent:8080/

## 中间件 ##

middlewares:

# 仅允许本地网络

local-ipwhitelist:

ipWhiteList:

sourceRange:

- 127.0.0.1/32 # Localhost

- 10.0.0.0/24 # LAN Subnet

#这是动态配置log4Shell插件

# my-plugin-log4shell:

# plugin:

# plugin-log4shell:

# errorCode: "200"

# Authelia Guard

# auth:

# forwardauth:

# address: http://authelia:9091/api/verify?rd=https://login.domain.com:55555/ # 用您的authelia容器设置的host名称替换后面这个外网地址

# trustForwardHeader: true

# authResponseHeaders:

# - Remote-User

# - Remote-Groups

# - Remote-Name

# - Remote-Email

# # Authelia basic auth guard

# auth-basic:

# forwardauth:

# address: http://authelia:9091/api/verify?authelia=basic # replace auth with your authelia container name

# trustForwardHeader: true

# authResponseHeaders:

# - Remote-User

# - Remote-Groups

# - Remote-Name

# - Remote-Email

# Security headers

securityHeaders:

headers:

#customFrameOptionsValue: SAMEORIGIN

customResponseHeaders:

X-Robots-Tag: "none,noarchive,nosnippet,notranslate,noimageindex"

server: ""

X-Forwarded-Proto: "https"

sslProxyHeaders:

X-Forwarded-Proto: https

referrerPolicy: "strict-origin-when-cross-origin"

hostsProxyHeaders:

- "X-Forwarded-Host"

customRequestHeaders:

X-Forwarded-Proto: "https"

contentTypeNosniff: true

browserXssFilter: true

forceSTSHeader: true

stsIncludeSubdomains: true

stsSeconds: 63072000

stsPreload: true

# Only use secure ciphers - https://ssl-config.mozilla.org/#server=traefik&version=2.6.0&config=intermediate&guideline=5.6

tls:

options:

default:

minVersion: VersionTLS12

cipherSuites:

- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305

- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305

pilot:

# token: "ebf37a9b-e608-4413-88c7-54b76e9e32a9"

# - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305

5.开始配置要反代的程序 (尽量以标签方式为主,虽然手动添加标签会比配置动态文件麻烦点,但是在动态文件里配置,会多一层转发,自己取舍)

(我预判了你的预判,喜欢杠,说动态文件里直接配置的人评论里自觉退散,不支持任何反驳)

5.1 打开要反代的程序的配置页面,添加标签

+启用traefik

traefik.enable

true

traefik反向代理最强教程

traefik反向代理最强教程

5.2 只允许通过HTTPS来代理 (替换app为对应docker名称)

traefik.http.routers.app.entryPoints

https

traefik反向代理最强教程

6. 拓展

6.1 代理多个暴露端口的程序

如qbittorrent , 会有多个端口需要暴露,我们要添加一个标签让traefik知道哪个是WEBUI端口

traefik.http.services.app.loadbalancer.server.port

8080

traefik反向代理最强教程

traefik反向代理最强教程

6.2 使用HTTPS的程序

一般情况下,内网都是HTTP方式连接后端,有些个别程序需要HTTPS,就需要告诉traefik,添加一个标签(替换对应 app 为docker名称)

traefik.http.services.app.loadbalancer.server.scheme

https

traefik反向代理最强教程

  • 某些情况下,改为HTTPS后,还得手动指定HTTPS端口,参照上面一条 "代理多个暴露端口的程序"

6.3 手动选择代理域名

添加一条标签 (替换 app 为指定域)

traefik.http.routers.app.rule

Host(`app.YOURDOMAIN.COM`)

6.4 启用authelia

6.4.1 authelia的配置界面添加一个标签

traefik.http.routers.authelia.entryPoints = https
https

  • 为了避免authelia重定向到循环中, 需要添加一条规则到Authelia的 configuration.yml 文件

## bypass rule
- domain:
- "auth.domain.com"
policy: bypass

6.4.2 在要反代的程序配置界面添加一个标签 (替换 app 为docker名称)

traefik.http.routers.app.middlewares

auth@file

traefik反向代理最强教程

traefik反向代理最强教程

6.5 启用organizr服务器的身份验证

我们可以像authelia一样,利用organizr作为身份验证服务器 ,这种方法更简单,功能也相对较少

6.5.1 organizr要添加对应2条标签

traefik.enable = true

true

traefik反向代理最强教程

traefik反向代理最强教程

traefik.http.routers.organizr.entryPoints = https
https

traefik反向代理最强教程

traefik反向代理最强教程

6.5.2 在对应程序启用organizer

要启用organizer的程序配置中,添加标签 ( 替换 app 为对应的docker名称 )

traefik.http.routers.app.middleware

sauth@file

6.5.3 将organizr添加到 fileConfig.yml 动态文件

注意 : " {organizr} " 是docker名称

middlewares:

# Organizr server authentication

auth:

forwardAuth:

address: "http://{organizr}/api/v2/auth/1"

6.5.4 organizr设置界面中,启用重定向

打开organizr的WEBUI界面, setting-basic-security 启用此功能

traefik反向代理最强教程

traefik反向代理最强教程

完结撒花

看不懂你可以选择去看人家的收费教程,我没花过钱,也不会去花这个钱去做这种外网一翻到处都能找到的知识付费,仁者见仁智者见智.

自以为本篇万字教程内容都是个人整理的精华,应该比国内全网能找到的大部分traefik教程更加详细

本人没有任何写文盈利目的,不需要打赏推广

发这篇也主要是分享一下给群友,有问题自己下面评论区进行讨论

展开 收起

微软 (Microsoft) Office 365 家庭版/个人版 激活密钥 1年订阅 正版办公软件 店铺至尊指导服务+M365家庭版加强版-15个月

微软 (Microsoft) Office 365 家庭版/个人版 激活密钥 1年订阅 正版办公软件 店铺至尊指导服务+M365家庭版加强版-15个月

暂无报价

Micropoint 东方微点 网络版 杀毒软件

Micropoint 东方微点 网络版 杀毒软件

20000元起

Microsoft 微软 OFFICE 365 家庭版 会员

Microsoft 微软 OFFICE 365 家庭版 会员

239元起

阳光心健3D心理电子沙盘系统电子心理沙盘管理软件3D沙具茶几外形设备

阳光心健3D心理电子沙盘系统电子心理沙盘管理软件3D沙具茶几外形设备

75600元起

《国家地理 每日精选》iOS数字版软件

《国家地理 每日精选》iOS数字版软件

暂无报价

《Picsew》iOS数字版软件

《Picsew》iOS数字版软件

暂无报价

Microsoft 微软 Office 365 个人版

Microsoft 微软 Office 365 个人版

229元起

WPS 金山软件 会员季卡

WPS 金山软件 会员季卡

22元起

Microsoft 微软 Office 2019 家庭学生版 密钥

Microsoft 微软 Office 2019 家庭学生版 密钥

169元起

WPS 金山软件 WPS 超级会员 3年卡

WPS 金山软件 WPS 超级会员 3年卡

399元起

《kirakira+》 iOS软件

《kirakira+》 iOS软件

暂无报价

《DARK SOULS III》(黑暗之魂3 )PC数字版游戏

《DARK SOULS III》(黑暗之魂3 )PC数字版游戏

暂无报价

《扫描全能王付费版》iOS数字版软件

《扫描全能王付费版》iOS数字版软件

暂无报价

WPS 金山软件会员 2年卡

WPS 金山软件会员 2年卡

149元起

《拍照取字 专业版》iOS数字版软件

《拍照取字 专业版》iOS数字版软件

暂无报价

Microsoft 微软 OFFICE 365 个人版 办公软件

Microsoft 微软 OFFICE 365 个人版 办公软件

249元起
9评论

发表评论请 登录
  • 最新
  • 最热
评论举报

请选择举报理由

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
149
扫一下,分享更方便,购买更轻松