Знания Прости инструкции за работа с услугата Profitserver
основен Знания Намаляване на натоварването на сървъра

Намаляване на натоварването на сървъра


В тази статия ще разгледаме защо се получава повишено натоварване на сървъра и ще обсъдим различни начини за оптимизиране на процесите с високо натоварване. Специално внимание ще бъде отделено на оптимизацията на кода в Apache/Nginx и MySQL, ще говорим за кеширането като спомагателен инструмент, а също така ще разгледаме възможните външни заплахи, като DDOS атаки, и начините за предотвратяването им.

Защо възниква натоварването на сървъра

Преди да се пристъпи към оптимизация на сървъра, е необходимо да се извърши задълбочен анализ на текущото натоварване на ресурсите. Това включва измерване на натоварването на процесора, използването на RAM, мрежовата активност и други ключови параметри. Разбирането на динамиката и пиковите натоварвания позволява идентифициране на тесните места и оптимизиране на разпределението на ресурсите, като по този начин повишава стабилността и производителността на сървърната инфраструктура.

За първоначално отстраняване на неизправности при високо натоварване на сървъра препоръчваме да извършите a обща диагностика на сървъра. Ако това не е достатъчно, по-подробно анализ на ресурсите е необходимо. Като спомагателен инструмент, изследване на регистрационни файлове на Linux сървър може да бъде полезен, тъй като това е мястото, където в повечето случаи се намира източникът на проблема.

Оптимизиране на 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)"

Като първо решение за намаляване на натоварването можете да използвате настройката на мета тагове "noindex" намлява "nofollow" на страници, които не трябва да бъдат индексирани. Второто решение е . Htaccess файл, където трябва да се добавят записи, съответстващи на конкретни търсачки, например, за да се скрият от 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 не се ограничават само до блокиране на индексирането. Препоръчваме да се запознаете по-подробно с основните му характеристики в статията.

Използване на настройките за кеширане

Неправилните настройки за кеширане на сървъра също могат да доведат до високо натоварване. За да оптимизирате този параметър, трябва да направите съответните промени в конфигурационните файлове или . Htaccess. При Apache е за предпочитане вторият вариант, при Nginx – първият.

Върху Apache сървър, трябва да отворите .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

На Nginx сървър, е достатъчно да добавите следния код към конфигурационния файл:

location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}

И извършете презареждане на услугата:

sudo service nginx restart

Имайте предвид, че с тези настройки, Позволете намлява Deny директивите ще бъдат заобиколени.

Използване на компресиране на данни

Разрешаване на компресиране на данни с помощта на Gzip на уеб сървъри Apache и Nginx помага за намаляване на количеството данни, предавани между сървъра и клиента, което подобрява производителността и намалява времето за зареждане на уеб страницата.

За да активирате Gzip on Apache, трябва да активирате mod_deflate модул:

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>

Тази конфигурация позволява компресиране за определени типове файлове и го деактивира за изображения.

В случай че Nginx, конфигурацията се случва в 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;

Подобно Apache, тук се задават параметрите за компресия за определени типове файлове. След извършване на промени в някой от уеб сървърите е необходимо презареждане на услугата:

sudo service apache2 restart

Or

sudo service nginx restart

DDOS атака на сървъра

Високо натоварване на сървъра може да възникне в резултат на DDoS атака. Идентифицирането на наличието на DDoS атака може да стане чрез наблюдение на внезапно увеличение на трафика, необичайни заявки и спадове на производителността на сървъра. Прегледът на регистрационните файлове за повтарящи се заявки от един IP адрес или сканирането на порт също може да покаже възможна DDoS атака. Има много мерки за защита, но ще обсъдим само основните.

Използване на 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>

По същия начин активираме mod_ratelimit модул:

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 е подобен на Apache. В 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 /etc/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

