تحسين اعدادات إنجن إكس لمواقع الويب عالية الزيارات

use of Nginx to optimize the website's performance under high traffic debian ubuntu

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

افهم أنماط حركة الزيارات الخاصة بك

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

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

تحسين أجهزة الخادم الخاصة بك

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

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

تحسين إعدادات Nginx الخاص بك

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

ملاحظة:
يمكنك العثور على ملفات الإعدادات في /etc/nginx/nginx.conf للإعدادات العام
ويجب أن تكون إعدادات مواقعك في /etc/ngnix/sites-enabled/
تأكد من إعادة تشغيل/إعادة تحميل Nginx بعد تغيير إعداداتك:

إعادة تشغيل الخادم بدون توقف:

$ sudo ngnix -s reload

إعادة تشغيل خادم nginx:

$ sudo systemctl restart nginx

زيادة عدد عمليات العمال ووصلاتهم

لزيادة عدد عمليات واتصالات العمال، يمكنك إضافة التوجيهات التالية إلى ملف إعدادات Nginx الخاص بك:

worker_processes auto;
worker_rlimit_nofile 100000;
events {
    worker_connections 100000;
}
  • worker_processes: يحدد هذا التوجيه عدد عمليات العمال. تخبر القيمة «التلقائية» Nginx بتحديد العدد الأمثل لعمليات العمال تلقائيًا بناء على عدد نوى وحدة المعالجة المركزية المتاحة.
  • worker_rlimit_nofile: يحدد هذا التوجيه الحد الأقصى لعدد واصفات الملفات التي يمكن لكل عملية عامل فتحها. يجب تعيين هذه القيمة عالية بما يكفي لاستيعاب عدد الاتصالات التي يتعامل معها الخادم.
  • events: تحدد هذه الكتلة آلية التعامل مع الحدث التي يستخدمها Nginx. يحدد توجيه worker_connections الحد الأقصى لعدد الاتصالات التي يمكن لكل عملية عامل التعامل معها.

استخدم ضغط Gzip

لتمكين ضغط Gzip، يمكنك إضافة التوجيه التالي إلى ملف إعدادات Nginx الخاص بك:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  • gzip: يتيح هذا التوجيه ضغط Gzip.
  • gzip_types: يحدد هذا التوجيه أنواع MIME من الملفات التي يجب ضغطها. يحدد المثال أعلاه أنواع الملفات الشائعة القائمة على النص بالإضافة إلى ملفات JSON و JavaScript.

Use Caching

لتمكين التخزين المؤقت، يمكنك استخدام وحدة التخزين المؤقت المدمجة من Nginx أو وكيل التخزين المؤقت مثل Varnish. فيما يلي مثال على تمكين التخزين المؤقت بجانب الخادم باستخدام وحدة التخزين المؤقت المدمجة من Nginx:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
    ...
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 60m;
        proxy_cache_valid any 10m;
        ...
    }
}
  • proxy_cache_path: يحدد هذا التوجيه المسار والمعايير للمخبأ.
  • proxy_cache: يتيح هذا التوجيه التخزين المؤقت للموقع المحدد.
  • proxy_cache_valid: يحدد هذا التوجيه صحة الردود المخبأة. في المثال أعلاه، يتم تخزين الردود برمز الحالة 200 لمدة 60 دقيقة، ويتم تخزين جميع الردود الأخرى لمدة 10 دقائق.

استخدم تشفير SSL/TLS

لتمكين تشفير SSL/TLS، يمكنك استخدام المثال التالي:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;
    ...
}
  • listen: يحدد هذا التوجيه منفذ الاستماع والبروتوكول. في هذا المثال، 443 هو منفذ HTTPS.
  • server_name: يحدد هذا التوجيه اسم المضيف الذي يستجيب له الخادم.
  • ssl_certificate: يحدد هذا التوجيه المسار إلى ملف شهادة SSL/TLS.
  • ssl_certificate_key: يحدد هذا التوجيه المسار إلى SSL/TLS ملف المفتاح الخاص.

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

استخدم HTTP/2

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

server {
    listen 443 ssl http2;
    ...
}
  • http2: ويتيح هذا التوجيه HTTP/2 الدعم.

تحسين إعدادات SSL/TLS

