في هذه المقالة، سنتناول أسباب زيادة تحميل الخادم، ونناقش طرقًا مختلفة لتحسين العمليات عالية التحميل. سنركز بشكل خاص على تحسين الكود في Apache/Nginx وMySQL، وسنتحدث عن التخزين المؤقت كأداة مساعدة، ونتناول أيضًا التهديدات الخارجية المحتملة، مثل هجمات الحرمان من الخدمة الموزعة (DDOS)، وسبل الوقاية منها.
لماذا يحدث تحميل الخادم
قبل الشروع في تحسين الخادم، من الضروري إجراء تحليل شامل للحمل الحالي على الموارد. يشمل ذلك قياس حمل وحدة المعالجة المركزية، واستخدام ذاكرة الوصول العشوائي (RAM)، ونشاط الشبكة، وغيرها من المعايير الرئيسية. يتيح فهم ديناميكيات العمل وأحمال الذروة تحديد الاختناقات وتحسين تخصيص الموارد، مما يعزز استقرار وأداء البنية التحتية للخادم.
لاستكشاف الأخطاء وإصلاحها في البداية بسبب التحميل العالي للخادم، نوصي بإجراء تشخيصات الخادم العامةإذا لم يكن هذا كافيًا، فيجب تقديم عرض أكثر تفصيلاً. تحليل الموارد ضروري. كأداة مساعدة، استكشاف سجلات لينكس يمكن أن يكون الخادم مفيدًا، حيث أن هذا هو المكان الذي يوجد فيه مصدر المشكلة في معظم الحالات.
تحسين خادم Apache/Nginx
زيادة تحميل الخادم بسبب الفهرسة
قد يحدث زيادة في التحميل بسبب الفهرسة على الخادم، على سبيل المثال، عندما تفحص محركات البحث عددًا كبيرًا من صفحات موقعك. قد يؤدي ذلك إلى زيادة استخدام موارد الخادم، وبالتالي إبطاء أداء الموقع. تحديد السبب بسيط نسبيًا؛ ما عليك سوى فتح الملف الموجود في:
/var/www/httpd-logs/sitename.access.log
عند فهرستها بواسطة محركات البحث، سيشاهد المستخدم الإدخالات ذات الطبيعة التالية:
11.22.33.44 - - [Date and Time] "GET /your-page-path HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
كحل أولي لتقليل الحمل، يمكنك استخدام إعداد علامات التعريف الوصفية "عدم الفهرسة" و "لا يتبع" على الصفحات التي لا تحتاج إلى فهرسة. الحل الثاني هو . هتكس ملف، حيث يلزم إضافة الإدخالات المقابلة لمحركات البحث المحددة، على سبيل المثال، لإخفائها عن Yandex وGoogle:
SetEnvIfNoCase User-Agent "^Yandex" search_bot
SetEnvIfNoCase User-Agent "^Googlebot" search_bot
Order Allow,Deny
Allow from all
Deny from env=search_bot
وبالمثل، يجب إجراء تعديلات على محركات البحث الأخرى. تجدر الإشارة إلى أن إمكانيات ملف .htaccess لا تقتصر على منع الفهرسة فحسب. ننصحك بالتعرف على ميزاته الرئيسية في البند.
استخدام إعدادات التخزين المؤقت
قد تؤدي إعدادات التخزين المؤقت غير الصحيحة على الخادم إلى تحميل زائد. لتحسين هذه المعلمة، يجب إجراء التغييرات اللازمة في ملفات التكوين أو . هتكسفي حالة Apache، الخيار الأخير هو الأفضل، أما بالنسبة لـ Nginx، فالخيار الأول هو الأفضل.
على أباتشي الخادم، تحتاج إلى فتح .htacess الملف وإدراج الكود التالي:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
ثم قم بتمكين تنتهي الوحدة النمطية باستخدام الأمر:
sudo a2enmod expires
بعد ذلك، أعد تشغيل خادم الويب:
sudo service apache2 restart
وتفعيل الوحدة عن طريق تحديد:
ExpiresActive On
على إنجن إكس الخادم، يكفي إضافة الكود التالي إلى ملف التكوين:
location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}
وأداء إعادة تحميل الخدمة:
sudo service nginx restart
لاحظ أنه مع هذه الإعدادات، السماح و تنكر سيتم تجاوز التوجيهات.
استخدام ضغط البيانات
تمكين ضغط البيانات باستخدام غزيب يساعد استخدام خادمي الويب Apache وNginx على تقليل كمية البيانات المنقولة بين الخادم والعميل، مما يحسن الأداء ويقلل وقت تحميل صفحة الويب.
للتمكين غزيب on أباتشي، تحتاج إلى تنشيط تعديل_انكماش وحدة:
sudo a2enmod deflate
ثم أعد تشغيل خادم الويب:
sudo service apache2 restart
وأخيرًا، أضف الكتلة التالية إلى ملف التكوين أو .htaccess:
<IfModule mod_deflate.c>
# Configure compression for specified file types
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json
# If the browser matches the specified pattern, apply compression only to text/html files
BrowserMatch ^Mozilla/4 gzip-only-text/html
# If the browser matches the specified version patterns of Mozilla 4.0.6, 4.0.7, 4.0.8, disable compression
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# If the browser is MSIE (Internet Explorer), disable compression for all files except text/html
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# If the request contains the specified pattern (extensions of image files), disable compression
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
</IfModule>
يتيح هذا التكوين الضغط لأنواع معينة من الملفات ويعطله بالنسبة للصور.
في حالة إنجن إكس، يحدث التكوين في HTTP كتلة من ملف التكوين. يجب إضافة الكود التالي:
gzip on;
gzip_disable "msie6";
# Adds the Vary header, indicating that the response may change depending on the Accept-Encoding header value
gzip_vary on;
# Enables compression for any proxy servers
gzip_proxied any;
# Sets the compression level. A value of 6 provides a good balance between compression efficiency and resource use
gzip_comp_level 6;
# Sets the size of the buffer for compressed data (16 buffers of 8 kilobytes each)
gzip_buffers 16 8k;
# Specifies that data compression should be used only for HTTP version 1.1 and higher
gzip_http_version 1.1;
# Sets the file types that can be compressed
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
على غرار أباتشيهنا، يتم ضبط معلمات الضغط لأنواع معينة من الملفات. بعد إجراء أي تغييرات على أيٍّ من خوادم الويب، يلزم إعادة تحميل الخدمة:
sudo service apache2 restart
Or
sudo service nginx restart
هجوم DDOS على الخادم
قد يحدث تحميل مرتفع على الخادم نتيجةً لهجوم حجب الخدمة الموزع (DDoS). يمكن تحديد وجود هجوم حجب الخدمة الموزع من خلال رصد الزيادة المفاجئة في حركة البيانات، والطلبات غير الطبيعية، وانخفاض أداء الخادم. كما أن مراجعة سجلات الطلبات المتكررة من عنوان IP واحد أو فحص المنفذ قد يشير إلى احتمالية وجود هجوم حجب خدمة موزع. هناك العديد من إجراءات الحماية، لكننا سنناقش الأساسيات فقط.
استخدام شبكة توصيل المحتوى (CDN)يمكن لشبكة CDN أن تعمل كوسيط بين خادم الويب والمستخدمين، حيث تقوم بتوزيع حركة المرور وتخزين المحتوى مؤقتًا لتخفيف آثار هجمات DDoS. كما يمكن أن تتضمن شبكات CDN آليات حماية مدمجة ضد هجمات DDoS، بما في ذلك توزيع الحمل وتصفية حركة المرور.
تكوين جدران الحماية وأنظمة كشف التطفل (IDS/IPS)يمكن تهيئة جدران الحماية لتصفية حركة المرور بناءً على معايير مختلفة، مثل عناوين IP والمنافذ. يستطيع نظام كشف التسلل (IDS/IPS) اكتشاف سلوك حركة المرور غير الطبيعي وحظر الاتصالات المشبوهة. هذه الأدوات فعّالة في تتبع وحظر حركة المرور الضارة المحتملة.
تكوين خوادم الويب Apache و Nginx للتخفيف من تأثير هجمات DDoS.
كحل لـ Apache، نقوم بتمكين mod_evasive الوحدة النمطية. للقيام بذلك، قم بإلغاء التعليق أو إضافة السطر التالي في httpd.conf و or apache2.conf ملف الضبط:
LoadModule evasive20_module modules/mod_evasive.so
في نفس الملف، تحتاج إلى إضافة كتلة الإعدادات:
<IfModule mod_evasive20.c>
# Hash table size for storing request information
DOSHashTableSize 3097
# Number of requests to one page before activating protection
DOSPageCount 2
DOSPageInterval 1
# Number of requests to all pages before activating protection
DOSSiteCount 50
DOSSiteInterval 1
# Blocking period in seconds for IP addresses
DOSBlockingPeriod 10
</IfModule>
وبالمثل، نقوم بتنشيط حد معدل التعديل وحدة:
LoadModule ratelimit_module modules/mod_ratelimit.so
وأضف التكوين:
<IfModule mod_ratelimit.c>
# Setting the output filter for rate limiting (Rate Limit)
SetOutputFilter RATE_LIMIT
# Beginning of the settings block for the location "/login"
<Location "/login">
# Setting the environment variable rate-limit with a value of 1
SetEnv rate-limit 1
# Ending of the settings block for the location "/login"
</Location>
</IfModule>
التكوين ل إنجن إكس يشبه أباتشي. في nginx.conf ملف التكوين، يجب استخدام التوجيهات التالية:
http {
...
# Defining a zone for connection limits
limit_conn_zone $binary_remote_addr zone=addr:10m;
# Defining a zone for request limits
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
server {
...
# Configuring connection limits
limit_conn addr 10;
# Configuring request limits
limit_req zone=req_zone burst=5;
...
}
}
بعد إجراء التغييرات على كل الخدمات، يجب إعادة تحميلها:
sudo systemctl restart apache2
أو:
sudo systemctl restart nginx
توفر هذه الأمثلة تكوينًا أساسيًا فقط، والذي يمكن تعديله بشكل أكبر اعتمادًا على المتطلبات المحددة وطبيعة الهجمات.
تحسين استعلامات MySQL
يمكن تحسين استعلامات قاعدة بيانات MySQL على خادم الويب بطرق مختلفة، منها التهيئة الصحيحة لملف التهيئة. عادةً ما يُسمى هذا الملف my.cnf or my.ini ويقع في /إلخ/ or /إلخ/mysql/ الدليل. عليك فتحه وإجراء التغييرات التالية:
[mysqld]
# Location of the file for recording slow queries. Be sure to replace it with your path
log-slow-queries = /var/log/mariadb/slow_queries.log
# Threshold time for considering slow queries (in seconds)
long_query_time = 5
# Enabling recording of queries that do not use indexes
log-queries-not-using-indexes = 1
# Disabling query caching
query_cache_size = 0
query_cache_type = 0
query_cache_limit = 1M
# Size of temporary tables
tmp_table_size = 16M
max_heap_table_size = 16M
# Size of the thread cache
thread_cache_size = 16
# Disabling name resolving
skip-name-resolve = 1
# Size of the InnoDB buffer pool. Set to 50-70% of available RAM
innodb_buffer_pool_size = 800M
# Size of the InnoDB log file
innodb_log_file_size = 200M
دعونا أيضًا نفكر في التوصيات الإضافية التي يمكن أن تسهل التفاعل مع قاعدة بيانات الخادم:
- استخدم شرح أمر قبل استعلام SQL لتحليل تنفيذه. يتيح لك هذا الحصول على خطة تنفيذ للاستعلام وتحديد الفهارس المستخدمة والجداول التي سيتم مسحها ضوئيًا، إلخ.
- تُسرّع الفهارس البحث عن البيانات، لذا فإن الفهارس المُصممة جيدًا تُحسّن أداء الاستعلام بشكل ملحوظ. انتبه للأعمدة المُستخدمة بكثرة في WHERE or الانضمام الظروف.
- تجنب استخدام تحديد *. حدد فقط الأعمدة الضرورية حقًا لاستعلامك، بدلاً من تحديد كل الأعمدة في جدول.
- تجنب استخدام الوظائف في WHERE الشروط. باستخدام الدوال (مثل LOWER, أعلى, لليسار, يمين) باستخدام WHERE قد تجعل الشروط الفهارس عديمة الفائدة. حاول تجنب استخدامها مباشرةً في الشروط.
- استعمل INNER JOIN كلما أمكن، فهو عادةً أكثر فعالية. تأكد أيضًا من وجود فهارس للأعمدة المقابلة للربط.
- استعمل مما سيحدث لتقييد عدد الصفوف المرتجعة إذا كنت تريد الحصول على عدد معين فقط من النتائج.
- خذ بعين الاعتبار تخزين نتائج الاستعلام مؤقتًا، خاصةً إذا كانت تتغير نادرًا، لتقليل تحميل الخادم.
يُنشئ خادم البريد حمولة عالية على الخادم
في هذا القسم، سنستكشف كيفية تحديد ما إذا كان خادم البريد يعاني من حمل مرتفع، والخطوات التي يمكن اتخاذها لتحسين عمله، بما في ذلك التحقق من قائمة انتظار الرسائل وتكوين معلمات الخادم. ابدأ بالتحقق من قائمة انتظار الرسائل. mailq يمكن أن تساعدك الأداة المساعدة في هذا، لتنشيطها، أدخل الأمر المقابل في المحطة الطرفية:
mailq
سيعرض هذا قائمة بالرسائل الموجودة في قائمة الانتظار، إن وُجدت. ستُعرض كل رسالة مع مُعرّفها الفريد ومعلومات حول حالة الإرسال. يمكن الحصول على نتيجة مماثلة بمراجعة سجلات عميل البريد.
في معظم الحالات، يحدث ضغط كبير على الخادم عند بدء إرسال البريد العشوائي. ومع ذلك، إذا تأكد المسؤول، بعد التحقق، من عدم تعرض الخادم لهجوم خارجي وأن المستخدمين لا يتجاهلون البريد العشوائي، فقد حان الوقت لتحسين خادم البريد. إليك الخطوات التي ستساعدك:
- تأكد من تكوين سجلات DNS الخاصة بنطاقك بشكل صحيح، بما في ذلك عامل حماية من الشمس, DKIMو DMARC لتحسين تسليم البريد والحماية من البريد العشوائي. يمكنك الاطلاع على الإعدادات الصحيحة للمعلمات في المقالة تشخيصات خادم البريد.
- تحقق من إعدادات الشبكة، بما في ذلك تكوين جدار الحماية وقواعد التوجيه، لتجنب الحظر وتسريع تسليم البريد.
- ضبط معلمات قائمة انتظار الرسائل وفقًا لحمل الخادم. قد يشمل ذلك تحديد الحد الأقصى لحجم قائمة الانتظار ومواعيد انتهاء الخدمة.
- فكّر في الحلول التي ناقشناها سابقًا في هذه المقالة. حسّن قاعدة بيانات خادم البريد الإلكتروني دوريًا لتحسين الأداء، واستخدم آليات التخزين المؤقت لتسريع البحث عن البيانات ومعالجتها، مثل استعلامات DNS.
- إذا كان خادم البريد الإلكتروني لا يزال يواجه تحميلًا مرتفعًا بشكل منتظم، ففكر في خيارات التوسع، مثل استخدام مجموعة من خوادم البريد الإلكتروني أو الحلول السحابية.
خاتمة
يؤثر ارتفاع تحميل الخادم بشكل مباشر على سرعة تحميل الموقع الإلكتروني، مما يؤثر في نهاية المطاف على تجربة المستخدم وسمعته في محركات البحث. لذا، فإن الإدارة الفعّالة لهذا الحمل تلعب دورًا أساسيًا في ضمان استمرارية عمل الموقع وزيادة إمكانية وصول الزوار إليه.