معرفی
کدی (Caddy) یک وبسرور متنباز و پراکسی معکوس است که با زبان Go ساخته شده است. ویژگی شاخص آن، مدیریت خودکار HTTPS است: میتواند گواهیهای TLS را دریافت، نصب و تمدید کند. جزئیات رفتار HTTPS خودکار، روشهای اعتبارسنجی و شرایط آن در مستندات رسمی Automatic HTTPS آمده است.
توسعهدهندگان بکاند و مهندسان دواپس از کدی برای دریافت درخواستهای وب، ارائه فایلهای استاتیک، هدایت ترافیک به سرویسهای داخلی و اعمال HTTPS استفاده میکنند. فایل Caddyfile برای تعریف دامنه، مسیر، فایل استاتیک و پراکسی معکوس بهکار میرود؛ ساختار و دستورهای آن در مستندات رسمی Caddyfile توضیح داده شده است.
برای دریافت گواهی عمومی TLS از طریق ACME، نام دامنه باید شرایط مرجع صدور گواهی را داشته باشد و اعتبارسنجی آن با موفقیت انجام شود. در روش HTTP-01، پورت ۸۰ و در روش TLS-ALPN-01، پورت ۴۴۳ باید از بیرون در دسترس باشد. در روش DNS-01، اعتبارسنجی با ثبت رکورد TXT در DNS انجام میشود و باز بودن پورتهای وب برای این مرحله الزامی نیست، اما پیکربندی ارائهدهنده DNS و دسترسی لازم برای مدیریت رکوردها اهمیت دارد. Caddy همچنین میتواند برای نامهای داخلی از مرجع گواهی داخلی خود استفاده کند یا گواهی و کلید ارائهشده توسط مدیر سامانه را به کار بگیرد.
کدی قابلیت پراکسی معکوس و توزیع بار را ارائه میکند و میتواند در صورت پیکربندی مناسب، سلامت سرویسهای مقصد را بررسی کند. همچنین، API مدیریتی آن امکان بارگذاری و تغییر پیکربندی در حال اجرا را فراهم میکند. ثبت و بررسی لاگها نیز به عیبیابی کمک میکند، اما میزان مشاهدهپذیری موردنیاز در محیط تولید به تنظیمات و ابزارهای مکمل وابسته است. برای تنظیم پراکسی و بررسی سلامت مقصدها به مستندات reverse_proxy و برای API به مستندات API رسمی مراجعه کنید. پشتیبانی از HTTP/2 و HTTP/3 نیز در مستندات رسمی Automatic HTTPS شرح داده شده است.
چه زمانی Caddy انتخاب مناسبی است؟
Caddy برای انتشار یک یا چند دامنه، ارائه فایلهای استاتیک و قراردادن API یا سرویسهای داخلی پشت پراکسی معکوس مناسب است؛ بهویژه زمانی که پیکربندی ساده و مدیریت خودکار HTTPS اهمیت دارد. در یک استقرار ساده، میتوان درخواستهای مربوط به رابط وب و API را از یک نقطه ورود دریافت و بر اساس دامنه یا مسیر به مقصد مناسب هدایت کرد.
اگر زیرساخت شما از قبل بر پیکربندیهای پیچیده Nginx، ماژولهای وابسته یا فرایند عملیاتی تثبیتشده آن بنا شده است، بررسی Nginx معمولاً کمریسکتر است. Apache HTTP Server را زمانی بررسی کنید که سامانه به ماژولها یا پیکربندیهای موجود Apache وابسته است. Traefik برای استقرارهای کانتینری که سرویسها مرتب ایجاد و حذف میشوند و کشف پویای سرویس از Docker یا Kubernetes اهمیت دارد، گزینهای قابل بررسی است.
در همه این انتخابها، توان عملیاتی تیم مهم است: مسئول نگهداری باید DNS، پورتهای ورودی، لاگها، گواهیها و مسیرهای سرویس را بتواند عیبیابی کند. Caddy اغلب روی Linux اجرا میشود و در استقرار ابری نیز تنظیم شبکه، DNS و دسترسیهای زیرساخت بخشی از کار عملیاتی آن است.
ویژگیهای کلیدی
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
HTTPS خودکار
هنگامی که نام دامنه در پیکربندی Caddy تعریف شده و شرایط لازم برای صدور گواهی فراهم باشد، Caddy میتواند گواهی TLS را دریافت و تمدید کند. در پیکربندی معمول، درخواستهای HTTP نیز به HTTPS هدایت میشوند؛ با این حال، دریافت گواهی عمومی به تنظیم صحیح DNS، دسترسی لازم برای روش اعتبارسنجی و امکان ذخیره پایدار دادههای گواهی وابسته است.
-
پیکربندی کوتاه با Caddyfile
برای سناریوهای رایج مانند سرو فایل استاتیک یا پراکسیکردن یک API، پیکربندی معمولاً با چند دستور قابل خواندن نوشته میشود.
-
پراکسی معکوس و توزیع بار
Caddy درخواستهای ورودی را به یک یا چند سرویس مقصد هدایت میکند و امکان توزیع بار میان آنها را دارد. برای بررسی فعال سلامت مقصدها باید گزینههایی مانند health_uri را تنظیم کرد. بدون این تنظیمات، نباید فرض کرد که همه مقصدها بهصورت دورهای بررسی میشوند.
-
پیکربندی پویا با API
امکان بارگذاری یا تغییر پیکربندی در حال اجرا از طریق API مدیریتی را فراهم میکند؛ این قابلیت برای استقرارهای خودکار و سامانههای چندسرویسی مفید است.
-
پشتیبانی داخلی از HTTP/2 و HTTP/3
پروتکلهای جدید وب را پشتیبانی میکند و در صورت فراهمبودن شرایط شبکه و مرورگر، میتواند ارتباط HTTP/3 را ارائه دهد.
-
ماژولار و قابل توسعه
Caddy معماری ماژولار دارد و میتوان قابلیتهای آن را با ماژولهای اضافی گسترش داد. برخی ماژولها در نسخه استاندارد موجود نیستند و برای استفاده از آنها باید نسخه سفارشی Caddy ساخته شود. پیش از انتخاب یک افزونه، سازگاری آن با نسخه Caddy و وضعیت نگهداری پروژه را بررسی کنید.
کاربردها
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
انتشار امن وبسایت استاتیک
برای انتشار وبسایت استاتیک، نام دامنه و مسیر فایلهای خروجی را در Caddyfile مشخص کنید و با دستور caddy validate --config Caddyfile --adapter caddyfile اعتبار پیکربندی را بررسی کنید. سپس Caddy را اجرا یا پیکربندی سرویس در حال اجرا را بارگذاری مجدد کنید. در صورت تنظیم صحیح DNS و فراهم بودن شرایط صدور گواهی، Caddy میتواند HTTPS را فعال کند. در پایان، دسترسی به سایت و وضعیت گواهی را بررسی کنید.
-
قرار دادن API پشت پراکسی معکوس
برای قراردادن API پشت پراکسی معکوس، دامنه عمومی و نشانی سرویس مقصد را با دستور reverse_proxy در Caddyfile تعریف کنید. پس از بررسی پیکربندی با دستور caddy validate --config Caddyfile --adapter caddyfile، آن را اجرا یا در سرویس فعال بارگذاری مجدد کنید. سپس دسترسی به API، اتصال به مقصد و لاگهای Caddy را بررسی کنید. برای نمونه، در پیکربندی example.com میتوان درخواستها را به localhost:9000 فرستاد.
-
اجرای چند سرویس روی یک سرور
برای مسیردهی هر زیردامنه یا مسیر به سرویس متفاوت، مانند ارسال api.example.com به API و app.example.com به رابط وب.
-
پراکسی جلوی کانتینرها
برای قرار دادن یک نقطه ورود HTTPS در مقابل سرویسهای Docker و هدایت درخواستها به کانتینرهای شبکه داخلی.
-
نمونهسازی و استقرار ساده
برای تیمهای کوچک یا پروژههایی که به وبسرور قابل فهم نیاز دارند و نمیخواهند از ابتدا پیکربندی پیچیده TLS بنویسند.
ابزارهای جایگزین
ابزارهای زیر نزدیکترین جایگزینها برای کدی به شمار میروند.
پرسشهای رایج درباره کدی
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
آیا کدی جایگزین کامل Nginx است؟
Caddy و Nginx هر دو میتوانند برای ارائه وبسایت و پراکسی معکوس استفاده شوند، اما جایگزینی آنها به نیازهای پروژه بستگی دارد. Caddy با مدیریت خودکار HTTPS و پیکربندی خوانا، برای بسیاری از استقرارها گزینه مناسبی است. در مقابل، اگر زیرساخت به قابلیتها، ماژولها یا پیکربندیهای تثبیتشده Nginx وابسته باشد، بهتر است پیش از مهاجرت، سازگاری و رفتار سامانه در شرایط واقعی آزمایش شود.
برای استفاده از HTTPS خودکار در کدی چه چیزی لازم است؟
برای گواهی عمومی ACME، باید کنترل نام دامنه را داشته باشید و اعتبارسنجی مرجع صدور گواهی موفق شود. در HTTP-01 و TLS-ALPN-01 معمولاً دسترسی ورودی روی پورتهای وب لازم است؛ در DNS-01 اعتبارسنجی از طریق DNS انجام میشود. جزئیات: caddyserver.com
آیا کدی فقط برای سایتهای کوچک مناسب است؟
خیر. Caddy قابلیتهایی مانند پراکسی معکوس، توزیع بار، بررسی سلامت مقصدها و تغییر پیکربندی در زمان اجرا دارد. مناسب بودن آن برای یک سامانه بزرگ به معماری، حجم ترافیک، نیازهای عملیاتی، تنظیمات پایش و تجربه تیم بستگی دارد. برای مثال، بررسی فعال سلامت مقصدها باید در پیکربندی پراکسی فعال شود و صرف استفاده از Caddy به معنای فعال بودن همه قابلیتها نیست. مستندات پراکسی: caddyserver.com
Caddyfile چیست؟
Caddyfile قالب متنی و ساده کدی برای تعریف دامنهها، مسیرها، فایلهای استاتیک و پراکسی معکوس است. کدی علاوه بر آن، از پیکربندی JSON و API مدیریتی نیز پشتیبانی میکند. مستندات: caddyserver.com
آیا کدی با Docker کار میکند؟
بله. میتوانید کدی را در یک کانتینر اجرا کنید و آن را به سرویسهای دیگر در شبکه Docker متصل کنید. در این حالت باید پورتها، نام سرویسها، حجمهای نگهداری داده و دسترسی گواهیها را درست تنظیم کنید.