يمكنك تحسين إعدادات SSL/TLS الخاص بك باستخدام التشفير الحديث، وتعطيل البروتوكولات غير الآمنة، وتمكين السرية إلى الأمام. فيما يلي مثال على ذلك:

ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_dhparam /path/to/dhparam.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
  • ssl_protocols: يحدد هذا التوجيه بروتوكولات SSL/TLS للاستخدام. في هذا المثال، يسمح فقط TLS 1.2.
  • ssl_prefer_server_ciphers: يخبر هذا التوجيه الخادم باستخدام التشفير المفضل بدلاً من التشفير المفضل لدى العميل.
  • ssl_ciphers: يحدد هذا التوجيه قائمة الشفرات للاستخدام. يحدد المثال أعلاه قائمة من الشفرات القوية التي توفر السرية الأمامية المثالية (PFS).
  • ssl_dhparam: يحدد هذا التوجيه المسار إلى ملف معلمات Diffie-Hellman (DH). هذا ضروري لتمكين PFS.
  • ssl_session_cache: يحدد هذا التوجيه ذاكرة التخزين المؤقت لجلسة SSL. يستخدم المثال أعلاه ذاكرة تخزين مؤقت مشتركة يمكنها استيعاب ما يصل إلى 10 ميغا بايت من البيانات.
  • ssl_session_timeout: يحدد هذا التوجيه الحد الأقصى للوقت الذي يمكن فيه إخفاء الجلسة.
  • ssl_stapling: يتيح هذا التوجيه تدبيس SSL، والذي يسمح للخادم بتقديم استجابة OCSP موقعة وموقوتة جنبًا إلى جنب مع شهادته.
  • ssl_stapling_verify: يخبر هذا التوجيه الخادم بالتحقق من استجابة OCSP من العميل.
  • resolver: يحدد هذا التوجيه عنوان IP لحاسم DNS المستخدم للتحقق من صحة OCSP.

استخدم FastCGI Caching

يمكن استخدام تخزين FastCGI لتخزين المحتوى الديناميكي الذي تخدمه تطبيقات FastCGI. فيما يلي مثال على ذلك:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
    ...
    location / {
        fastcgi_pass unix:/path/to/fastcgi.sock;
        include fastcgi_params;
        fastcgi_cache my_cache;
        fastcgi_cache_valid 200 60m;
        fastcgi_cache_valid any 10m;
        ...
    }
}
  • fastcgi_cache_path: يحدد هذا التوجيه المسار والمعايير cache.
  • fastcgi_pass: يحدد هذا التوجيه عنوان تطبيق FastCGI.
  • fastcgi_cache: يتيح هذا التوجيه التخزين المؤقت للموقع المحدد.
  • fastcgi_cache_valid: يحدد هذا التوجيه صحة الردود المخبأة. في المثال أعلاه، يتم تخزين الردود برمز الحالة 200 لمدة 60 دقيقة، ويتم تخزين جميع الردود الأخرى لمدة 10 دقائق.

ضبط PHP-FPM إعدادات

يحتوي PHP-FPM على عدد من إعدادات التي يمكنك ضبطها لتحسين الأداء. توجد هذه الإعدادات عادةً في ملف php-fpm.conf أو ملف www.conf، اعتمادًا على التثبيت الخاص بك.

فيما يلي بعض الإعدادات التي قد تفكر في ضبطها:

  • pm.max_children: يتحكم هذا الإعداد في العدد الأقصى لعمليات PHP التي يمكن تشغيلها في وقت واحد. يمكن أن تساعد زيادة هذه القيمة في التعامل مع المزيد من الطلبات المتزامنة، ولكنها تستهلك أيضًا المزيد من الموارد.
  • pm.start_servers: يتحكم هذا الإعداد في عدد عمليات PHP التي تبدأ عند إطلاق PHP-FPM لأول مرة. يمكن أن تساعد زيادة هذه القيمة في تقليل زمن الوصول للطلبات القليلة الأولى.
  • pm.min_spare_servers و pm.max_spare_servers: تتحكم هذه الإعدادات في الحد الأدنى والحد الأقصى من عمليات PHP الخاملة التي يجب أن تستمر في العمل للتعامل مع الطلبات الواردة.
  • pm.max_requests: يتحكم هذا الإعداد في عدد الطلبات التي يمكن لكل عملية PHP التعامل معها قبل إنهائها. يمكن أن يساعد هذا في منع تسرب الذاكرة ومشاكل أخرى.

استخدم Opcode Caching

يمكن أن يؤدي تشفير الرموز إلى تحسين أداء PHP بشكل كبير من خلال تخزين الرمز bytecode المجمع لنصوص PHP، وتقليل الوقت الذي يستغرقه تنفيذها. هناك العديد من ملحقات رموز التشفير المتاحة لـ PHP، بما في ذلك APCu و OpCache و XCache.

لاستخدام الكود مع PHP-FPM، تحتاج إلى إعداده في ملف php.ini. إليك مثال إعدادات لـ OpCache:

[opcache]
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.revalidate_freq=60
[PHP]
max_execution_time = 60
memory_limit = 512M
post_max_size = 100M
upload_max_filesize = 100M
max_input_vars = 10000
  • opcache.enable: يتيح هذا المعامل تمديد OpCache. اضبطه على 1 لتمكين OpCache.
  • opcache.memory_consumption: يحدد هذا المعامل كمية الذاكرة التي سيستخدمها OpCache لتخزين bytecode المجمعة. القيمة الافتراضية 64MB، ولكن قد تحتاج إلى زيادتها اعتمادًا على حجم تطبيقك. في هذا المثال، وضعناه على 256MB.
  • opcache.max_accelerated_files: يحدد هذا المعامل الحد الأقصى لعدد الملفات التي يمكن تخزينها في ذاكرة التخزين المؤقت. افتراضيًا، تم ضبطه على 2000، ولكن قد تحتاج إلى زيادته إذا كان لديك عدد كبير من ملفات PHP. في هذا المثال، قمنا بتعيين 10000.
  • opcache.validate_timestamps: يحدد هذا المعامل ما إذا كان OpCache سيتحقق من الطوابع الزمنية لملفات PHP لمعرفة ما إذا كان قد تم تعديلها منذ آخر مرة تم تخزينها. افتراضيًا، تم ضبطه على «1»، مما يعني أن OpCache سيتحقق من الطوابع الزمنية. ومع ذلك، قد يكون التحقق من الطوابع الزمنية مكلفًا، لذلك يوصى بضبطه على «0» في بيئات الإنتاج حيث لا تتغير الملفات بشكل متكرر.
  • opcache.revalidate_freq: يحدد هذا المعامل عدد المرات التي سيتحقق فيها OpCache من الطوابع الزمنية لملفات PHP عندما opcache.validate_timestamps تم ضبطه على 1. القيمة في ثواني، والافتراضي هو 2 ثانية. في هذا المثال، قمنا بضبطه على 60 ثانية، مما يعني أن OpCache سيتحقق من الطوابع الزمنية مرة واحدة كل دقيقة.

بعض الإعدادات الإضافية التي يمكن أن تحسن أداء PHP لموقع ويب عالي الزيارات.

  • max_execution_time: يتحكم هذا الإعداد في الحد الأقصى من الوقت (في ثوانٍ) الذي يمكن أن يعمل به برنامج PHP قبل أن يتم إنهاؤه. بالنسبة لموقع ويب عالي الزيارات، قد ترغب في تعيين هذه القيمة على 60 أو أعلى، اعتمادًا على احتياجات طلبك.
  • memory_limit: يتحكم هذا الإعداد في كمية الذاكرة التي يمكن لـ PHP استخدامها. بالنسبة لموقع ويب عالي الزيارات، قد ترغب في ضبط هذه القيمة على 512M أو أعلى، اعتمادًا على حجم وتعقيد تطبيقك.
  • post_max_size و upload_max_filesize: تتحكم هذه الإعدادات في الحجم الأقصى لبيانات POST والملفات المحملة، على التوالي. بالنسبة لموقع ويب عالي الزيارات يتعامل مع الملفات أو البيانات الكبيرة، قد ترغب في ضبط هذه القيم على 100 مليون أو أعلى.
  • max_input_vars: يتحكم هذا الإعداد في الحد الأقصى لعدد متغيرات الإدخال التي يمكن لـ PHP التعامل معها. بالنسبة لموقع ويب عالي الزيارات يتعامل مع النماذج المعقدة أو بيانات الإدخال، قد ترغب في تعيين هذه القيمة إلى 10000 أو أعلى.

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

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

خلاصة

يعد تحسين إعداد Nginx لمواقع الويب عالية الزيارات أمرًا بالغ الأهمية لتقديم تجربة مستخدم سلسة وموثوقة. من خلال ضبط الإعدادات مثل أجهزة الخادم وإعدادات Nginx وإعدادات PHP-FPM وترميز Opcode، يمكنك تحسين أداء موقع الويب في ظل الزيارات الكثيفة. ومع ذلك، لا يوجد نهج واحد يناسب الجميع لتحسين إعداد Nginx، ومن الضروري مراقبة أداء موقع الويب الخاص بك وضبط الإعدادات بانتظام لتحقيق الأداء الأمثل. من خلال التحسينات والمراقبة الصحيحة، يمكنك التأكد من أن موقع الويب الخاص بك يمكنه التعامل مع أحجام الزيارات العالية وتوفير تجربة سريعة وموثوقة لمستخدميك.

LEAVE A COMMENT