هذا المقال يتطلب مستوى: مبتدئ.
Caddy: reverse proxy وHTTPS تلقائي في 3 أسطر
لو بتجدّد شهادة SSL بإيدك كل 3 شهور، وبتكتب عشرات أسطر إعداد عشان توجّه دومين على تطبيقك، Caddy بيعمل ده كله في 3 أسطر، ويجدّد الشهادة لوحده قبل ما تنتهي. اللي هتكسبه: إعداد أقصر، وقفل نهائي لثغرة "نسيت أجدّد الشهادة".
المشكلة باختصار
أي تطبيق ويب محتاج قدّامه حاجة تستقبل طلبات الإنترنت، توزّعها على الخدمات الصح، وتأمّنها بـ HTTPS. الأداة دي اسمها reverse proxy. الطريقة الشائعة: تركّب Nginx، تكتب إعداد طويل، وتركّب Certbot منفصل عشان الشهادات. الطريقة دي بتفشل في نقطة واحدة متكررة: تجديد الشهادة خطوة منفصلة، ولو اتنسيت أو وقع الـ cron، المتصفح بيرفض موقعك ويعرض تحذير أمان للزوّار.
يعني إيه reverse proxy؟ (بمثال بسيط الأول)
تخيّل كومباوند فيه 5 فيلات وبوّابة واحدة. الزائر اللي جاي مش بيدخل ويلفّ يدوّر على الفيلا بنفسه. هو بيكلّم حارس البوّابة بس، يقوله "عايز فيلا رقم 3"، والحارس هو اللي يوصّله. الحارس كمان بيتأكد إن اللي داخل آمن، وبيمنع الزحمة.
الـ reverse proxy هو حارس البوّابة ده بالظبط. علميًا: هو خادم وسيط بيستقبل طلب العميل (المتصفح)، يقرّر أي خدمة خلفية مسؤولة عنه (تطبيق Node على port 3000، أو API على port 8080)، يوجّه الطلب لها، ويرجّع الرد. وفي الطريق بيتعامل مع تشفير TLS، يعني فكّ وتركيب HTTPS بدل ما كل تطبيق يعمل ده بنفسه.
إزاي Caddy بيجيب الشهادة لوحده؟
Caddy بيستخدم بروتوكول اسمه ACME عشان يطلب شهادة مجانية من Let's Encrypt. باختصار: Caddy بيقول لـ Let's Encrypt إنه بيمتلك الدومين، وLet's Encrypt بيبعت تحدّي بسيط على port 80 للتأكد، وبعد ما يتأكد بيصدر الشهادة. وأهم نقطة: شهادات Let's Encrypt صالحة 90 يوم بس، وCaddy بيجدّدها أوتوماتيك وهي لسه فاضلها حوالي 30 يوم، من غير أي تدخل منك.
الإعداد الفعلي: ملف Caddyfile
ده ملف Caddyfile كامل يوجّه دومينين على تطبيقين، ويفعّل HTTPS تلقائيًا للاتنين:
example.com {
reverse_proxy localhost:3000
}
api.example.com {
reverse_proxy localhost:8080
}
مفيش سطر واحد عن الشهادات. بمجرد ما الدومين بيشاور على سيرفرك وport 80/443 مفتوحين، Caddy بيجيب الشهادة ويفعّلها لوحده. التثبيت على Ubuntu والتشغيل:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo apt update && sudo apt install caddy
sudo systemctl reload caddy