تثبيت SSL في Nginx وإعادة التوجيه 301 من HTTP إلى HTTPS
Nginx هو أحد أكثر خوادم الويب اختيارًا في العالم بفضل أدائه واستهلاكه المنخفض للذاكرة. في هذا الدليل، سنوضّح كيفية تعريف شهادة SSL مجانية في Nginx، وكيفية إعادة توجيه كل حركة مرور HTTP إلى HTTPS الآمن، مع مثال كامل لكتلة server.
الملفات المطلوبة
يتوقّع Nginx الشهادة والسلسلة الوسيطة في ملف موحّد واحد. لهذا الغرض، يُعدّ fullchain.pem مثاليًا؛ فهو يضم شهادتك وسلسلة CA معًا. كما يلزم المفتاح الخاص private.key.
fullchain.pem← الشهادة + السلسلة الوسيطة (ssl_certificate)private.key← المفتاح الخاص (ssl_certificate_key)
إذا لم تكن تملك هذين الملفين، تحقّق من اسم نطاقك عبر معالج SSL المجاني لدينا واحصل على ملفي fullchain.pem وprivate.key من حزمة ZIP المنزّلة.
الخطوة 1 — ارفع الملفات إلى الخادم
انسخ الملفات إلى مجلد آمن وشدّد الأذونات. من المهم جدًا أن يكون المفتاح الخاص قابلاً للقراءة من قبل root فقط:
sudo mkdir -p /etc/nginx/ssl/alanadiniz.com
sudo cp fullchain.pem /etc/nginx/ssl/alanadiniz.com/
sudo cp private.key /etc/nginx/ssl/alanadiniz.com/
sudo chmod 600 /etc/nginx/ssl/alanadiniz.com/private.key
الخطوة 2 — اضبط كتلة server
افتح ملف إعداد موقعك (مثل /etc/nginx/sites-available/alanadiniz.com). يحتوي المثال التالي على كتلتي server: إحداهما تعيد توجيه HTTP إلى HTTPS، والأخرى تقدّم TLS بإعدادات آمنة:
# 1) نقل كل طلبات HTTP بشكل دائم إلى HTTPS
server {
listen 80;
listen [::]:80;
server_name alanadiniz.com www.alanadiniz.com;
return 301 https://$host$request_uri;
}
# 2) خادم HTTPS
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name alanadiniz.com www.alanadiniz.com;
ssl_certificate /etc/nginx/ssl/alanadiniz.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/alanadiniz.com/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
root /var/www/alanadiniz.com;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
الخطوة 3 — اختبر الإعداد وأعد تحميله
لالتقاط أخطاء بناء الجملة، احرص دائمًا على الاختبار قبل إعادة تشغيل Nginx:
sudo nginx -t
إذا أظهر الناتج syntax is ok وtest is successful، فأعد تحميل الخدمة بسلاسة (دون انقطاع):
sudo systemctl reload nginx
الخطوة 4 — التحقق
يمكنك التحقق من عمل إعادة التوجيه والشهادة من سطر الأوامر:
# لرؤية ترويسة إعادة التوجيه 301
curl -I http://alanadiniz.com
# للتحقق من تقديم سلسلة الشهادة كاملة
echo | openssl s_client -connect alanadiniz.com:443 -servername alanadiniz.com
في الأمر الأول يجب أن ترى HTTP/1.1 301 Moved Permanently وLocation: https://.... وفي الأمر الثاني، تأكد من أن السلسلة مدرجة كاملة من الشهادة وحتى السلسلة الوسيطة.
الأخطاء الشائعة
- SSL_ERROR_BAD_CERT_DOMAIN: اسم النطاق في
server_nameلا يطابق اسم النطاق في الشهادة. إذا كانwwwمشمولاً، فاكتب الاسمين معًا. - السلسلة الوسيطة المفقودة: لا تستخدم
certificate.crtوحده لـssl_certificate؛ استخدمfullchain.pem. - خطأ في الأذونات: إذا تعذّر على Nginx قراءة المفتاح الخاص، فتحقّق من إعدادات
chmod 600والملكية.
الخلاصة
يقتصر SSL في Nginx على تعريف ssl_certificate وssl_certificate_key، وعلى أن تعيد كتلة منفصلة توجيه كل حركة مرور HTTP إلى HTTPS عبر 301. إذا لم تكن لديك شهادة، فاحصل على شهادتك الصالحة لمدة 90 يومًا عبر معالج SSL المجاني لدينا، واستخرج ملفي fullchain.pem وprivate.key من حزمة ZIP، وكيّف الكتلة أعلاه.