عندك سيرفر لينكس في مرام هوست ودومين، وتريد أن يفتح موقعك على https:// بقفل أخضر؟ يجمع هذا الدليل الشامل تثبيت Nginx وشهادة SSL مجانية في مسار واحد: ننصّب Nginx، ونربط الدومين بالسيرفر، ثم نحصل على شهادة SSL مجانية من Let’s Encrypt تتجدد وحدها. إعداد Nginx وشهادة SSL مجانية أبسط مما تظنّ؛ نفّذنا الخطوات كلها على سيرفر حقيقي وحصلنا على شهادة فعلية، وهذه المخرجات كما ظهرت.

⚡ الإجابة المختصرة

وجّه سجل A للدومين إلى عنوان سيرفرك، ثم: sudo apt install -y nginx، وأنشئ ملف الموقع في /etc/nginx/sites-available/ مع server_name دومينك، وفعّله وsudo nginx -t && sudo systemctl reload nginx، وأخيرًا sudo apt install -y certbot python3-certbot-nginx && sudo certbot --nginx -d دومينك --redirect.

لماذا تحتاج Nginx وشهادة SSL مجانية؟

قبل الخطوات، لماذا هذا المسار تحديدًا؟ لأن Nginx وشهادة SSL مجانية يمنحانك موقعًا سريعًا وآمنًا بلا تكلفة:

  • HTTPS ضروري اليوم: المتصفحات تحذّر من المواقع بلا شهادة، وجوجل يفضّل HTTPS في ترتيب النتائج.
  • مجاني بالكامل: شهادات Let’s Encrypt مجانية وتتجدد تلقائيًا كل 90 يومًا بلا تدخّل.
  • Nginx سريع وخفيف: يخدم آلاف الطلبات بموارد قليلة، ويعمل وسيطًا (reverse proxy) أمام تطبيقاتك.
  • ثقة الزائر: القفل الأخضر يرفع مصداقية متجرك أو خدمتك ويحمي بيانات المستخدمين.

باختصار، إعداد Nginx وشهادة SSL مجانية خطوة أساسية لأي موقع احترافي. وللتوثيق الرسمي راجع توثيق Nginx وLet’s Encrypt.

قبل أن تبدأ

  • المنفذان 80 و443 مفتوحان في جدار لوحة مرام وفي ufw — وهما مفتوحان افتراضيًا في قوالب مرام. إن غيّرت شيئًا راجع دليل جدار الحماية.
  • لا يستعمل برنامج آخر المنفذين (مثل Apache أو حاوية Docker). افحص بـsudo ss -tlnp | grep -E ":80 |:443 ". في سيرفرنا كانت حاوية Caddy تستعملهما فأوقفناها أولًا.
  • دومين تملكه (من مرام أو أي مسجّل). في الأمثلة نستعمل 203-0-113-10.sslip.io — ضع دومينك مكانه.

الخطوة 1: اربط الدومين بالسيرفر (سجل A)

من لوحة الدومين (في مرام: النطاقات ← إدارة DNS، أو لوحة Cloudflare إن كنت تستعملها) أضف سجلين:

النوعالاسمالقيمة
A@ (الدومين نفسه)عنوان IP سيرفرك
Awwwعنوان IP سيرفرك

ثم تأكد أن الدومين يشير إلى سيرفرك (قد يستغرق الانتشار من دقائق إلى ساعات) — من أي جهاز:

nslookup 203-0-113-10.sslip.io 1.1.1.1
# Name:    203-0-113-10.sslip.io
# Address: 203.0.113.10          ← يجب أن يظهر عنوان سيرفرك

إن كنت تستعمل Cloudflare: اجعل السحابة رمادية (DNS only) أثناء إصدار الشهادة، ثم فعّلها بعد ذلك مع وضع SSL Full (strict).

الخطوة 2: ثبّت Nginx

تثبيت Nginx والتأكد أنه يعمل ويستمع على المنفذ 80
مخرجات حقيقية

الخطوة 3: ملفات موقعك وملف الإعداد

ضع ملفات موقعك في مجلد مثل /var/www/shop (بـscp أو WinSCP)، ثم أنشئ ملف إعداد للموقع وفعّله وافحصه:

sudo mkdir -p /var/www/shop
sudo chown -R www-data:www-data /var/www/shop
sudo nano /etc/nginx/sites-available/shop       # الصق الإعداد أدناه
ملف server block في Nginx وفحصه بأمر nginx -t
مخرجات حقيقية

واحذف الموقع الافتراضي حتى لا تظهر صفحة «Welcome to nginx» بدل موقعك: sudo rm /etc/nginx/sites-enabled/default && sudo systemctl reload nginx. واجهنا هذا فعلًا: قبل حذفه ظهرت الصفحة الافتراضية في أحد الاختبارات.

الخطوة 4: شهادة SSL مجانية بأمر واحد

أداة certbot تطلب الشهادة من Let’s Encrypt، وتعدّل ملف Nginx بنفسها، وتضيف التحويل من HTTP إلى HTTPS (--redirect):

