حل مشكلة خطأ الخادم الداخلي 500 NGINX للعميل والخادم
Nginx (يُنطق إنجن-إكس)، وهو خادم ويب مفتوح المصدر تم إصداره علنًا في أكتوبر 2004، يعمل أيضًا كموازن تحميل (load balancer) ووكيل عكسي (reverse proxy) وذاكرة تخزين مؤقت لـ HTTP (HTTP cache). تتجلى شعبيته وفائدته في اعتماده من قبل شركات التكنولوجيا البارزة مثل Microsoft و Google و Facebook و Twitter و Apple.
معنى خطأ الخادم الداخلي 500 (500 Internal Server Error) في Nginx
مثل تطبيقات البرامج أو الخوادم الأخرى، يمكن أن يواجه Nginx أخطاءً، والتي يمكن لنظام الإبلاغ عن الأخطاء المدمج فيه تحديدها. ومع ذلك، يمثل خطأ الخادم الداخلي 500 (500 Internal Server Error) موقفًا فريدًا. يظهر هذا الخطأ أيضًا على خوادم الويب المختلفة، مثل Apache و IIS.
خطأ 500 هو رمز حالة HTTP يشير إلى مشكلة في الخادم لم يتم تحديد سببها الجذري بوضوح. على عكس رموز حالة HTTP الأخرى، مثل 403 (Forbidden) أو 404 (Not Found)، فإنه لا يقدم أي دليل حول السبب المحتمل.
كيفية إصلاح خطأ 500 في Nginx من جانب العميل؟
يمثل رمز الخطأ هذا مشكلة من جانب الخادم يمكن حلها عادةً على الخادم نفسه. ومع ذلك، في حالات نادرة، قد يساهم متصفحك في المشكلة عن طريق إنشاء طلب لا يستطيع الخادم التعامل معه.
للتحقق من أن المتصفح لا يسبب المشكلات، افتح الموقع في متصفح مختلف، وعلى جهاز آخر، وعلى شبكة أخرى. إذا عمل بشكل صحيح، فامسح ذاكرة التخزين المؤقت/البيانات للمتصفح الأصلي وتأكد من عدم وجود أي إضافات للمتصفح تسبب المشكلة.
إذا كان موقع Nginx لا يزال يعرض خطأ 500، فاتصل بمسؤول الخادم لحل المشكلة.
كيفية إصلاح خطأ Nginx 500 من جانب الخادم؟
يمكن أن ينجم هذا الخطأ عن خطأ بسيط في بناء الجملة (syntax) أو مشكلة في تطبيق الواجهة الخلفية (backend application). نظرًا لأن الخطأ لا يكشف عن السبب الجذري، فقد يكون استكشاف الأخطاء وإصلاحها أمرًا صعبًا. ومع ذلك، لا تقلق، فإن النهج المنهجي الذي نناقشه أدناه يمكن أن يحل المشكلة.
1. التحقق من حمل الخادم الزائد (Server Overload)
إذا كان خادمك محملاً بشكل زائد، فقد يعرض خطأ 500 الداخلي بسبب عدم كفاية الموارد للمهام الأساسية. تحقق من استخدام وحدة المعالجة المركزية (CPU usage)، واستخدام الذاكرة (memory usage)، وتوفر مساحة القرص (disk space availability) باستخدام أوامر Free أو Top أو HTop. توضح لقطة الشاشة أدناه المخرجات بعد تنفيذ أمر top.
إذا كان الخادم محملاً بشكل زائد، فإن إضافة المزيد من الموارد يجب أن يحل خطأ Nginx 500.
2. التحقق من بناء جملة التكوين
السبب الأكثر شيوعًا لخطأ 500 في Nginx هو إعدادات الخادم غير الصحيحة بسبب خطأ في بناء جملة التكوين.
لإصلاح ذلك، قم بمراجعة ملفات تكوين Nginx وتحقق بدقة من بناء الجملة بحثًا عن أي أخطاء أو توجيهات في غير محلها.
بعد ذلك، راجع ملفات تكوين Nginx الخاصة بك بحثًا عن أخطاء في بناء الجملة أو توجيهات في غير محلها. استخدم أوامر مثل `nginx -t` أو `nginx -t -c /path/to/nginx.conf` للتحقق من بناء الجملة وتحديد أي أخطاء. نفّذ الأوامر التالية في الطرفية لاكتشاف أي أخطاء:
cd /etc/nginx/sites-available nginx -t
يمكنك أيضًا استخدام ما يلي:
nginx -t -c /path/to/nginx.conf
إذا تم اكتشاف أي أخطاء في بناء الجملة، قم بإصلاحها ونفّذ ما يلي لإعادة تشغيل/إعادة تحميل Nginx:
sudo service nginx restart nginx -s reload
في بعض الحالات، قد تحتاج إلى تعديل ملف التكوين كما هو موضح أدناه:
try_files with try_files $uri =404
أو
try_files $uri $uri/ /index.html; with try_files $uri/ $uri /index.php?$query_string;
3. التحقق من سجلات الخادم
عندما ينتج Nginx خطأ 500، فإنه ينشئ أيضًا إدخالاً في سجل الأخطاء الداخلي، والذي يمكن أن يشير إلى السبب الجذري للخطأ. عادةً ما توجد سجلات الخادم في:
/var/log/nginx/error.log
على توزيعة Linux، نفّذ ما يلي لفتح سجل الخادم:
cd /var/log/nginx cat error.log
في الصفحة الناتجة، يمكنك مراجعة أي مؤشر للسبب الجذري. على سبيل المثال، انظر إلى الصورة أدناه:
يشير هذا إلى أن الخادم لم يتمكن من إنشاء اتصال SSL/TLS مع العميل بسبب مشكلة في شهادة SSL. بعد تحديد المشكلة في السجلات، يمكنك البحث عن الأسباب والحلول المحتملة عبر الإنترنت.
إذا لم تتمكن من فتح السجل بسبب خطأ “permission denied” (رفض الإذن) للمجلد، فقم بتعديل ملف Nginx.conf عن طريق استبدال “user www-data” بـ “user root”. بعد حفظ الملف، أعد تشغيل Nginx وأعد فتح السجل.
4. تعطيل Cloudflare أو الخدمات المشابهة مؤقتًا
إذا كنت تستخدم Cloudflare أو خدمة مشابهة على خادمك، وكانت غير مُكوّنة بشكل صحيح أو تتعارض مع التعديلات الأخيرة، فإن تعطيلها مؤقتًا يمكن أن يساعد في تشخيص المشكلة.
- انتقل إلى لوحة تحكم Cloudflare وقم بتسجيل الدخول باستخدام بيانات الاعتماد الخاصة بك.
- انتقل إلى Overview (نظرة عامة) وقم بتوسيع Advanced (إعدادات متقدمة).
- انقر على Pause Website (إيقاف الموقع مؤقتًا) وقم بالتأكيد. إذا كان مزود الاستضافة الخاص بك لديه تكاملات Cloudflare، فتأكد من تعطيلها أيضًا.
- تأكد من أن لديك عناوين IP الصحيحة للموقع وتحقق مما إذا كان خطأ الخادم الداخلي Nginx 500 قد تم حله. تذكر التحقق من إصداري HTTP و HTTPS للموقع.
5. التحقق من شهادات الخادم
إذا انتهت صلاحية أي من شهاداتك أو أصبحت غير صالحة في إعداداتك الحالية، فسيؤدي ذلك بالتأكيد إلى حدوث خطأ في الخادم الداخلي.
- قم بتكوين Nginx لاستخدام عنوان IP لموقعك الإلكتروني، وليس اسم النطاق.
- عطّل التحقق من SSL في proxy_pass وأضف الشهادة الموقعة ذاتيًا إليه. يمكنك إنشاء واحدة في لوحة تحكم Cloudflare (SSL > Client Certificates).
- تحقق مما إذا كان الخادم يعمل بشكل صحيح. إذا كان الأمر كذلك، فاتصل بالجهة المسؤولة عن إصدار الشهادات أو تحقق من إعداداتك بحثًا عن أي تكوينات غير صحيحة للشهادات.
6. التحقق من أي أخطاء في تطبيقات الواجهة الخلفية
إذا قام Nginx بإعادة توجيه طلبات العميل إلى خدمة أخرى تفشل في التنفيذ بشكل صحيح، فإن ذلك يتسبب في حدوث خطأ 500. على سبيل المثال، إذا قام الخادم بإعادة توجيه طلبات العميل إلى تطبيق خلفي مثل NodeJS، وفشل التطبيق في العمل بشكل صحيح، فإن ذلك يؤدي إلى الخطأ المذكور.
تذكر، إذا لم تُظهر سجلات الخادم أي أخطاء، فهذا يشير عادةً إلى مشكلة في الواجهة الخلفية (backend).
لحل هذه المشكلة، افحص سجلات تطبيق الواجهة الخلفية بحثًا عن أي أخطاء أو استثناءات. على سبيل المثال، في WordPress، ستجد سجلات NodeJS في المسار التالي:
/var/www/<your_site>.com/logs/error.log
7. أذونات الملفات غير الكافية
إذا كان خادم Nginx يفتقر إلى الأذونات اللازمة للوصول إلى ملف أو تنفيذه، فسيؤدي ذلك إلى حدوث خطأ 500. على سبيل المثال، سيحدث خطأ خادم داخلي في موقع WordPress إذا لم يتمكن خادم Nginx من الوصول إلى ملفات PHP أو HTML أو تقديمها من مجلد public_html.
لتصحيح ذلك، يمكنك تعديل أذونات Nginx الضرورية على الملفات أو الدلائل التي يصل إليها الخادم باستخدام أمر chmod، وعادةً ما تكون 755 للدلائل و 644 للملفات.
8. التحقق من توافق الإضافات
تعمل الإضافات (Plugins) على تعزيز قدرات الخادم بشكل حاسم. لكن الإضافات التي لا تعمل بشكل صحيح، أو القديمة، أو التي تم تحديثها بشكل مفرط قد تتسبب في أخطاء الخادم الداخلية. على سبيل المثال، يمكن أن يؤدي تحديث WordPress إلى تعطيل وظائف موقعك حيث تصبح العديد من الإضافات غير متوافقة حتى يتم تحديثها.
لحل هذه المشكلة، تأكد من أن كل إضافة متوافقة مع برنامج الخادم والإضافات الأخرى. على الرغم من أن هذا قد يبدو مملًا، إلا أنه يستحق العناء. بدلاً من ذلك، حاول تعطيل جميع الإضافات لمعرفة ما إذا كان ذلك يزيل الخطأ.
إذا قمت بتحديث برنامج الخادم مؤخرًا، فحاول العودة إلى الإصدار السابق (إن أمكن) لمعرفة ما إذا كان الخطأ قد تم حله. سيؤكد هذا ما إذا كان التحديث هو سبب المشكلة. يمكنك تأخير تحديث البرنامج حتى تؤكد جميع الإضافات توافقها.
9. التحقق من وجود سكربت معيب
مثل الإضافات، تعتبر السكربتات حاسمة لوظائف معينة في الموقع. يمكن أن يتسبب السكربت غير الصالح أو المحدث وغير المتوافق مع بيئة الخادم في حدوث خطأ خادم داخلي.
يمكنك حل هذه المشكلة عن طريق تعطيل السكربتات والتحقق من خادم Nginx. إذا عمل بشكل صحيح، فراجع السكربتات وحاول اكتشاف السكربتات التي تسبب المشكلة.
10. زيادة قيمة مهلة الخادم
إذا كانت قيمة مهلة الخادم أقصر من وقت استجابة Nginx، فستواجه خطأ خادم داخلي. وبالمثل، إذا استغرق طلب الخادم وقتًا أطول من وقت استجابة Nginx، فستحدث المشكلة.
يجب أن تؤدي زيادة قيمة مهلة الخادم إلى حل المشكلة. يمكنك العثور على تعليمات محددة عبر الإنترنت.
11. التأكد من عمل جميع عمليات إعادة التوجيه
تأكد من أن جميع عمليات إعادة التوجيه تعمل بشكل صحيح عندما يعمل Nginx كخادم وكيل (proxy server). إذا لم يتمكن الخادم من إعادة توجيه طلب العميل إلى الخادم الخلفي، فسيحدث خطأ 500.
عطّل جميع عمليات إعادة التوجيه مؤقتًا للتحقق من التشغيل السليم. إذا نجح ذلك، أعد تنشيط كل عملية على حدة لتحديد عملية إعادة التوجيه الخاطئة. بمجرد اكتشافها، ابحث عبر الإنترنت للعثور على الأسباب المحتملة والحلول لفشل إعادة التوجيه المحدد هذا.
12. استخدام PHP مع Nginx
لا يدعم Nginx لغة PHP بشكل أصلي؛ لذلك، يمكن أن تؤدي التكوينات الخاطئة لـ PHP مع Nginx إلى حدوث خطأ خادم داخلي.
لحل هذه المشكلة، تحقق من تكامل PHP مع Nginx. إذا كانت أخطاء عرض PHP معطلة، فسيعيد الخادم خطأ Nginx 500 عندما يواجه PHP خطأً. يمكن أن يؤدي تمكين أخطاء PHP إلى تبسيط استكشاف الأخطاء وإصلاحها.
على CentOS 7، نفّذ ما يلي:
tail -f /var/log/php-fpm/www-error.log
بدلاً من ذلك، انتقل إلى
/etc/php.ini
وغيّر
display_errors = Off
إلى
display_errors = On
يمكنك أيضًا البحث عن معالج PHP أفضل (مثل PHP-FPM) وتمكين ذاكرة التخزين المؤقت لـ Nginx.
13. استخدم منهج الحد الأدنى
إذا كنت لا تزال غير قادر على مسح الخطأ 500، يمكنك استخدام منهج الحد الأدنى لحل المشكلة.
- أنشئ نسخة احتياطية من موقعك واستبدل محتوى الموقع بملف index.html بسيط يحتوي على بعض النصوص العادية.
- تحقق مما إذا كان الموقع يعمل وابدأ في إضافة التوجيهات والميزات والخدمات والمكونات الإضافية والبرامج النصية وما إلى ذلك، واحدة تلو الأخرى.
- تأكد من اختبار الموقع بعد كل خطوة ومعرفة ما إذا كانت المشكلة تتكرر.
- أعد المحتوى إلى موقعك وتحقق مما إذا كان المحتوى هو سبب المشكلة.
- بمجرد العثور على العنصر المسبب للمشكلة، يمكنك إصلاحه بالبحث في الإنترنت.
كيفية تجنب تكرار خطأ خادم Nginx 500 في المستقبل
يمكنك اتخاذ الخطوات التالية لتجنب أي تكرار لخطأ Nginx 500:
- قم بإجراء صيانة دورية للخادم.
- تأكد من أن رمز الموقع ومحتواه (الصور، مقاطع الفيديو، إلخ) محسّن لإعداداتك.
- أنشئ شبكة توصيل محتوى (CDN) لتقديم الموقع من خلال ذاكرة التخزين المؤقت الخاصة بها.
إذا كان لديك استفسار، فنحن متواجدون في قسم التعليقات.
Comments are closed.