Tietopankki Yksinkertaiset ohjeet työskentelemään Profitserver-palvelun kanssa
tärkein Tietopankki Palvelimen kuormituksen vähentäminen

Palvelimen kuormituksen vähentäminen


Tässä artikkelissa perehdymme siihen, miksi palvelinkuormitus lisääntyy, ja keskustelemme erilaisista tavoista optimoida korkean kuormituksen prosesseja. Erityistä huomiota kiinnitetään koodin optimointiin Apache/Nginxissä ja MySQL:ssä, puhutaan välimuistista aputyökaluna ja tarkastellaan myös mahdollisia ulkoisia uhkia, kuten DDOS-hyökkäyksiä, ja tapoja estää niitä.

Miksi palvelinkuormitus tapahtuu

Ennen kuin siirryt palvelimen optimointiin, sinun on analysoitava perusteellinen resurssien nykyinen kuormitus. Tämä sisältää suorittimen kuormituksen, RAM-muistin käytön, verkkotoiminnan ja muiden tärkeiden parametrien mittaamisen. Dynaamiikan ja huippukuormituksen ymmärtäminen mahdollistaa pullonkaulojen tunnistamisen ja resurssien allokoinnin optimoinnin, mikä lisää palvelininfrastruktuurin vakautta ja suorituskykyä.

Suosittelemme suorittamaan a yleinen palvelindiagnostiikka. Jos tämä ei riitä, tarkempi resurssien analyysi on tarpeen. Apuvälineenä tutkimalla Linuxin lokit palvelin voi olla hyödyllinen, sillä sieltä ongelman lähde löytyy useimmissa tapauksissa.

Apache/Nginx-palvelimen optimointi

Lisääntynyt palvelimen kuormitus indeksoinnin vuoksi

Palvelimen indeksoinnin aiheuttama kuormitus voi lisääntyä esimerkiksi silloin, kun hakukoneet skannaavat suuren määrän sivustosi sivuja. Tämä voi johtaa palvelinresurssien lisääntyneeseen käyttöön ja siten hidastaa sivuston suorituskykyä. Syyn tunnistaminen on suhteellisen yksinkertaista; sinun on avattava tiedosto, joka sijaitsee osoitteessa:

/var/www/httpd-logs/sitename.access.log

Kun hakukoneet indeksoivat, käyttäjä näkee seuraavanlaisia ​​merkintöjä:

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)"

Ensimmäisenä ratkaisuna kuormituksen vähentämiseen voit käyttää sisällönkuvauskenttien asetusta "noindex" ja "nofollow" sivuilla, joita ei tarvitse indeksoida. Toinen ratkaisu on .htaccess tiedosto, johon on lisättävä tiettyjä hakukoneita vastaavat merkinnät esimerkiksi piilottaakseen Yandexiltä ja Googlelta:

SetEnvIfNoCase User-Agent "^Yandex" search_bot
SetEnvIfNoCase User-Agent "^Googlebot" search_bot
Order Allow,Deny
Allow from all
Deny from env=search_bot

Vastaavasti muokkauksia on tehtävä muille hakukoneille. On huomattava, että .htaccess-tiedoston ominaisuudet eivät rajoitu vain indeksoinnin estämiseen. Suosittelemme tutustumaan tarkemmin sen pääominaisuuksiin artikkeli.

Välimuistiasetusten käyttäminen

Palvelimen väärät välimuistiasetukset voivat myös johtaa suureen kuormitukseen. Tämän parametrin optimoimiseksi on tehtävä vastaavat muutokset asetustiedostoihin tai .htaccess. Apachen tapauksessa jälkimmäinen vaihtoehto on parempi, Nginxille - edellinen.

Päällä Apache palvelin, sinun on avattava .htacess tiedosto ja lisää seuraava koodi:

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

Ota sitten käyttöön Vanhenee moduuli komennolla:

sudo a2enmod expires

Tämän jälkeen käynnistä verkkopalvelin uudelleen:

sudo service apache2 restart

Ja aktivoi moduuli määrittämällä:

ExpiresActive On

Päällä nginx palvelin, riittää, että lisäät seuraavan koodin asetustiedostoon:

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

Ja suorita palvelun uudelleenlataus:

sudo service nginx restart

Huomaa, että näillä asetuksilla allow ja Kieltää direktiivit ohitetaan.

Tietojen pakkaamisen käyttäminen

Tietojen pakkaus otetaan käyttöön käyttämällä gzip Apache- ja Nginx-verkkopalvelimilla auttaa vähentämään palvelimen ja asiakkaan välillä siirrettävän tiedon määrää, mikä parantaa suorituskykyä ja lyhentää verkkosivujen latausaikaa.