Нека разгледаме и допълнителни препоръки, които могат да улеснят взаимодействието със сървърната база данни:

  1. Използвайте ОБЯСНЕТЕ команда преди SQL заявка, за да анализира нейното изпълнение. Това ви позволява да получите план за изпълнение на заявката и да определите кои индекси се използват, кои таблици се сканират и т.н.
  2. Индексите ускоряват търсенето на данни, така че правилно проектираните индекси могат значително да подобрят производителността на заявките. Обърнете внимание на колоните, които често се използват в КЪДЕ or ПРИСЪЕДИНЕТЕ СЕ КЪМ условия.
  3. Избягвайте използването SELECT *. Посочете само онези колони, които наистина са необходими за вашата заявка, вместо да избирате всички колони в таблица.
  4. Избягвайте да използвате функции в КЪДЕ условия. Използване на функции (като напр НИСКА, ГОРЕН, в наличност, НАДЯСНО) в КЪДЕ условия могат да направят индексите безполезни. Опитайте се да избягвате директното им използване в условия.
  5. употреба ВЪВЕЖДАНЕ където е възможно, тъй като обикновено е по-ефективно. Също така се уверете, че съответните колони за присъединяване имат индекси.
  6. употреба ОГРАНИЧАВА за да ограничите броя на върнатите редове, ако трябва да получите само определен брой резултати.
  7. Помислете за кеширане на резултатите от заявките, особено ако те рядко се променят, за да намалите натоварването на сървъра.

Пощенският сървър създава голямо натоварване на сървъра

В този раздел ще проучим как да определим, че сървърът за електронна поща изпитва голямо натоварване и какви стъпки могат да бъдат предприети за оптимизиране на работата му, включително проверка на опашката за съобщения и конфигуриране на параметрите на сървъра. Започнете с проверка на опашката със съобщения. The mailq помощната програма може да помогне с това, за да я активирате, въведете съответната команда в терминала:

mailq

Това ще покаже списък със съобщения в опашката, ако има такива. Всяко съобщение ще бъде показано със своя уникален идентификатор и информация за статуса на изпращане. Подобен резултат може да се получи чрез преглед на регистрационните файлове на пощенския клиент.

В повечето случаи голямо натоварване възниква в случай на компрометиране на сървъра, когато той започне да изпраща спам. Въпреки това, ако след проверка администраторът е уверен, че сървърът не е бил атакуван отвън и потребителите не пренебрегват спама, време е да преминете към оптимизиране на пощенския сървър. Ето стъпките, които ще помогнат:

  1. Уверете се, че DNS записите на вашия домейн са правилно конфигурирани, включително SPF, DKIM, и DMARC записи за подобряване на доставката на поща и защита срещу спам. Правилната конфигурация на параметрите може да бъде намерена в статията за диагностика на пощенски сървър.
  2. Проверете мрежовите настройки, включително конфигурацията на защитната стена и правилата за маршрутизиране, за да избегнете блокиране и да ускорите доставката на поща.
  3. Конфигурирайте параметрите на опашката за съобщения според натоварването на сървъра. Това може да включва настройка на максималния размер на опашката и изчакване.
  4. Помислете за решенията, които обсъдихме в тази статия по-рано. Периодично оптимизирайте базата данни на пощенския сървър, за да подобрите производителността, използвайте механизми за кеширане, за да ускорите търсенето и обработката на данни, като например DNS заявки.
  5. Ако пощенският сървър все още редовно се сблъсква с високо натоварване, помислете за опции за мащабиране, като например използване на клъстер от пощенски сървъри или облачни решения.

Заключение

Повишеното натоварване на сървъра пряко влияе върху скоростта на зареждане на уебсайта, като в крайна сметка се отразява на потребителското изживяване и репутацията в търсачките. По този начин ефективното управление на това натоварване играе ключова роля за осигуряване на непрекъсната функционалност на ресурса и повишаване на неговата достъпност за посетителите.

❮ Предишна статия Диагностика на натоварването на сървъра
Следваща статия ❯ Certbot: Инсталиране на Let's Encrypt Certificate

Попитайте ни за VPS

Винаги сме готови да отговорим на вашите въпроси по всяко време на деня и нощта.