نتيجة إعداد Nginx وشهادة SSL مجانية: نجاح certbot وتفعيل HTTPS
مخرجات حقيقية: شهادة صادرة فعلًا

لعدة دومينات أضف كل واحد بـ-d: sudo certbot --nginx -d example.com -d www.example.com --redirect. وفي أول تشغيل يسألك عن بريد للتنبيهات والموافقة على الشروط.

الخطوة 5: تأكد من HTTPS والتجديد التلقائي

بعد إتمام إعداد Nginx وشهادة SSL مجانية، تبقّى التأكّد من الاستمرارية: الشهادة صالحة 90 يومًا، وcertbot يضيف مؤقتًا يجددها قبل انتهائها. تأكد من ذلك مرة واحدة، ثم افتح الموقع من جهازك:

مؤقت certbot وتجربة التجديد وفحص HTTPS من الخارج
مخرجات حقيقية
صفحة الموقع التجريبي تعمل على HTTPS بعد إصدار الشهادة
لقطة حقيقية للصفحة

مشاكل شائعة

المشكلةالحل
certbot: Timeout during connect أو unauthorizedالدومين لا يشير إلى السيرفر بعد، أو المنفذ 80 مغلق في جدار اللوحة أو ufw، أو Cloudflare مفعّل (برتقالي).
nginx: [emerg] bind() to 0.0.0.0:80 failedبرنامج آخر يستعمل المنفذ (Apache أو Docker). اعرفه بـsudo ss -tlnp | grep :80 وأوقفه.
تظهر «Welcome to nginx»احذف sites-enabled/default وتأكد من server_name.
403 Forbiddenلا يوجد index.html أو صلاحيات المجلد: sudo chown -R www-data:www-data /var/www/shop.
Too many certificates already issuedحدود Let’s Encrypt الأسبوعية: لا تكرر الطلب كثيرًا أثناء التجارب، واستعمل --dry-run.

إضافة: Nginx أمام تطبيق (n8n أو Node أو Uptime Kuma)

نفس مبدأ Nginx وشهادة SSL مجانية ينطبق هنا: إن كان تطبيقك يعمل على منفذ داخلي (مثل 3001)، اجعل Nginx يمرر الطلبات إليه بدل فتح المنفذ للعالم، ثم أصدر الشهادة كما في الخطوة 4:

server {
    listen 80;
    server_name status.example.com;
    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;        # لدعم WebSocket
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

نصائح الأمان والأداء

بعد تشغيل Nginx وشهادة SSL مجانية، حسّن الأمان والأداء بهذه الإضافات:

  • فعّل HTTP/2: أضف http2 إلى سطر listen 443 لتسريع تحميل الصفحات على HTTPS.
  • ترويسات أمان: أضف Strict-Transport-Security (HSTS) وX-Content-Type-Options لتقوية الحماية.
  • ضغط gzip أو brotli: يقلّل حجم الصفحات ويسرّع التصفّح كثيرًا.
  • أخفِ إصدار Nginx: server_tokens off; يقلّل المعلومات المتاحة للمهاجم.
  • راقب التجديد: تأكد أن مؤقت certbot يعمل بـsystemctl list-timers | grep certbot.

ولاختبار قوة إعداد SSL استعمل أدوات مثل SSL Labs، واضبط الإعدادات حسب مولّد إعدادات SSL من Mozilla.

أسئلة شائعة عن Nginx وشهادة SSL مجانية

كيف أحصل على شهادة SSL مجانية لـNginx؟

ثبّت certbot python3-certbot-nginx ثم شغّل sudo certbot --nginx -d دومينك --redirect. الشهادة من Let’s Encrypt مجانية بالكامل، وcertbot يعدّل إعداد Nginx ويضيف تحويل HTTPS تلقائيًا.

هل شهادة Let’s Encrypt المجانية آمنة مثل المدفوعة؟

نعم؛ تستعمل تشفير TLS نفسه وموثوقة في كل المتصفحات. الفرق الوحيد أن صلاحيتها 90 يومًا مع تجديد تلقائي بدل سنة، ولا تقدّم شهادات EToV الموسّعة.

هل تتجدد الشهادة تلقائيًا؟

نعم؛ certbot يضيف مؤقتًا يجدّد الشهادة قبل انتهائها. تأكّد مرة واحدة بـsudo certbot renew --dry-run وsystemctl list-timers | grep certbot.

لماذا يفشل certbot بخطأ Timeout أو unauthorized؟

غالبًا لأن الدومين لا يشير إلى السيرفر بعد (انتشار DNS)، أو المنفذ 80 مغلق في جدار اللوحة أو ufw، أو Cloudflare مفعّل (برتقالي) أثناء الإصدار — اجعله رماديًا مؤقتًا.

Nginx أم Apache للـSSL المجاني؟

كلاهما يدعم Let’s Encrypt، لكن Nginx أخفّ وأسرع وأسهل كـreverse proxy أمام التطبيقات. هذا الدليل يستعمل Nginx وشهادة SSL مجانية معًا.

كيف أضيف الشهادة لعدة دومينات؟

كرّر -d لكل دومين في الأمر نفسه: sudo certbot --nginx -d example.com -d www.example.com --redirect.