Ushbu maqolada biz nima uchun server yukining ko'payishini ko'rib chiqamiz va yuqori yuklanish jarayonlarini optimallashtirishning turli usullarini muhokama qilamiz. Apache/Nginx va MySQL-da kodni optimallashtirishga alohida e'tibor beriladi, biz yordamchi vosita sifatida keshlash haqida gaplashamiz, shuningdek, DDOS hujumlari kabi mumkin bo'lgan tashqi tahdidlar va ularni oldini olish usullarini ko'rib chiqamiz.
Nima uchun server yuki paydo bo'ladi
Serverni optimallashtirishga o'tishdan oldin, resurslarga joriy yukni to'liq tahlil qilish kerak. Bunga CPU yukini, RAMdan foydalanishni, tarmoq faolligini va boshqa asosiy parametrlarni o'lchash kiradi. Dinamikani va eng yuqori yuklarni tushunish qiyinchiliklarni aniqlash va resurslarni taqsimlashni optimallashtirish imkonini beradi, shu bilan server infratuzilmasi barqarorligi va unumdorligini oshiradi.
Yuqori server yuki bilan bog'liq muammolarni dastlabki bartaraf qilish uchun biz quyidagilarni o'tkazishni tavsiya qilamiz umumiy server diagnostikasi. Agar bu etarli bo'lmasa, batafsilroq resurslarni tahlil qilish zarur. Yordamchi vosita sifatida, o'rganish Linux jurnallari server foydali bo'lishi mumkin, chunki bu erda muammoning manbai ko'p hollarda topiladi.
Apache/Nginx serverini optimallashtirish
Indekslash tufayli server yukining ortishi
Serverda indeksatsiya tufayli yukning ortishi, masalan, qidiruv tizimlari saytingizdagi ko'p sonli sahifalarni skanerlashda paydo bo'lishi mumkin. Bu server resurslaridan foydalanishning ko'payishiga va natijada sayt ishini sekinlashishiga olib kelishi mumkin. Buning sababini aniqlash nisbatan oddiy; quyidagi manzilda joylashgan faylni ochishingiz kerak:
/var/www/httpd-logs/sitename.access.log
Qidiruv tizimlari tomonidan indekslanganida, foydalanuvchi quyidagi xarakterdagi yozuvlarni ko'radi:
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)"
Yukni kamaytirish uchun birinchi yechim sifatida siz meta teglar sozlamalaridan foydalanishingiz mumkin "noindex" va "nofollow" indekslanishi shart bo'lmagan sahifalarda. Ikkinchi yechim - bu .htaccess fayl, bu erda ma'lum qidiruv tizimlariga mos keladigan yozuvlar qo'shilishi kerak, masalan, Yandex va Google'dan yashirish uchun:
SetEnvIfNoCase User-Agent "^Yandex" search_bot
SetEnvIfNoCase User-Agent "^Googlebot" search_bot
Order Allow,Deny
Allow from all
Deny from env=search_bot
Xuddi shunday, boshqa qidiruv tizimlari uchun ham tahrir qilish kerak. Shuni ta'kidlash kerakki, .htaccess imkoniyatlari faqat indekslashni blokirovka qilish bilan cheklanmaydi. Uning asosiy xususiyatlari bilan ko'proq tanishishni tavsiya qilamiz Maqola.
Keshlash sozlamalaridan foydalanish
Serverdagi noto'g'ri keshlash sozlamalari ham yuqori yuklanishga olib kelishi mumkin. Ushbu parametrni optimallashtirish uchun konfiguratsiya fayllarida tegishli o'zgarishlar yoki .htaccess. Apache bo'lsa, ikkinchi variant afzalroq, Nginx uchun - birinchisi.
Bir Apache serverni ochishingiz kerak .htacess fayl va quyidagi kodni kiriting:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Keyin, ni yoqing Muddati tugaydi buyruq yordamida modul:
sudo a2enmod expires
Shundan so'ng veb-serverni qayta ishga tushiring:
sudo service apache2 restart
Va modulni ko'rsatib faollashtiring:
ExpiresActive On
a kuni nginx serverda konfiguratsiya fayliga quyidagi kodni qo'shish kifoya:
location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}
Va xizmatni qayta yuklashni amalga oshiring:
sudo service nginx restart
E'tibor bering, ushbu sozlamalar bilan ruxsat berish va Rad etish direktivalar chetlab o'tiladi.
Ma'lumotlarni siqishni ishlatish
yordamida ma'lumotlarni siqishni yoqish Gzip Apache va Nginx veb-serverlarida server va mijoz o'rtasida uzatiladigan ma'lumotlar miqdorini kamaytirishga yordam beradi, bu esa ish faoliyatini yaxshilaydi va veb-sahifani yuklash vaqtini qisqartiradi.
Yoqish uchun Gzip on Apacheni faollashtirishingiz kerak mod_deflate modul:
sudo a2enmod deflate
Keyin veb-serverni qayta ishga tushiring:
sudo service apache2 restart
Va nihoyat, konfiguratsiya fayliga yoki .htaccess ga quyidagi blokni qo'shing:
<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>
Ushbu konfiguratsiya ma'lum turdagi fayllar uchun siqishni yoqadi va tasvirlar uchun uni o'chiradi.
Agarda nginx, konfiguratsiya ichida sodir bo'ladi Http konfiguratsiya faylining bloki. Quyidagi kodni kiritish kerak:
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;
O'xshash Apache, bu erda ma'lum turdagi fayllar uchun siqish parametrlari o'rnatiladi. Har qanday veb-serverga o'zgartirish kiritilgandan so'ng, xizmatni qayta yuklash talab qilinadi:
sudo service apache2 restart
Or
sudo service nginx restart
Serverga DDOS hujumi
DDoS hujumi natijasida yuqori server yuklanishi mumkin. DDoS hujumining mavjudligini aniqlash trafikning keskin o'sishini, g'ayritabiiy so'rovlarni va server ishlashining pasayishini kuzatish orqali amalga oshirilishi mumkin. Bitta IP-manzildan takroriy so'rovlar jurnallarini ko'rib chiqish yoki portni skanerlash ham DDoS hujumini ko'rsatishi mumkin. Ko'plab himoya choralari mavjud, ammo biz faqat asosiy narsalarni muhokama qilamiz.
CDN (Content Delivery Network) dan foydalanish. CDN sizning veb-serveringiz va foydalanuvchilar o'rtasida vositachi bo'lib xizmat qilishi mumkin, DDoS hujumining ta'sirini yumshatish uchun trafikni tarqatadi va kontentni keshlaydi. CDN-lar, shuningdek, yuklarni taqsimlash va trafikni filtrlashni o'z ichiga olgan o'rnatilgan DDoS himoya mexanizmlariga ega bo'lishi mumkin.
Xavfsizlik devorlari va hujumlarni aniqlash tizimlarini sozlash (IDS/IPS). Xavfsizlik devorlari IP manzillar va portlar kabi turli mezonlar asosida trafikni filtrlash uchun sozlanishi mumkin. IDS/IPS g'ayritabiiy trafik harakatlarini aniqlay oladi va shubhali ulanishlarni bloklaydi. Ushbu vositalar potentsial zararli trafikni kuzatish va blokirovka qilishda samarali bo'lishi mumkin.
DDoS hujumlarining ta'sirini yumshatish uchun Apache va Nginx veb-serverlarini sozlash.
Apache uchun yechim sifatida biz buni yoqamiz mod_evasive modul. Buning uchun izohni olib tashlang yoki quyidagi qatorni qo'shing httpd.conf or apache2.conf konfiguratsiya fayli:
LoadModule evasive20_module modules/mod_evasive.so
Xuddi shu faylda siz sozlamalar blokini qo'shishingiz kerak:
<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>
Xuddi shunday, biz faollashtiramiz mod_ratelimit modul:
LoadModule ratelimit_module modules/mod_ratelimit.so
Va konfiguratsiyani qo'shing:
<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>
uchun konfiguratsiya nginx shunga o'xshash Apache. In nginx.conf konfiguratsiya faylida quyidagi ko'rsatmalardan foydalanish kerak:
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;
...
}
}
Xizmatlarning har biriga o'zgartirish kiritgandan so'ng, ularni qayta yuklash kerak:
sudo systemctl restart apache2
Yoki:
sudo systemctl restart nginx
Ushbu misollar faqat asosiy konfiguratsiyani taqdim etadi, ular maxsus talablar va hujumlarning tabiatiga qarab yanada moslashtirilishi mumkin.
MySQL so'rovlarini optimallashtirish
Veb-serverda MySQL ma'lumotlar bazasi so'rovlarini optimallashtirishga turli yo'llar bilan erishish mumkin va ulardan biri konfiguratsiya faylini to'g'ri konfiguratsiya qilishdir. Odatda, bu fayl nomlanadi my.cnf or my.ini va ichida joylashgan /va boshqalar/ or /etc/mysql/ katalog. Siz uni ochishingiz va quyidagi o'zgarishlarni kiritishingiz kerak:
[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
Keling, server ma'lumotlar bazasi bilan o'zaro aloqani osonlashtiradigan qo'shimcha tavsiyalarni ham ko'rib chiqaylik:
- foydalaning TUShUNING uning bajarilishini tahlil qilish uchun SQL so'rovidan oldin buyruq. Bu sizga so'rovni bajarish rejasini olish va qaysi indekslar ishlatilishini, qaysi jadvallar skanerdan o'tkazilishini va hokazolarni aniqlash imkonini beradi.
- Indekslar ma'lumotlarni qidirishni tezlashtiradi, shuning uchun to'g'ri ishlab chiqilgan indekslar so'rovlar samaradorligini sezilarli darajada yaxshilaydi. Tez-tez ishlatiladigan ustunlarga e'tibor bering WHERE or JOIN sharoitlar.
- Foydalanishdan saqlaning Tanlash *. Jadvaldagi barcha ustunlarni tanlash o'rniga, so'rovingiz uchun haqiqatan ham zarur bo'lgan ustunlarni belgilang.
- Funktsiyalardan foydalanishdan saqlaning WHERE sharoitlar. Funktsiyalardan foydalanish (masalan Pastroq, YUKARI, LEFT, deportatsiya) WHERE sharoitlar indekslarni foydasiz qilishi mumkin. Sharoitlarda ularni to'g'ridan-to'g'ri ishlatishdan qochishga harakat qiling.
- foydalanish INNER JOIN iloji bo'lsa, chunki u odatda samaraliroq. Bundan tashqari, qo'shilish uchun tegishli ustunlar indekslari mavjudligiga ishonch hosil qiling.
- foydalanish LIMIT Agar faqat ma'lum miqdordagi natijalarni olishingiz kerak bo'lsa, qaytarilgan qatorlar sonini cheklash.
- So'rov natijalarini keshlashni ko'rib chiqing, ayniqsa ular kamdan-kam o'zgarsa, server yukini kamaytirish uchun.
Pochta serveri serverda yuqori yuk hosil qiladi
Ushbu bo'limda biz pochta serveri yuqori yuklanishni boshdan kechirayotganini qanday aniqlashni va uning ishlashini optimallashtirish uchun qanday choralar ko'rish mumkinligini, jumladan xabarlar navbatini tekshirish va server parametrlarini sozlashni o'rganamiz. Xabar navbatini tekshirish bilan boshlang. The mailq yordam dasturi bunga yordam berishi mumkin, uni faollashtirish uchun terminalga tegishli buyruqni kiriting:
mailq
Bu, agar mavjud bo'lsa, navbatdagi xabarlar ro'yxatini ko'rsatadi. Har bir xabar o'zining noyob identifikatori va jo'natilish holati haqidagi ma'lumotlar bilan ko'rsatiladi. Xuddi shunday natijani pochta mijozi jurnallarini ko'rib chiqish orqali olish mumkin.
Ko'pgina hollarda, server spam jo'natishini boshlaganda buzilgan taqdirda yuqori yuklanish sodir bo'ladi. Ammo, agar ma'mur tekshirgandan so'ng, server tashqaridan hujum qilinmaganiga ishonch hosil qilsa va foydalanuvchilar spamni e'tiborsiz qoldirmasa, pochta serverini optimallashtirishga o'tish vaqti keldi. Mana yordam beradigan qadamlar:
- Domeningizning DNS yozuvlari, jumladan, toʻgʻri sozlanganligiga ishonch hosil qiling SPF, dkim kengaytmasiva DMARC kengaytmasi pochta yetkazib berishni yaxshilash va spamdan himoya qilish uchun yozuvlar. Parametrlarning to'g'ri konfiguratsiyasini maqolada topish mumkin pochta serveri diagnostikasi.
- Bloklarni oldini olish va pochta jo‘natmalarini tezlashtirish uchun tarmoq sozlamalarini, jumladan, xavfsizlik devori konfiguratsiyasi va marshrutlash qoidalarini tekshiring.
- Xabar navbati parametrlarini server yukiga qarab sozlang. Bu maksimal navbat hajmini va kutish vaqtini belgilashni o'z ichiga olishi mumkin.
- Ushbu maqolada biz ilgari muhokama qilgan echimlarni ko'rib chiqing. Ishlashni yaxshilash uchun vaqti-vaqti bilan pochta serveri ma'lumotlar bazasini optimallashtiring, ma'lumotlarni qidirish va qayta ishlashni tezlashtirish uchun keshlash mexanizmlaridan foydalaning, masalan, DNS so'rovlari.
- Agar pochta serveri hali ham muntazam ravishda yuqori yuklanishga duch kelsa, pochta serverlari klasteri yoki bulutli echimlardan foydalanish kabi masshtablash imkoniyatlarini ko'rib chiqing.
Xulosa
Server yukining ortishi veb-saytni yuklash tezligiga bevosita ta'sir qiladi, natijada foydalanuvchi tajribasi va qidiruv tizimlaridagi obro'siga ta'sir qiladi. Shunday qilib, ushbu yukni samarali boshqarish resursning uzluksiz ishlashini ta'minlashda va tashrif buyuruvchilar uchun undan foydalanish imkoniyatini oshirishda asosiy rol o'ynaydi.