Nginx

  • تعطيل التخزين المؤقت لملفات JavaScript في Nginx داخل Docker

    من الواضح أنك تواجه تحديا في تعطيل التخزين المؤقت للملفات الجافا سكريبت في Nginx داخل حاوية Docker، وهذا مشكلة معينة تحتاج إلى حل دقيق. بناءً على المعلومات التي قدمتها، يبدو أن تعطيل التخزين المؤقت لم يعمل بالشكل المطلوب، مما يترك لديك تساؤلات حول مصدر المشكلة، سواء كانت Nginx أو المتصفح أو Docker.

    بدأت بالتأكيد في فحص الأمور بتفصيل. للتأكد من أن Nginx هو المسؤول الرئيسي عن المشكلة، استخدمت أداة curl لإرسال طلبات HTTP محاكية، ولاحظت نفس المشكلة التي كنت تواجهها في المتصفح. هذا يقلل من احتمالية أن يكون المتصفح هو السبب الرئيسي.

    وبالنسبة لـ Docker، قمت بالتحقق من ذلك أيضًا عن طريق الاتصال بالحاوية واستخدام أمر cat للتحقق مباشرة من محتوى الملف بعد التغييرات، ولم تكن هناك مشكلة.

    ومع ذلك، عند مراجعة ملف الـ nginx.conf الخاص بك، والذي يبدو أنه تم تكوينه بشكل جيد لتعطيل التخزين المؤقت لملفات JavaScript، يظل السؤال حول لماذا لا يعمل. ربما هناك شيء مفقود أو تحتاج إلى ضبط إضافي.

    قمت بتجريب قطعة التكوين التي وجدتها في موضوع Stack Overflow ، وهي:

    nginx
    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|xml|html|htm)$ { # clear all access_log directives for the current level access_log off; add_header Cache-Control no-cache; # set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years expires 1s; }

    هذا المكان يبدو صحيحاً، لكن يمكن أن يكون هناك شيء يفوتنا.

    ربما تحتاج إلى فحص أكثر تفصيلًا لطريقة تكوين Nginx داخل Docker. هل تم تكوين Nginx بشكل صحيح داخل الحاوية؟ هل هناك إعادة تحميل أو تنشيط مطلوب بعد تغييرات التكوين؟

    كما قد ترغب في مراجعة سجلات الأخطاء والوصول في Nginx للعثور على أي مؤشرات على ما قد يكون خاطئًا.

    للتأكد من عدم حدوث أي تأثيرات جانبية، تأكد من إعادة بناء الحاوية بشكل صحيح بعد كل تغيير في تكوين Nginx.

    في النهاية، التحدي الذي تواجهه يبدو معقدًا قليلاً، لكن مع مزيد من التحقيق والتجريب، ينبغي أن تتمكن من تحديد سبب المشكلة وإيجاد الحل المناسب.

    المزيد من المعلومات

    مع تحديثات ملف الـ “nginx.conf” التي لم تعمل كما هو متوقع، قد ترغب في النظر في بعض النقاط الأخرى التي قد تؤثر على عملية تعطيل التخزين المؤقت لملفات الجافا سكريبت في Nginx داخل البيئة الخاصة بـ Docker.

    أولاً، تأكد من أن تكوين Nginx يتم تحميله بشكل صحيح. قد يكون هناك خطأ في تحديد موقع ملف التكوين، أو ربما تم تطبيق تكوين آخر يمكن أن يلغي التأثيرات المطلوبة. يجب التحقق من أن ملف التكوين الذي تعمل عليه هو الذي تتوقعه بالفعل.

    ثانياً، قد تحتاج إلى التأكد من أن التعديلات التي تقوم بها في ملف الـ “nginx.conf” تُطبق بشكل صحيح بعد إعادة بناء الحاوية. بعض الأنظمة تستخدم ميزات مثل volume mounting، والتي قد تؤدي إلى عدم تطبيق التغييرات بشكل صحيح إذا لم يتم تحديث الملفات بشكل مناسب داخل الحاوية.

    ثالثاً، يمكنك محاولة تعطيل التخزين المؤقت مباشرة في المواقع المعنية بالملفات الجافا سكريبت باستخدام الخاصية “proxy_cache”، إذا كنت تستخدم خوادم وكيل (Proxy Servers) في تكوين Nginx الخاص بك.

    أخيرًا، قد تكون هناك مشكلة في إعدادات Docker نفسها. تأكد من أن الحاوية تعمل بشكل صحيح، ولا توجد مشاكل في تكوينات الشبكة أو تخزين البيانات التي قد تؤثر على عملية التحميل الصحيحة للملفات.

    بالمراجعة والتحقيق الدقيق، يجب أن تتمكن من تحديد مصدر المشكلة وإيجاد الحل المناسب لتعطيل التخزين المؤقت لملفات الجافا سكريبت في بيئة Nginx داخل Docker.

  • تحسين أداء وأمان موقع PHP على Ubuntu 16.04 مع Nginx

    المشكلة التي تواجهها تتعلق بعدم توفر ملف الـ socket لـ PHP-FPM بالطريقة المتوقعة في موقع النظام. يعتمد Nginx على هذا الملف للاتصال بـ PHP-FPM وتنفيذ السكربتات PHP.

    أولاً، يُرجى ملاحظة أنه قد يكون هناك تباين بين إصدار PHP الذي تستخدمه وإصداره المُفصل في ملفات التكوين. في المقالة التي تشاركها، يشير إلى استخدام PHP 7.0، لكن من الواضح أنك تستخدم PHP 7.0 على Ubuntu 16.04، حيث يكون المسار المتوقع للـ socket مختلفًا.

    السبب في السلوك الغريب الذي تراه مع أمر ls يمكن أن يكون بسبب انخفاض خوارزمية إكمال الأسماء في النظام. في حالتك، قد يكون الأمر يحتاج إلى تحديد المسار بدقة أكبر، مثل /var/run/php* بدلاً من /var/run/php7.

    لحل المشكلة وتوجيه Nginx للعثور على ملف socket الصحيح، يجب عليك التأكد من تحديد المسار الصحيح للـ socket في ملف تكوين Nginx. في المهمة “Configure nginx” في ملف Ansible، يتم استخدام ملف التكوين المعتاد sites-available/default، والذي قد يحتاج إلى تحريره ليعكس المسار الصحيح لملف الـ socket.

    يجب أن تكون السطر المعني يبدو على النحو التالي:

    nginx
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

    بعد تعديل ملف التكوين، يجب إعادة تشغيل خدمة Nginx لتحديث التغييرات. قد تحتاج أيضًا إلى التأكد من أن خدمة PHP-FPM تعمل بشكل صحيح، ويمكنك فعل ذلك باستخدام الأمر:

    bash
    sudo service php7.0-fpm restart

    وفي حالة عدم وجود أي أخطاء، يجب أن تتمكن الآن من رؤية صفحة الويب الخاصة بك دون أي مشاكل.

    من الجيد دائمًا أن تتأكد من مطابقة إصدارات البرمجيات بين الإصدارات المستخدمة في المقالة والإصدارات التي تستخدمها على نظامك، لضمان التوافق والأداء الأمثل.

    المزيد من المعلومات

    بمجرد حل المشكلة المتعلقة بتوجيه Nginx للعثور على ملف الـ socket الصحيح، يمكنك الاستمتاع بإعداد موقع الويب الخاص بك بسلاسة على خادم Ubuntu 16.04 باستخدام PHP 7.0.

    مع ذلك، هناك بعض النصائح الإضافية التي يمكن أن تكون مفيدة في سياق إعداد موقع الويب الخاص بك:

    1. إعدادات Nginx:

    تحقق من أن إعدادات Nginx الخاصة بك متماشية مع متطلبات تطبيقك. يمكنك تعديل ملف التكوين لـ Nginx (/etc/nginx/sites-available/default) لتحسين الأداء أو تنفيذ متطلبات خاصة بتطبيقك.

    2. إعدادات PHP:

    تأكد من أن ملفات إعداد PHP (php.ini) تلبي متطلبات تطبيقك. يمكنك تحديد إعدادات مثل حجم الذاكرة المخصصة للتنفيذ وإعدادات الأمان والسماح بالوصول إلى ملفات النظام.

    3. إدارة النسخ الاحتياطي:

    ضمن خططك لإدارة الموقع، لا تنسى تنفيذ استراتيجية للنسخ الاحتياطي للبيانات. يمكن استخدام أدوات مثل rsync أو scp لنسخ ملفات الموقع وقواعد البيانات بانتظام إلى مواقع نسخ احتياطية.

    4. تحسين الأداء:

    استكشاف تقنيات تحسين الأداء مثل استخدام الذاكرة المؤقتة (caching) وتقنيات الضغط (compression) لتحسين استجابة الموقع وسرعته.

    5. الأمان:

    اتخذ إجراءات الأمان اللازمة لحماية موقعك من الهجمات الإلكترونية. يمكن تنفيذ تدابير مثل تشفير الاتصالات (SSL/TLS)، وتحديثات الأمان الدورية، وتطبيق سياسات قوية لإدارة كلمات المرور.

    6. مراقبة الأداء:

    استخدم أدوات المراقبة لمراقبة أداء الموقع وتحديد المشاكل المحتملة مبكرًا. يمكن استخدام أدوات مثل Prometheus وGrafana للمراقبة المتقدمة وتحليل أداء النظام.

    مع اتباع هذه النصائح، يمكنك تحسين أداء وأمان واستقرار موقع الويب الخاص بك. يجب أن تكون قادرًا الآن على البدء بنجاح في استضافة تطبيق PHP على خادم Ubuntu 16.04 باستخدام Nginx و PHP 7.0.

  • حل مشكلة خطأ invalid number of arguments in map directive في Nginx

    عند النظر إلى الخطأ الذي تلقيته في تكوين ملف Nginx الخاص بك، يبدو أن المشكلة تكمن في كيفية استخدامك للتوجيه map. في الواقع، فإن هذا الخطأ يشير إلى أن هناك عددًا غير صالح من الوسائط الممررة إلى التوجيه map في ملف التكوين.

    لفهم الخطأ بشكل أفضل، يجب التأكد من أن التوجيه map مكون بشكل صحيح. في ملف الإعداد الخاص بك، يظهر التوجيه map على النحو التالي:

    perl
    map $http_upgrade $connection_upgrade { default upgrade; '' close; }

    بناءً على التوثيق الخاص بـ Nginx، يجب أن يكون توجيه map مفصولًا بواسطة فواصل بين القيم والنتائج. كل قيمة في التوجيه map تتطلب اثنين من الوسائط: القيمة المطابقة والقيمة المستبدلة.

    بالنظر إلى توجيه map الخاص بك، يبدو أن لديك قيمتين: “default upgrade” و “” close”. ومع ذلك، ينقص الفاصلة بينهما. يجب عليك إضافة فاصلة بينهما ليصبح التوجيه map مكونًا بشكل صحيح. لذا، يجب تصحيحه ليبدو على النحو التالي:

    perl
    map $http_upgrade $connection_upgrade { default upgrade, '' close; }

    بمجرد إصلاح هذا التوجيه map وإعادة تشغيل خادم Nginx، يجب أن تختفي رسالة الخطأ وتعمل الإعدادات كما هو متوقع.

    يرجى ملاحظة أن الرمز ${API_LOCATION} و ${UI_LOCATION} في تكوينك يبدو أنه يشير إلى متغيرات البيئة. تأكد من أنك قمت بتعيين قيم لهذه المتغيرات قبل تشغيل خادم Nginx.

    المزيد من المعلومات

    بمجرد حل مشكلة التوجيه map في ملف التكوين الخاص بك، يمكنك اعتبار الأمور في طريقها للعمل بشكل صحيح. ومع ذلك، من المهم أيضًا فهم بعض الأساسيات حول كيفية عمل توجيه الطلبات وخصائص الـ WebSocket في Nginx.

    أولاً وقبل كل شيء، دعني أوضح لك ما يفعله التوجيه map في ملف التكوين الخاص بك. في هذا السياق، يقوم التوجيه map بتعيين قيمة محددة لمتغير الـ Connection Upgrade استنادًا إلى قيمة رأس الطلب HTTP Upgrade. هذا مهم بشكل خاص عند التعامل مع اتصالات الـ WebSocket.

    عندما يأتي طلب HTTP مع رأس Upgrade يحمل قيمة “websocket”، يجب على خادم Nginx ترقية الاتصال إلى بروتوكول الـ WebSocket. وهذا بالضبط ما يفعله التوجيه map الخاص بك. إذا كانت قيمة رأس Upgrade فارغة، فسيُغلق خادم Nginx الاتصال.

    بالنسبة لتكوين الـ WebSocket في Nginx، يجب عليك أيضًا التأكد من أنه تم تكوينه بشكل صحيح في ملف التكوين الخاص بك. يبدو أنك تقوم بإعادة توجيه طلبات الـ WebSocket إلى مواقع الخادم الخاصة بك. وهذا يتطلب استخدام بروتوكول الـ WebSocket بدلاً من البروتوكول الافتراضي.

    لتفادي المشاكل المحتملة، تأكد من أن إعدادات البروتوكول الخاصة بالـ WebSocket مثل proxy_http_version معينة بشكل صحيح كما هو موضح في تكوينك.

    بعد إصلاح مشكلة التوجيه map وتأكيد تكوين الـ WebSocket بشكل صحيح، يجب أن تكون قادرًا على تشغيل خادم Nginx الخاص بك بنجاح والتعامل مع طلبات الـ WebSocket بشكل صحيح.

    يجدر بك أيضًا اختبار تكوينك للتأكد من أن كل شيء يعمل كما هو متوقع. يمكنك استخدام أدوات مثل curl لإرسال طلبات HTTP والتحقق من الاستجابات. وللتحقق من التوجيه الصحيح للـ WebSocket، يمكنك استخدام أدوات مثل wscat لإرسال رسائل WebSocket والتحقق من الردود.

    باستكمال هذه الخطوات، يجب أن تكون قادرًا على تشغيل خادم Nginx الخاص بك بنجاح والتعامل مع طلبات الـ WebSocket بشكل صحيح. إذا واجهت أي مشاكل إضافية، يمكنك دائمًا التحقق من السجلات (logs) لـ Nginx لمزيد من التفاصيل حول الأخطاء المحتملة.

  • موقع ملف index.html الافتراضي في Nginx على macOS

    بما أنك قمت بتثبيت خادم Nginx بنجاح على نظام macOS الخاص بك باستخدام Homebrew، فمبروك عليك البدء في رحلتك مع إعداد خوادم الويب! يبدو أنك تواجه بعض الصعوبات في تحديد موقع ملف index.html الافتراضي الذي يتم استدعاؤه عندما يتم الوصول إلى خادم Nginx الخاص بك.

    فيما يلي إجابة على استفسارك:

    تحديد موقع ملف index.html الافتراضي في خادم Nginx على macOS يتم عادةً عن طريق البحث في الإعدادات الافتراضية لملف تكوين Nginx (nginx.conf)، وعادة ما يشير إلى مجلد يسمى “html”. ولكن قبل القفز إلى ذلك، دعني أشير إلى أن موقع الملف الافتراضي قد يتغير اعتمادًا على كيفية تم تكوين Nginx على جهازك.

    أولاً وقبل كل شيء، قم بالتأكد من أن خادم Nginx الخاص بك يعمل بنجاح عن طريق فتح متصفح الويب والتوجه إلى عنوان الـ localhost: http://localhost. إذا رأيت صفحة ترحيبية من Nginx، فهذا يعني أن الخادم يعمل بشكل صحيح وأن المشكلة ليست في ذلك.

    ثانيًا، يمكنك العثور على موقع ملف index.html الافتراضي عن طريق فتح ملف التكوين الرئيسي لـ Nginx، الذي غالبًا ما يكون موجودًا في المسار التالي:

    bash
    /usr/local/etc/nginx/nginx.conf

    بعد فتح ملف nginx.conf، ابحث عن السطر الذي يشير إلى المجلد الجذري لملفات الويب. عادة ما يكون هذا السطر يشابه هذا:

    css
    root html;

    وفي هذه الحالة، يشير هذا السطر إلى أن ملفات الويب الافتراضية تقع في مجلد يسمى “html”. يمكنك العثور على هذا المجلد عن طريق التنقل إلى المسار الذي يتم تعيينه لهذا المجلد في نظام الملفات. بشكل عام، يمكن أن يكون مسار المجلد الافتراضي مثل:

    css
    /usr/local/var/www/html

    أو أي مسار آخر تم تعيينه في ملف nginx.conf.

    بعد أن تجد موقع المجلد الجذري، يمكنك التحقق من وجود ملف index.html داخله. إذا كنت لا تزال تواجه صعوبات في العثور على الملف، فيمكنك استخدام أمر البحث في النظام للبحث عنه مباشرة. يمكنك استخدام الأمر التالي في تطبيق ترمينال:

    arduino
    sudo find / -name "index.html"

    هذا الأمر سيبحث في جميع الملفات والمجلدات على النظام ويعرض أي ملف يسمى “index.html”.

    باختصار، يمكنك العثور على موقع ملف index.html الافتراضي الذي يتم استدعاؤه عندما يتم الوصول إلى خادم Nginx الخاص بك عن طريق البحث في ملف تكوين Nginx (nginx.conf) والتأكد من المجلد الذي يشير إليه السطر “root” في هذا الملف. وبعد ذلك، يمكنك استخدام الأمر “find” في تطبيق ترمينال للعثور على الملف بشكل مباشر إذا لزم الأمر.

    المزيد من المعلومات

    بعد العثور على المجلد الجذري والتأكد من المسار المحدد في ملف تكوين Nginx، يمكنك الانتقال إلى هذا المجلد باستخدام تطبيق ترمينال للتحقق من وجود ملف index.html بالفعل داخله. إذا وجدت الملف هناك، فهذا يعني أن الملف الذي تبحث عنه هو الملف الافتراضي الذي يتم عرضه عند الوصول إلى خادم Nginx الخاص بك.

    في حالة عدم وجود ملف index.html داخل المجلد الجذري، يمكنك إنشاءه بنفسك باستخدام أي محرر نصوص تفضله. يمكنك إضافة المحتوى الذي ترغب في عرضه في الصفحة الرئيسية لموقعك داخل هذا الملف، ومن ثم حفظ التغييرات.

    عند الانتهاء، قم بإعادة تشغيل خادم Nginx لتطبيق التغييرات التي قمت بها. يمكنك القيام بذلك باستخدام الأمر التالي في تطبيق ترمينال:

    sudo nginx -s reload

    هذا الأمر سيعيد تحميل تكوين Nginx بما في ذلك أي تغييرات قمت بها، وسيتم الآن عرض المحتوى الجديد الذي قمت بإضافته إلى ملف index.html عندما يتم الوصول إلى خادم Nginx الخاص بك.

    باستكمال هذه الخطوات، يجب أن تكون قادرًا الآن على تحديد موقع ملف index.html الافتراضي وتعديله وفقًا لاحتياجات موقعك الخاص. ولا تتردد في استكشاف وتعديل ملفات تكوين Nginx الأخرى لتخصيص خادمك بالكامل وفقًا لاحتياجاتك.

  • توجيه عدة APIs تحت موقع واحد باستخدام NGINX

    تتضمن مشكلتك في استخدام NGINX كخادم وكبديل مسبق للطلبات (Reverse Proxy) توجيه طلبات متعددة لعدة API على منافذ مختلفة تحت موقع واحد. تريد تشغيل جميع هذه الAPIs تحت موقع واحد هو localhost:443/api/. هذا يشمل API العملاء على خادمين مختلفين، وهو ما يعقد الأمور بالنسبة لك.

    للتعامل مع هذا السيناريو، يمكنك تعديل إعدادات NGINX لتحقيق الهدف المطلوب. السبيل الذي اقترحه هو استخدام تعبيرات العنوان (regex) في موقع المكان لتطابق الطلبات بشكل ديناميكي. إليك كيف يمكنك تعديل إعدادات NGINX الخاصة بك:

    nginx
    server { listen 443; server_name localhost; location ~ ^/api/orders { proxy_pass https://localhost:500; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } location ~ ^/api/customers/(?\d+)/billing { proxy_pass https://localhost:400/api/customers/$id/billing; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } location ~ ^/api/customers { proxy_pass https://localhost:300; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } }

    في هذا التكوين، تستخدم تعبيرات العنوان لتحديد المواقع التي تخص كل API. بدلاً من تحديد مسارات محددة مثل /api/orders أو /api/customers/$id/billing، يمكنك استخدام ^ للبداية و$ للنهاية مع تعبيرات العنوان للتأكد من أن المسارات تطابق بالضبط.

    على سبيل المثال، الموقع ~ ^/api/orders سيتطابق مع أي مسار يبدأ بـ /api/orders ولكن لا يوجد لديه قيد للنهاية، مما يعني أنه سيتطابق مع كل ما بعد /api/orders بغض النظر عن ما يكون.

    أما بالنسبة لـ /api/customers/(?\d+)/billing، فهو يستخدم تعبيرًا عن العنوان لالتقاط قيمة الـ id من المسار. هذا يتيح لك توجيه الطلبات بناءً على القيم المحددة في مسار العنوان.

    باستخدام هذا التكوين، يجب أن تكون قادرًا على تحقيق ما تريد، وهو توجيه الطلبات لجميع الـ APIs المذكورة تحت موقع واحد وهو localhost:443/api/.

    المزيد من المعلومات

    بالطبع، دعني أواصل تطوير المقال لمساعدتك في فهم هذا العملية بشكل أفضل وتنفيذها بنجاح.

    بعد تعديل إعدادات NGINX كما سبق، يجب أن تكون قادرًا الآن على توجيه جميع الطلبات المتعلقة بالـ APIs المختلفة تحت الموقع الواحد localhost:443/api/. دعنا نلقي نظرة عميقة على التعديلات التي أجريناها وكيف تؤثر على سير العمل:

    1. مطابقة المواقع باستخدام تعبيرات العنوان (Regex Matching):
      استخدمنا تعبيرات العنوان لتحديد المواقع التي يجب أن تتم مطابقتها لكل API. هذا يسمح لنا بالتعامل مع مسارات الطلبات بشكل ديناميكي بدلاً من تحديد مسارات ثابتة.

    2. توجيه الطلبات إلى المنافذ الصحيحة:
      بعد تحديد المواقع المناسبة لكل API، استخدمنا proxy_pass لتوجيه الطلبات إلى المنافذ الصحيحة لكل API. على سبيل المثال، توجيه الطلبات المتعلقة بـ orders إلى المنفذ 500، والطلبات المتعلقة بـ customers إلى المنفذ 300، والطلبات المتعلقة بـ billing إلى المنفذ 400.

    3. تعيين رؤوس الطلبات الخاصة:
      استخدمنا proxy_set_header لتعيين رؤوس الطلبات بشكل صحيح. هذا مهم للحفاظ على سلامة الطلبات والردود أثناء التوجيه.

    بعد تطبيق هذه التعديلات، يجب أن يعمل NGINX بشكل صحيح لتوجيه الطلبات لجميع الـ APIs المختلفة تحت موقع واحد. لا تنسى إعادة تشغيل NGINX بعد تعديل إعداداته لتأكيد تطبيق التغييرات.

    إذا واجهت أي مشكلة أو كان لديك أي استفسار إضافي، فلا تتردد في طرحه هنا أو في المنتديات ذات الصلة. سنكون سعداء بمساعدتك في الوصول إلى الحل الأمثل.

  • تكامل Webpack-Hot-Middleware مع NGINX

    عندما يتعلق الأمر بتكوين Webpack-Hot-Middleware مع NGINX على الجانب الخادم، يجب أن نأخذ في الاعتبار عدة عوامل لضمان تشغيلها بنجاح. في مشروعك، تبدو الأمور معقدة بعض الشيء نظرًا لاستخدامك لتقنيات متعددة، مثل React و Express و NGINX، وهذا يتطلب فهماً عميقاً لتكاملها بشكل صحيح.

    أولاً، يبدو أنك تستخدم Express كخادم وكذلك كخادم تطويري لـ Webpack (webpack-dev-middleware) وكذلك Webpack-Hot-Middleware. هذا يعمل جيداً على البيئة التطويرية، ولكن عندما تنتقل إلى الإنتاج، فإن استخدام NGINX كخادم أمامي يصبح أمراً مهماً.

    الأمر الذي ينبغي مراعاته هو كيفية إعداد NGINX للتعامل مع طلبات HMR. يبدو أنك تستخدم توجيه الطلبات من NGINX إلى Express على منفذ 8195 لكن هذا قد يسبب مشكلة مع Webpack-Hot-Middleware في بعض الحالات.

    أحد الحلول الممكنة هو توجيه طلبات HMR مباشرة إلى خادم Webpack-Hot-Middleware عوضاً عن إرسالها إلى Express وذلك باستخدام تكوين NGINX المناسب.

    في ملف إعدادات NGINX الخاص بك، يجب أن تقوم بإعداد مسار خاص يحول الطلبات ذات الصلة بـ HMR إلى Webpack-Hot-Middleware مباشرة، بينما يمر الباقي من الطلبات إلى Express كما هو معتاد.

    على سبيل المثال، يمكنك إضافة قاعدة إلى تكوين NGINX الخاص بك تشابه هذا:

    bash
    location /webpack-hmr { proxy_pass http://127.0.0.1:8195; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }

    ثم يجب تحديث ملف webpack.config.js الخاص بك ليستخدم مسارًا مختلفًا لـ HMR بحيث يتم إعادة توجيه الطلبات الخاصة بـ HMR إلى المسار الجديد الذي قمت بإعداده في NGINX.

    بعد ذلك، قم بإعادة تشغيل خوادمك وتحقق من السلوك. قد تحتاج إلى ضبط بعض الإعدادات لتناسب بنية تطبيقك بشكل أفضل، ولكن هذه الخطوات يجب أن توجهك نحو حل المشكلة التي تواجهها.

    تذكر أيضًا أنه يمكن أن تكون هناك مشاكل بسبب الإعدادات الأمنية أو الشهادات SSL عند توجيه الطلبات بين NGINX و Express، لذا تأكد من تكوينها بحذر وفقًا لمتطلبات تطبيقك وبيئتك.

    مع القليل من التكيف والتحديد، يمكنك تشغيل Webpack-Hot-Middleware بنجاح بجانب NGINX في بيئة الإنتاج.

    المزيد من المعلومات

    بمجرد إعداد مسار الـ Webpack-Hot-Middleware في NGINX وتحديث تكوين Webpack لاستخدامه، يجب عليك اختبار التكامل بين جميع الأجزاء للتأكد من عملية النشر بشكل صحيح.

    قد يتطلب ذلك بعض الخطوات الإضافية للتأكد من سلامة الإعدادات وانسجامها مع بيئة الإنتاج الخاصة بك. إليك بعض النصائح الإضافية لاستكمال هذا العمل:

    1. اختبار النشر: قم بنشر التطبيق الخاص بك على البيئة الحية وتحقق من أن كل شيء يعمل بشكل صحيح، بما في ذلك HMR. افحص السجلات والمخرجات للتأكد من عدم وجود أخطاء أو تحذيرات غير متوقعة.

    2. تصحيح الأخطاء: في حالة وجود أي مشاكل، قم بمراجعة السجلات والإعدادات للعثور على الأخطاء وتصحيحها. قد تحتاج إلى التحقق من صحة مسارات الطلبات والإعدادات الخاصة بالاتصال بين NGINX و Express.

    3. الأمان والأداء: تأكد من أن إعدادات الأمان والأداء مثل إعدادات SSL ومخزن الذاكرة المؤقتة مضبوطة بشكل صحيح. يجب أن تعمل تلك الإعدادات على تحسين أمان وأداء التطبيق الخاص بك.

    4. مراقبة الأداء: احرص على مراقبة أداء التطبيق بشكل دوري بما في ذلك استخدام أدوات مثل New Relic أو Grafana. يمكن أن تساعدك هذه الأدوات في اكتشاف أي مشاكل في الأداء وتحسينها بشكل فعال.

    5. التوثيق والتدريب: قم بتوثيق جميع الإعدادات والخطوات التي قمت بها لتكامل Webpack-Hot-Middleware مع NGINX، وقم بتدريب فريقك على كيفية صيانة وتشغيل التطبيق بشكل صحيح.

    6. التحسين المستمر: استمر في تحسين عملية التكامل وأداء التطبيق بمرور الوقت. استمع إلى ملاحظات المستخدمين وحل المشاكل التي يواجهونها بسرعة.

    باستخدام هذه النصائح والخطوات، يمكنك تكامل Webpack-Hot-Middleware بنجاح مع NGINX على الجانب الخادم وتشغيل تطبيقك بنجاح على بيئة الإنتاج. احرص على متابعة التحديثات والتطورات في التكنولوجيا لضمان استمرارية أداء تطبيقك وتحسينه بشكل دائم.

  • تحليل حركة المرور وأداء خادم Nginx باستخدام GoAccess

    لديك ملفات سجل (logs) من Nginx تحتوي على البيانات التي ترغب في تحليلها باستخدام GoAccess. تبدو الملفات بتنسيق مضغوط بامتداد .gz، وهذا يجعل الأمر أكثر تعقيدًا لبعض الأدوات بما في ذلك GoAccess. لكن لحسن الحظ، لديك عدة خيارات لتحليل هذه الملفات واستخراج البيانات منها.

    أولاً وقبل كل شيء، يجب عليك فك الضغط عن الملفات التي تريد تحليلها. يمكنك استخدام أمر مثل gzip -d لفك ضغط الملفات بامتداد .gz، مما يتيح لك الوصول إلى الملفات النصية الأصلية.

    بعد ذلك، يمكنك استخدام GoAccess لتحليل هذه الملفات النصية. يمكنك القيام بذلك عن طريق توجيه إخراج الملفات النصية إلى GoAccess باستخدام أنبوبة الأوامر (piping)، أو يمكنك تحليل الملفات المنفصلة بشكل فردي.

    لتحليل مجموعة من الملفات، يمكنك استخدام أمر مثل هذا:

    bash
    cat /var/log/nginx/access.log* | goaccess -

    هذا الأمر يستخدم أمر cat لدمج محتوى جميع ملفات الوصول إلى السجلات Nginx (access.log*) ثم يوجه إخراج هذه الأشرطة المتصلة إلى GoAccess باستخدام علامة الشريط -، مما يسمح ل GoAccess بتحليل البيانات المجمعة.

    كما يمكنك تحليل كل ملف على حدة باستخدام GoAccess بشكل متكرر:

    bash
    goaccess /var/log/nginx/access.log

    هذا الأمر يستخدم GoAccess مباشرة على ملف الوصول إلى السجلات الفردي الذي تحدده.

    باستخدام أحد هذه الطرق، يمكنك تحليل بيانات الوصول إلى السجلات Nginx الخاصة بك بسهولة باستخدام GoAccess والحصول على تقارير مفصلة وإحصائيات قيمة.

    المزيد من المعلومات

    بعد أن تكون قد قمت بتحليل بيانات الوصول إلى السجلات Nginx باستخدام GoAccess، يمكنك الاستفادة من مجموعة متنوعة من الإجراءات والتحليلات لفهم أداء خادم الويب الخاص بك وتحسينه بشكل فعال. هنا بعض الأفكار والخطوات التي يمكنك اتخاذها:

    1. فهم حركة المرور: استخدم تقارير GoAccess لفهم أنماط حركة المرور على موقعك. انظر إلى الصفحات الأكثر زيارة، والمواقع المرجعية الأكثر شيوعًا، والكلمات الرئيسية المستخدمة في محركات البحث التي توجه الزوار إلى موقعك.

    2. تحليل الأداء: انظر إلى تقارير الأداء في GoAccess لمعرفة كيفية أداء الخادم، بما في ذلك أوقات الاستجابة، والاستجابات الخاطئة، والموارد الأكثر استخدامًا، وما إلى ذلك.

    3. رصد الأمان: تحقق من سجلات الخطأ في GoAccess للعثور على أية مشاكل في الأمان مثل الهجمات أو المحاولات الغير مصرح بها للوصول إلى الموارد المحمية.

    4. تحسين الأداء: استخدم المعلومات التي تجدها في تقارير GoAccess لتحسين أداء موقعك. على سبيل المثال، يمكنك تحسين الأداء عن طريق تحسين تصميم الصفحة أو تحسين استجابة الخادم.

    5. مراقبة الاتجاهات: استخدم GoAccess بانتظام لمراقبة الاتجاهات في حركة المرور وأداء الخادم على مدى الوقت. هذا سيساعدك في تحديد الاتجاهات الطويلة الأجل واتخاذ الإجراءات المناسبة.

    6. التقارير الدورية: قم بإعداد تقارير GoAccess لتكون جزءًا من عملية رصدك وتقييم أداء خادم الويب الخاص بك. يمكنك جدولة تحليلات دورية لتلقي إشعارات حول أي تغييرات غير عادية في حركة المرور أو أداء الخادم.

    7. تحسين SEO: استخدم البيانات التي تحصل عليها من GoAccess لتحسين استراتيجيات التسويق عبر محركات البحث (SEO) الخاصة بك، مثل تحسين الكلمات الرئيسية والمحتوى لزيادة ظهور موقعك في نتائج البحث.

    باستخدام GoAccess، يمكنك استكشاف وتحليل البيانات الخاصة بحركة المرور وأداء الخادم بسهولة، مما يساعدك في اتخاذ القرارات الذكية لتحسين موقعك على الويب وضمان تجربة مستخدم ممتازة لزوارك.

  • حل مشكلة SSL_do_handshake() failed في Nginx

    عند تكوين خادم Nginx كوكيل عكسي (Reverse Proxy)، قد تواجه بعض التحديات التقنية التي تحتاج إلى معالجة دقيقة لضمان سلاسة التشغيل. في الحالة التي ذكرتها، تظهر رسالة خطأ “BAD GATE WAY 502” مع رسائل الخطأ المتعلقة بـ SSL_do_handshake()، مما يشير إلى مشكلة في عملية المصافحة الآمنة (SSL handshake) بين Nginx والخادم الخلفي (upstream server).

    يبدو أن الخادم الخلفي يرسل رسائل “tlsv1 alert internal error”، مما يشير إلى خطأ داخلي في بروتوكول TLS. هذا الخطأ يمكن أن ينشأ من عدة أسباب، بما في ذلك تكوين خاطئ لبروتوكول TLS أو قد يكون هناك مشكلة في الاتصال بالخادم الخلفي نفسه.

    لحل هذه المشكلة، يمكنك اتخاذ الخطوات التالية:

    1. التحقق من تكوين Nginx: تأكد من أن إعدادات Nginx الخاصة بالبروتوكول SSL مضبوطة بشكل صحيح. يجب أن يكون تشفير TLS مدعومًا بواسطة الخادم الخلفي ومتوافقًا مع ما تستخدمه Nginx.

    2. فحص إعدادات الخادم الخلفي: تأكد من أن إعدادات الـ SSL/TLS على الخادم الخلفي صحيحة ومتوافقة مع ما يتوقعه Nginx.

    3. تحديث برنامج OpenSSL: في بعض الحالات، يمكن حل مشكلات SSL عن طريق تحديث مكتبة OpenSSL إلى الإصدار الأحدث. قم بالتحقق من الإصدار الذي تستخدمه وتحديثه إذا لزم الأمر.

    4. مراجعة السجلات والمعلومات التشخيصية: استخدم أدوات تشخيص SSL مثل OpenSSL للتحقق من الاتصال بين Nginx والخادم الخلفي وتحليل السجلات لمعرفة المزيد عن أي أخطاء محتملة.

    5. التواصل مع مزود الخدمة: إذا لم يكن بإمكانك حل المشكلة بنفسك، فاتصل بمزود الخدمة أو فريق الدعم الفني للحصول على المساعدة الإضافية في تشخيص وحل المشكلة.

    باعتبارك تقوم بتكوين خادم Nginx كوكيل عكسي، من المهم فهم كيفية التفاعل بين Nginx والخوادم الخلفية لضمان سلامة وأمان الاتصالات الآمنة. باستخدام الإرشادات المذكورة أعلاه، يمكنك بناء حل للمشكلة التي تواجهها وضمان استمرار تشغيل الخدمة بكفاءة وأمان.

    المزيد من المعلومات

    بالطبع، إليك المزيد من المعلومات حول المشكلة التي تواجهها وكيفية حلها:

    1. تحليل الرسائل الخطأ بالتفصيل: يمكن تحليل الرسائل الخطأ التي تظهر في سجلات Nginx بشكل مفصل لفهم السياق والمشكلة بشكل أعمق. في هذه الحالة، الخطأ الذي يظهر هو “SSL_do_handshake() failed” مع “tlsv1 alert internal error”، مما يشير إلى فشل عملية المصافحة الآمنة مع الخادم الخلفي.

    2. تحديد إصدار بروتوكول TLS: تأكد من أن إصدار بروتوكول TLS المستخدم على الخادم الخلفي متوافق مع إعدادات Nginx. في بعض الأحيان، قد تكون هناك مشاكل في التوافق بين إصدارات مختلفة من TLS، لذا تأكد من أن Nginx قادر على التواصل بنجاح مع الخادم الخلفي.

    3. اختبار اتصال SSL/TLS: يمكن استخدام أدوات الاختبار المتاحة عبر الإنترنت مثل SSL Labs لفحص جودة اتصال SSL/TLS وتحديد أي مشاكل محتملة في التوافق أو التكوين.

    4. تكوين بروتوكولات SSL/TLS المدعومة: تحقق من أن Nginx مكون بتكوين يتضمن دعم للبروتوكولات الآمنة والتشفير المتوافقة مع الخادم الخلفي. يمكنك تحديد البروتوكولات المدعومة باستخدام تعليمات SSL/TLS في ملف تكوين Nginx.

    5. تحليل حركة المرور: يمكن استخدام أدوات تحليل حركة المرور مثل Wireshark لتحليل التبادلات بين Nginx والخادم الخلفي لتحديد أي مشكلات في الاتصال أو التوافق.

    6. البحث عن مشكلة في الشهادة SSL: في بعض الحالات، يمكن أن تكون مشكلة في الشهادة SSL مسببة لمشكلة SSL_do_handshake() failed. تأكد من صحة وصلاحية شهادة SSL على الخادم الخلفي وتحديثها إذا لزم الأمر.

    7. تحديث Nginx والبرامج الأساسية: تأكد من أن Nginx وجميع البرامج الأساسية المستخدمة (مثل OpenSSL) محدثة إلى أحدث الإصدارات لضمان تصحيح أي ثغرات أمنية معروفة وتحسين الأداء بشكل عام.

    باستخدام هذه الخطوات، يمكنك التقدم في تشخيص وحل مشكلة SSL_do_handshake() failed التي تواجهها مع Nginx والخادم الخلفي الخاص بك، وضمان استمرار تشغيل خادم الويب بكفاءة وأمان.

  • تخزين ملفات ثابتة في Nginx

    بدايةً، يعتبر تخزين الملفات الثابتة في الذاكرة العشوائية (Cache) على Nginx واحدة من الاستراتيجيات الفعّالة لتحسين أداء خدمة الملفات الثابتة. في حالتك، حيث أن الملفات لن تتغير أبدًا أثناء تشغيل التطبيق، يمكن تحقيق هذا الهدف عن طريق تكوين Nginx لتخزين الملفات في الذاكرة العشوائية دائمًا.

    للقيام بذلك، يمكنك استخدام تكوين دائم للذاكرة العشوائية (memory) cache في Nginx باستخدام التوجيهات المناسبة في ملف تكوين Nginx. هناك عدة خطوات يمكن اتباعها لتحقيق هذا الهدف:

    أولاً، يجب تعريف منطقة cache في ملف تكوين Nginx. يمكنك فعل ذلك باستخدام التوجيه proxy_cache_path في ملف التكوين، وتحديد المسار الذي سيتم فيه تخزين الملفات المؤقتة في الذاكرة العشوائية.

    ثم، يتم تحديد إعدادات المنطقة المخصصة لذاكرة التخزين المؤقت، مثل حجم الذاكرة والمدة الزمنية لتخزين الملفات في الذاكرة.

    في هذه الحالة، يمكنك تحديد مدة التخزين المؤقت (max) بقيمة عالية أو حتى غير محدودة، مما يجعل Nginx يحتفظ بالملفات في الذاكرة العشوائية إلى الأبد، مما يحقق الغرض المطلوب من الأداء المحسن.

    إليك مثالًا على كيفية تكوين المنطقة المؤقتة في Nginx:

    bash
    http { proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { ... location /static { proxy_cache my_cache; proxy_cache_valid 200 301 302 304 3650d; # تخزين الملفات لمدة 10 سنوات proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; proxy_cache_lock on; proxy_pass http://backend_server; } } }

    في هذا المثال، تم تعريف منطقة cache بالاسم my_cache لتخزين الملفات الثابتة، مع تحديد مدة الاحتفاظ بالملفات في الذاكرة العشوائية (proxy_cache_valid) لمدة 10 سنوات. هذا يعني أن Nginx سيحتفظ بالملفات في الذاكرة العشوائية لفترة زمنية تصل إلى 10 سنوات، مما يضمن استمرار توفير الملفات من الذاكرة العشوائية بشكل دائم.

    عندما تقوم بتشغيل Nginx بهذا التكوين، ستلاحظ تحسينًا كبيرًا في أداء خدمة الملفات الثابتة، حيث ستتم قراءة الملفات مرة واحدة من القرص وتخزينها في الذاكرة العشوائية للاستخدام المستقبلي دون الحاجة إلى قراءتها من القرص مرة أخرى، مما يقلل من تأخير الوصول ويزيد من كفاءة الخدمة بشكل عام.

    المزيد من المعلومات

    بالطبع، سأقدم لك المزيد من المعلومات حول تخزين الملفات في الذاكرة العشوائية (Cache) على Nginx.

    عندما تقوم بتكوين Nginx لتخزين الملفات في الذاكرة العشوائية، هناك عدة جوانب يجب أخذها في الاعتبار:

    1. حجم الذاكرة المخصصة للتخزين المؤقت: يجب تحديد حجم مناسب للمساحة التخزينية في الذاكرة العشوائية المخصصة للتخزين المؤقت، باعتبار أن الذاكرة قد تكون محدودة. يجب أن يكون الحجم كافيًا لتخزين جميع الملفات الثابتة التي تُقدمها خدمة Nginx.

    2. إعدادات الاستبقاء (Cache Invalidation): يجب أن تكون على دراية بكيفية تحديث الملفات في الذاكرة العشوائية عندما يحدث تغيير في الملفات الأصلية على القرص. في حالتك حيث لا تتغير الملفات أبدًا، فلا داعي للقلق بشأن هذه الإعدادات، لكن في الحالات الأخرى يمكن أن يكون من الضروري تحديث الملفات المخزنة في الذاكرة العشوائية بانتظام.

    3. المدة الزمنية للتخزين المؤقت: يجب تحديد المدة التي ترغب في أن يحتفظ فيها Nginx بالملفات في الذاكرة العشوائية. في حالتك حيث ترغب في الاحتفاظ بالملفات إلى الأبد، يمكنك تعيين هذه المدة بقيمة عالية أو حتى غير محدودة.

    4. استخدام مفهوم الـ Cache Lock: يمكنك تعيين proxy_cache_lock على قيمة “on” لضمان أنه لن يتم استرجاع الملفات من الخادم الخلفي (backend server) في نفس الوقت عندما تكون هناك عملية كتابة إلى الملفات في الذاكرة العشوائية. هذا يساعد في تجنب حالات الاسترجاع المتزامن والتي قد تؤدي إلى تعارضات.

    5. تحديد المسار الصحيح للملفات الثابتة: يجب أن تتأكد من أن Nginx يقوم بتوجيه طلبات الملفات الثابتة إلى المنطقة المخصصة للتخزين المؤقت في الذاكرة العشوائية، وذلك باستخدام توجيهات مثل proxy_cache و proxy_pass.

    باستخدام هذه الإعدادات والتوجيهات الصحيحة، يمكنك تحقيق الهدف من تخزين الملفات في الذاكرة العشوائية على Nginx بشكل فعّال، مما يؤدي إلى تحسين كبير في أداء خدمة الملفات الثابتة وزيادة سرعة الاستجابة للطلبات من قبل العملاء.

  • كيفية الانتقال إلى HTTP/2 من وجهة نظر SEO

    كيفية الانتقال من HTTP/1.1 إلى HTTP/2 من وجهة نظر تحسين محركات البحث؟

    عند النقل من HTTP/1.1 إلى HTTP/2، هناك عدة عوامل يجب مراعاتها لضمان عدم تأثير سلبي على تصنيف موقعك في محركات البحث وعمليات فهرسة البوت. من أهم هذه العوامل:

    1. HTTPS:
      HTTP/2 يتطلب استخدام HTTPS. لذا، يجب تأمين موقعك بشهادة SSL/TLS. يتم ذلك من خلال تثبيت شهادة SSL/TLS على الخادم الذي يستضيف موقعك.

    2. توجيه الطلبات:
      يجب تعديل إعدادات الخادم (مثل Nginx أو Apache) لتوجيه جميع طلبات HTTP إلى HTTPS. هذا يمكن أن يتم عن طريق إعدادات التوجيه في ملفات الخادم الخاصة بك.

    3. دعم HTTP/2:
      تأكد من أن الخادم الذي تستخدمه يدعم HTTP/2. في حالة Nginx، يجب أن تقوم بتحديث نسختك من Nginx لدعم HTTP/2.

    4. التحقق من أداء الموقع:
      بعد تنفيذ التغييرات، قم بفحص أداء موقعك باستخدام أدوات تحليل الأداء مثل Google PageSpeed Insights للتأكد من عدم تأثير الانتقال على سرعة التحميل وتجربة المستخدم.

    5. مراقبة التصنيف والفهرسة:
      بعد التحول إلى HTTP/2، قم بمراقبة تصنيف موقعك في محركات البحث وعمليات فهرسة البوت للتأكد من عدم وجود أي تأثير سلبي على رؤية موقعك من قبل محركات البحث.

    6. موثوقية الخادم:
      تأكد من أن خادمك قادر على التعامل مع الحمولة الإضافية التي قد تأتي مع استخدام HTTP/2. قد تحتاج إلى زيادة قدرات الخادم الخاص بك إذا كان ذلك ضروريًا.

    باستخدام هذه الخطوات ومراعاة النقاط المذكورة أعلاه، يمكنك الانتقال من HTTP/1.1 إلى HTTP/2 بدون تأثير سلبي على تصنيف موقعك في محركات البحث وعمليات فهرسة البوت.

    المزيد من المعلومات

    بالطبع! إليك بعض المعلومات الإضافية حول التحول إلى HTTP/2 من وجهة نظر تحسين محركات البحث:

    1. سرعة التحميل:
      واحدة من أكبر الفوائد لـ HTTP/2 هي زيادة سرعة التحميل، وهذا يمكن أن يؤدي إلى تحسين تصنيف موقعك في محركات البحث. HTTP/2 يسمح بتحميل الموارد بشكل متوازي، مما يعني أن المواقع التي تستخدم HTTP/2 قد تظهر بشكل أسرع للمستخدمين.

    2. المحتوى المخصص:
      يُعتبر توفير محتوى مخصص للمستخدمين من أفضل الممارسات في تحسين تصنيف موقعك في محركات البحث. يمكنك استخدام قدرات HTTP/2 في تحميل المحتوى بشكل أسرع لتحسين تجربة المستخدم وبالتالي تصنيف موقعك.

    3. التوافق مع الأجهزة المحمولة:
      مع زيادة استخدام الأجهزة المحمولة للوصول إلى الإنترنت، يمكن أن يكون استخدام HTTP/2 مفيدًا لتحسين تجربة المستخدم على الهواتف الذكية والأجهزة اللوحية، وبالتالي تحسين تصنيف موقعك في محركات البحث.

    4. التجربة الشاملة للمستخدم:
      توفير تجربة استخدام سلسة وسريعة للمستخدمين يمكن أن يؤدي إلى زيادة مدة البقاء على الموقع وتقليل معدل التركيب، وهذا يعتبر عاملًا مهمًا في تحسين تصنيف موقعك في محركات البحث.

    5. معالجة الصور والملفات:
      يمكن استخدام HTTP/2 في تحميل الصور والملفات الأخرى بشكل أسرع، مما يعني أنه يمكنك تقديم محتوى أكثر جاذبية للمستخدمين دون التأثير السلبي على سرعة التحميل.

    باستخدام هذه الإستراتيجيات والنصائح، يمكنك تحسين تصنيف موقعك في محركات البحث بعد التحول إلى HTTP/2.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر