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

2022-08-08 16:30:58 23点赞 230收藏 21评论

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教程更加详细

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

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

展开 收起

ihuman 洪恩 识字子集拼音思维ABC会员永久包3-6岁儿童早教启蒙礼物玩具 识字会员终身包

ihuman 洪恩 识字子集拼音思维ABC会员永久包3-6岁儿童早教启蒙礼物玩具 识字会员终身包

268元起

任天堂 Nintendo Switch《舞力全开 Just Dance》 游戏兑换卡

任天堂 Nintendo Switch《舞力全开 Just Dance》 游戏兑换卡

159元起

Microsoft 微软 OFFICE 365 家庭版 会员

Microsoft 微软 OFFICE 365 家庭版 会员

106元起

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

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

308元起

Microsoft 微软 Office 365 个人版

Microsoft 微软 Office 365 个人版

106元起

Microsoft 微软 365 家庭版 电子秘钥 正版高级Office应用 1T云存储

Microsoft 微软 365 家庭版 电子秘钥 正版高级Office应用 1T云存储

279元起

Microsoft 微软 到手18.2元/月 微软office365家庭版microsoft365增强版15个月

Microsoft 微软 到手18.2元/月 微软office365家庭版microsoft365增强版15个月

279元起

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

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

189元起

Microsoft 微软 office专业版永久激活码office2019增强版终身版outlook密钥

Microsoft 微软 office专业版永久激活码office2019增强版终身版outlook密钥

249元起

WPS超级会员Pro套餐4年卡1488天官方正版pdf转word排版

WPS超级会员Pro套餐4年卡1488天官方正版pdf转word排版

676.4元起

WPS超级会员4年套餐pdf转word排版PPT润色模板素材店铺

WPS超级会员4年套餐pdf转word排版PPT润色模板素材店铺

暂无报价

国行版 Switch体感游戏套装 《健身环大冒险》

国行版 Switch体感游戏套装 《健身环大冒险》

439元起

WPS 金山软件 会员季卡

WPS 金山软件 会员季卡

59.85元起

微软(Microsoft))win10win11专业版批量式授权企业版嵌入式正版化解决方案win11家庭版

微软(Microsoft))win10win11专业版批量式授权企业版嵌入式正版化解决方案win11家庭版

1288元起

Microsoft 微软 office365家庭版15个月 203元

Microsoft 微软 office365家庭版15个月 203元

198元起

Microsoft 微软 活动6天 office365家庭版microsoft365订阅密钥

Microsoft 微软 活动6天 office365家庭版microsoft365订阅密钥

239元起
21评论

  • 精彩
  • 最新
  • 阿里云的DNS Api怎么搞

    校验提示文案

    提交
    官方文档检索一下

    校验提示文案

    提交
    阿里云的找到了吗大哥

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • yml对复制黏贴太不友好了,大佬要是有配置截图就好了。

    校验提示文案

    提交
    啊, 我还想着文字版更加适合, 你还反倒喜欢图片?

    校验提示文案

    提交
    最好都有,不懂这个配置,做完搞了好久才把yml层级弄好,把容器跑了起来。有对照就不用到处去找正确配置格式是什么样的。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 楼主大赞,之前参照你发的SWAG的教程,现在感觉Traefik更强大呢,目前遇到一个问题:
    我通过unraid虚拟了一台群晖,直通了硬盘控制器和2.5G网卡,也做好了反向代理,目前就是Synology Drive的桌面服务端口6690反向代理没成功,通过配置动态文件的方式,无法访问,是不是要用Traefik的TCP rounter呢,楼主知道吗?

    校验提示文案

    提交
    是的,理解至上.在动态文件中手动修改添加就对了.照着我的范例里面的qb的内容改

    校验提示文案

    提交
    老哥,你的6690反代成功了吗?yml文件里怎么配置

    校验提示文案

    提交
    收起所有回复
  • lucky反代,设置更简单好用

    校验提示文案

    提交
    用过,只能说设置简单适合新手,谈不上好用

    校验提示文案

    提交
    收起所有回复
  • 也没有背景说明,搞一通不知道你要干啥

    校验提示文案

    提交
  • 来给大熊点个赞吧!!!还是沙发~哇咔咔

    校验提示文案

    提交
  • 小白福音,大佬加油!

    校验提示文案

    提交
  • 收藏加关注

    校验提示文案

    提交
  • 头一次在张大妈看技术文章

    校验提示文案

    提交
  • 提醒一下,从值得买的页面上复制下来的代码,一定要对照一下网页上格式,自己再检查一遍,已经好几位朋友来找我,发现是值得买页面的锅,复制下来,导致有些位置的缩进出问题,运行docker会报错,注意!!!注意!!!注意!!! [ok了] [ok了] [ok了]

    校验提示文案

    提交
提示信息

取消
确认
评论举报

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

相关文章推荐

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