شب ۰۸: مسیریابها و میانافزارها در Compose¶
بخش ۰۸ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثالها مطابق منبع با Traefik Proxy v3.7 نوشته شدهاند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزمودهشده یا digest مشخصی را ثابت کنید. تمرینها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.
فهرست کامل دورهٔ ترافیک در ۳۰ شب
هدفهای یادگیری¶
- ساخت قواعد دقیق Host و Path و درک اولویت.
- ترکیب میانافزارها با ترتیب آگاهانه.
- دسترسی ایمن به داشبورد از طریق
api@internal.
تمرین عملی: میانافزارهای قابلاستفادهٔ مجدد¶
# dynamic/http.yml
http:
middlewares:
secure-headers:
headers:
contentTypeNosniff: true
frameDeny: true
referrerPolicy: no-referrer
lab-auth:
basicAuth:
usersFile: /run/secrets/dashboard_users
removeHeader: true
standard-chain:
chain:
middlewares: [secure-headers, compress]
compress:
compress: {}
api-strip:
stripPrefix: {prefixes: [/api]}
اتصال فقطخواندنی فایل اعتبارنامه و برچسبها را به Traefik اضافه کنید:
services:
traefik:
volumes:
- ./secrets/dashboard_users:/run/secrets/dashboard_users:ro
labels:
traefik.enable: "true"
traefik.http.routers.dashboard.rule: "Host(`dashboard.example.test`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
traefik.http.routers.dashboard.entrypoints: web
traefik.http.routers.dashboard.service: api@internal
traefik.http.routers.dashboard.middlewares: lab-auth@file,secure-headers@file
whoami:
labels:
traefik.http.routers.whoami.rule: "Host(`whoami.example.test`) && PathPrefix(`/app`)"
traefik.http.routers.whoami.priority: "100"
traefik.http.routers.whoami.middlewares: standard-chain@file
mkdir -p secrets
htpasswd -nbB admin 'replace-this-lab-password' > secrets/dashboard_users
chmod 600 secrets/dashboard_users
docker compose config --quiet
docker compose up -d
curl -sv --resolve whoami.example.test:80:127.0.0.1 http://whoami.example.test/app
curl -I --resolve dashboard.example.test:80:127.0.0.1 http://dashboard.example.test/dashboard/
curl -u admin:replace-this-lab-password --resolve dashboard.example.test:80:127.0.0.1 \
http://dashboard.example.test/api/overview
ترتیب میانافزارها مهم است: احراز هویت پیش از محدودسازی نرخ، رفتار عملیاتی و امنیتی متفاوتی از ترتیب عکس دارد. حذف پیشوند پیش از احراز هویت میتواند URL احراز هویت را تغییر دهد. میانافزار زنجیرهای ترتیب سیاستها را قابلبازبینی میکند.
فهرست تمرین¶
- مسیریاب عمومیتری فقط با Host اضافه کنید و اولویت خودکار مبتنی بر طول قاعده را ببینید.
- اولویتها را صریح تعیین کنید و نشان دهید کدام مسیریاب انتخاب میشود.
- خطای 404 ناشی از نبود تطابق را با 502 ناشی از تطابق مسیر و خرابی پشتصحنه مقایسه کنید.
- هدرهای امنیتی و فشردهسازی پاسخ را تأیید کنید.
- تأیید کنید دسترسی به داشبورد بدون اعتبارنامه پاسخ 401 میدهد.
- پس از تمرین، گذرواژههای متن سادهٔ آزمایشگاه را از تاریخچهٔ پوسته و یادداشتها حذف کنید.
نکتههای عیبیابی¶
- داشبورد خالی است یا 404 میدهد: قاعده باید هم
/dashboardو هم/apiرا پوشش دهد؛ اسلش پایانی/dashboard/را حفظ کنید. - میانافزار پیدا نمیشود: Docker به شیء فایل بدون
@fileارجاع داده است. - خطای پردازش Basic auth: کوتیشنگذاری هش یا فایل، یا مجوزها نادرست است.
- مسیریاب غیرمنتظره انتخاب میشود: اولویت مؤثر و قواعد همپوشان را بررسی کنید.
خودآزمایی¶
api@internalچیست؟ سرویس داخلی داشبورد و API در Traefik.- قواعد تطبیق مشابه چگونه مرتب میشوند؟ بر اساس اولویت قاعده؛ اولویت ضمنی از طول قاعده میآید، پس برای همپوشانیها آن را صریح تعیین کنید.
- چرا از زنجیرهٔ میانافزار استفاده میکنیم؟ سیاست را متمرکز و ترتیب را قابلاستفادهٔ مجدد و بازبینی میکند.
- اثبات کنید: درخواست غیرمجاز داشبورد 401، درخواست مجاز 200 و Host ناشناخته 404 میگیرد.