Mahdollistaa gzip on Apache, sinun on aktivoitava mod_deflate moduuli:

sudo a2enmod deflate

Käynnistä sitten verkkopalvelin uudelleen:

sudo service apache2 restart

Lisää lopuksi seuraava lohko asetustiedostoon tai .htaccess-tiedostoon:

<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>

Tämä kokoonpano mahdollistaa tietyntyyppisten tiedostojen pakkaamisen ja poistaa sen käytöstä kuvien osalta.

Kun kyseessä on nginx, määritys tapahtuu kohdassa http määritystiedoston lohko. Seuraava koodi on lisättävä:

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;

Samanlaisia Apache, tässä asetetaan tietyntyyppisten tiedostojen pakkausparametrit. Kun olet tehnyt muutoksia mihin tahansa verkkopalvelimeen, palvelu on ladattava uudelleen:

sudo service apache2 restart

Or

sudo service nginx restart

DDOS-hyökkäys palvelimelle

Palvelimen korkea kuormitus voi tapahtua DDoS-hyökkäyksen seurauksena. DDoS-hyökkäyksen olemassaolon tunnistaminen voidaan tehdä seuraamalla äkillistä liikenteen lisääntymistä, epänormaalia pyyntöä ja palvelimen suorituskyvyn laskua. Lokien tarkastelu toistuvien pyyntöjen varalta yhdestä IP-osoitteesta tai portin tarkistus voi myös viitata mahdolliseen DDoS-hyökkäykseen. Suojatoimenpiteitä on monia, mutta keskustelemme vain perusasioista.

CDN:n (Content Delivery Network) käyttäminen. CDN voi toimia välittäjänä verkkopalvelimesi ja käyttäjien välillä, jakaa liikennettä ja tallentaa sisältöä välimuistiin DDoS-hyökkäyksen vaikutusten lieventämiseksi. CDN:issä voi myös olla sisäänrakennettuja DDoS-suojausmekanismeja, mukaan lukien kuormanjako ja liikenteen suodatus.

Palomuurien ja tunkeutumisen havaitsemisjärjestelmien (IDS/IPS) määrittäminen. Palomuurit voidaan määrittää suodattamaan liikennettä eri kriteerien, kuten IP-osoitteiden ja porttien, perusteella. IDS/IPS voi havaita epänormaalin liikennekäyttäytymisen ja estää epäilyttävät yhteydet. Nämä työkalut voivat olla tehokkaita mahdollisen haitallisen liikenteen seuraamisessa ja estämisessä.

Apache- ja Nginx-verkkopalvelimien määrittäminen DDoS-hyökkäysten vaikutusten vähentämiseksi.

Ratkaisuna Apachelle otamme käyttöön mod_evasive moduuli. Voit tehdä tämän poistamalla kommentin tai lisäämällä seuraavan rivin httpd.conf or apache2.conf asetustiedosto:

LoadModule evasive20_module modules/mod_evasive.so

Samassa tiedostossa sinun on lisättävä asetuslohko:

<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>

Samoin aktivoimme mod_ratelimit moduuli:

LoadModule ratelimit_module modules/mod_ratelimit.so

Ja lisää kokoonpano:

<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>

Kokoonpano kohteelle nginx on samanlainen kuin Apache. Vuonna nginx.conf konfigurointitiedostoa, seuraavia ohjeita on käytettävä:

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;

        ...
    }
}

Kun olet tehnyt muutoksia kuhunkin palveluun, ne on ladattava uudelleen:

sudo systemctl restart apache2

Tai:

sudo systemctl restart nginx

Nämä esimerkit tarjoavat vain peruskokoonpanon, jota voidaan mukauttaa edelleen erityisvaatimusten ja hyökkäysten luonteen mukaan.

MySQL-kyselyiden optimointi

MySQL-tietokantakyselyjen optimointi web-palvelimella voidaan saavuttaa useilla tavoilla, ja yksi niistä on konfigurointitiedoston oikea konfigurointi. Yleensä tämä tiedosto on nimetty my.cnf or my.ini ja sijaitsee /jne/ or /etc/mysql/ hakemistosta. Sinun on avattava se ja tehtävä seuraavat muutokset:

[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

Harkitse myös muita suosituksia, jotka voivat helpottaa vuorovaikutusta palvelintietokannan kanssa:

  1. Käytä SELITÄ komento ennen SQL-kyselyä sen suorittamisen analysoimiseksi. Tämän avulla voit saada kyselyn suoritussuunnitelman ja määrittää, mitä indeksejä käytetään, mitkä taulukot tarkistetaan jne.
  2. Indeksit nopeuttavat tiedonhakua, joten oikein suunnitellut hakemistot voivat parantaa merkittävästi kyselyn suorituskykyä. Kiinnitä huomiota sarakkeisiin, joita käytetään usein MISTÄ or LIITY olosuhteissa.
  3. Vältä käyttöä VALINTA *. Määritä vain ne sarakkeet, jotka ovat todella tarpeen kyselyllesi, sen sijaan, että valitset taulukon kaikki sarakkeet.
  4. Vältä toimintojen käyttöä MISTÄ ehdot. Käyttämällä toimintoja (esim ALEMPI, ISOT, VASEN, OIKEA) vuonna MISTÄ olosuhteet voivat tehdä indekseistä hyödyttömiä. Yritä välttää niiden suoraa käyttöä olosuhteissa.
  5. Käyttää INNER JOIN mahdollisuuksien mukaan, koska se on yleensä tehokkaampaa. Varmista myös, että vastaavilla liittämissarakkeilla on indeksit.
  6. Käyttää RAJOITA rajoittaaksesi palautettavien rivien määrää, jos haluat saada vain tietyn määrän tuloksia.
  7. Harkitse kyselytulosten tallentamista välimuistiin, varsinkin jos ne muuttuvat harvoin, palvelimen kuormituksen vähentämiseksi.

Postipalvelin luo suuren kuormituksen palvelimelle

Tässä osiossa tutkimme, kuinka määrittää, onko sähköpostipalvelimessa suuri kuormitus, ja mitä toimenpiteitä voidaan tehdä sen toiminnan optimoimiseksi, mukaan lukien viestijonon tarkistaminen ja palvelimen parametrien määrittäminen. Aloita tarkistamalla viestijono. The mailq apuohjelma voi auttaa tässä, aktivoidaksesi sen kirjoittamalla vastaava komento terminaaliin:

mailq

Tämä näyttää luettelon jonossa olevista viesteistä, jos sellaisia ​​on. Jokaisessa viestissä näytetään sen yksilöllinen tunniste ja tiedot lähetyksen tilasta. Samanlaisen tuloksen voi saada tarkistamalla sähköpostiohjelman lokit.

Useimmissa tapauksissa suuri kuormitus tapahtuu, jos palvelin vaarantuu, kun se alkaa lähettää roskapostia. Jos järjestelmänvalvoja on tarkistuksen jälkeen kuitenkin varma, että palvelimeen ei ole hyökätty ulkopuolelta ja käyttäjät eivät unohda roskapostia, on aika siirtyä sähköpostipalvelimen optimointiin. Tässä on ohjeita, jotka auttavat:

  1. Varmista, että verkkotunnuksesi DNS-tietueet on määritetty oikein, mukaan lukien SPF, dkim laajennusja DMARC laajennus tallentaa postin jakelun parantamiseksi ja roskapostilta suojaamiseksi. Parametrien oikea konfigurointi löytyy artikkelista sähköpostipalvelimen diagnostiikka.
  2. Tarkista verkkoasetukset, mukaan lukien palomuurimääritykset ja reitityssäännöt estääksesi estoja ja nopeuttaaksesi postin toimitusta.
  3. Määritä viestijonon parametrit palvelimen kuormituksen mukaan. Tämä voi sisältää jonon enimmäiskoon ja aikakatkaisujen asettamisen.
  4. Harkitse ratkaisuja, joita keskustelimme tässä artikkelissa aiemmin. Optimoi ajoittain sähköpostipalvelimen tietokanta suorituskyvyn parantamiseksi, käytä välimuistimekanismeja tiedonhaun ja -käsittelyn nopeuttamiseksi, kuten DNS-kyselyt.
  5. Jos sähköpostipalvelin kohtaa edelleen säännöllisesti suurta kuormitusta, harkitse skaalausvaihtoehtoja, kuten sähköpostipalvelinklusterin tai pilviratkaisujen käyttöä.

Yhteenveto

Lisääntynyt palvelimen kuormitus vaikuttaa suoraan verkkosivuston latausnopeuteen, mikä vaikuttaa viime kädessä käyttökokemukseen ja maineeseen hakukoneissa. Näin ollen tämän kuormituksen tehokas hallinta on avainasemassa resurssin jatkuvan toimivuuden varmistamisessa ja sen saavutettavuuden lisäämisessä vierailijoille.

❮ Edellinen artikkeli Certbot: Let's Encrypt -sertifikaatin asentaminen
Seuraava artikkeli ❯ Palvelimen kuormituksen diagnostiikka

Kysy meiltä VPS:stä

Olemme aina valmiita vastaamaan kysymyksiisi milloin tahansa päivällä tai yöllä.