Суурь мэдлэг Profitserver үйлчилгээтэй ажиллах энгийн заавар
Үндсэн Суурь мэдлэг Серверийн ачааллыг бууруулах

Серверийн ачааллыг бууруулах


Энэ нийтлэлд бид серверийн ачаалал яагаад нэмэгдэж байгааг судалж, өндөр ачаалалтай процессыг оновчтой болгох янз бүрийн аргуудыг хэлэлцэх болно. Apache/Nginx болон MySQL дээр кодын оновчлолд онцгой анхаарал хандуулах болно, бид туслах хэрэгсэл болгон кэш хийх талаар ярихаас гадна DDOS халдлага гэх мэт гадны аюул заналхийлэл, түүнээс урьдчилан сэргийлэх арга замыг авч үзэх болно.

Серверийн ачаалал яагаад үүсдэг вэ?

Серверийн оновчлолыг үргэлжлүүлэхийн өмнө нөөцийн одоогийн ачааллын талаар нарийвчилсан дүн шинжилгээ хийх шаардлагатай. Үүнд CPU-ийн ачаалал, RAM ашиглалт, сүлжээний үйл ажиллагаа болон бусад гол параметрүүдийг хэмжих зэрэг багтана. Динамик болон оргил ачааллыг ойлгох нь саад бэрхшээлийг тодорхойлох, нөөцийн хуваарилалтыг оновчтой болгох боломжийг олгодог бөгөөд ингэснээр серверийн дэд бүтцийн тогтвортой байдал, гүйцэтгэлийг нэмэгдүүлдэг.

Серверийн өндөр ачааллын анхны алдааг олж засварлахын тулд бид ерөнхий серверийн оношилгоо хийхийг зөвлөж байна . Хэрэв энэ нь хангалтгүй бол нөөцийн илүү нарийвчилсан шинжилгээ шаардлагатай. Туслах хэрэгсэл болгон 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>

Дараа нь дараах командыг ашиглан Expires модулийг идэвхжүүлнэ үү:

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

Эдгээр тохиргоонуудтай хамт Allow болон Deny заавруудыг алгасах болно гэдгийг анхаарна уу.

Өгөгдлийн шахалтыг ашиглах

Apache болон Nginx вэб серверүүд дээр Gzip ашиглан өгөгдөл шахалтыг идэвхжүүлснээр сервер болон үйлчлүүлэгчийн хооронд дамжуулсан өгөгдлийн хэмжээг багасгахад тусалдаг бөгөөд энэ нь гүйцэтгэлийг сайжруулж, вэб хуудас ачаалах хугацааг бууруулдаг.

Apache дээр Gzip-г идэвхжүүлэхийн тулд та 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 нь хэвийн бус урсгалын зан төлөвийг илрүүлж, сэжигтэй холболтуудыг хааж чаддаг. Эдгээр хэрэгслүүд нь хортой урсгалыг хянах, хаахад үр дүнтэй байж болно.

DDoS халдлагын нөлөөллийг багасгахын тулд Apache болон Nginx вэб серверүүдийг тохируулах.

Apache-д зориулсан шийдэл болгон бид mod_evasive модулийг идэвхжүүлдэг. Үүнийг хийхийн тулд httpd.conf эсвэл 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 эсвэл my.ini нэртэй бөгөөд /etc/ эсвэл /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. Индексүүд нь өгөгдлийн хайлтыг хурдасгадаг тул зөв боловсруулсан индексүүд нь асуулгын гүйцэтгэлийг мэдэгдэхүйц сайжруулдаг. Байнга ашиглагддаг баганад анхаарлаа хандуулаарай WHERE or НЭГДЭХ нөхцөл байдал.
  3. Хэрэглэхээс зайлсхий Сонгох *. Хүснэгтийн бүх баганыг сонгохын оронд зөвхөн таны асуулгад үнэхээр шаардлагатай багануудыг зааж өгнө үү.
  4. функцуудыг ашиглахаас зайлсхий WHERE нөхцөл. Функцуудыг ашиглах (жишээ нь Доод, ЗӨВЛӨГӨӨ, Зүүн талд, БАРААin WHERE Нөхцөл байдал нь индексийг ашиггүй болгож болзошгүй. Нөхцөл байдалд шууд ашиглахаас зайлсхийхийг хичээ.
  5. ашиглах INNER JOIN Энэ нь ихэвчлэн илүү үр дүнтэй байдаг тул боломжтой бол. Түүнчлэн, холбогдох баганууд нь индекстэй эсэхийг шалгаарай.
  6. ашиглах LIMIT Хэрэв та зөвхөн тодорхой тооны үр дүнг авах шаардлагатай бол буцаж ирсэн мөрүүдийн тоог хязгаарлах.
  7. Серверийн ачааллыг багасгахын тулд асуулгын үр дүнг кэшлэх, ялангуяа тэдгээр нь бараг өөрчлөгддөггүй тохиолдолд анхаарч үзээрэй.

Мэйл сервер нь сервер дээр өндөр ачаалал үүсгэдэг

Энэ хэсэгт бид шуудангийн сервер ачаалал ихтэй байгааг хэрхэн тодорхойлох, мессежийн дарааллыг шалгах, серверийн параметрүүдийг тохируулах зэрэг үйл ажиллагааг нь оновчтой болгохын тулд ямар алхамуудыг хийж болохыг судлах болно. Зурвасын дарааллыг шалгахаас эхэл. mailq хэрэгсэл үүнд тусалж чадна, үүнийг идэвхжүүлэхийн тулд терминалд харгалзах командыг оруулна уу:

mailq

Энэ нь хэрэв байгаа бол дараалалд байгаа мессежүүдийн жагсаалтыг харуулах болно. Мессеж бүр өөрийн өвөрмөц танигч болон илгээсэн байдлын талаарх мэдээллийг харуулах болно. Үүнтэй төстэй үр дүнг шуудангийн үйлчлүүлэгчийн бүртгэлийг хянаж үзэх замаар олж авч болно.

Ихэнх тохиолдолд сервер спам илгээж эхлэх үед эвдэрсэн тохиолдолд өндөр ачаалал үүсдэг. Гэсэн хэдий ч администраторыг шалгасны дараа сервер гаднаас халдлагад өртөөгүй гэдэгт итгэлтэй байгаа бөгөөд хэрэглэгчид спамыг үл тоомсорлож байгаа бол шуудангийн серверийг оновчтой болгох цаг болжээ. Үүнд туслах алхмууд энд байна:

  1. Таны домэйны DNS бичлэгүүд зөв тохируулагдсан эсэхийг шалгаарай SPF, dkim өргөтгөлБолон DMARC захидлын хүргэлтийг сайжруулах, спамаас хамгаалах бүртгэл. Параметрүүдийн зөв тохиргоог нийтлэлээс олж болно мэйл серверийн оношлогоо.
  2. Блоклохоос сэргийлж, шуудангийн хүргэлтийг хурдасгахын тулд сүлжээний тохиргоо, түүний дотор галт ханын тохиргоо, чиглүүлэлтийн дүрмийг шалгана уу.
  3. Серверийн ачааллын дагуу мессежийн дарааллын параметрүүдийг тохируулах. Үүнд дарааллын хамгийн их хэмжээ, завсарлага зэргийг багтааж болно.
  4. Өмнө нь энэ нийтлэлд хэлэлцсэн шийдлүүдийг авч үзье. Гүйцэтгэлийг сайжруулахын тулд мэйл серверийн өгөгдлийн санг үе үе оновчтой болгож, DNS асуулга гэх мэт өгөгдөл хайх, боловсруулалтыг хурдасгахын тулд кэшийн механизмыг ашигла.
  5. Хэрэв шуудангийн сервер байнга ачаалалтай тулгардаг бол шуудангийн серверүүдийн кластер эсвэл үүлэн шийдлүүдийг ашиглах гэх мэт масштабын сонголтуудыг анхаарч үзээрэй.

Дүгнэлт

Серверийн ачаалал нэмэгдэх нь вэб сайтыг ачаалах хурдад шууд нөлөөлж, эцсийн дүндээ хайлтын систем дэх хэрэглэгчийн туршлага, нэр хүндэд нөлөөлдөг. Тиймээс энэ ачааллыг үр дүнтэй удирдах нь нөөцийн тасралтгүй ажиллагааг хангах, зочдод хүртээмжийг нэмэгдүүлэх гол үүрэг гүйцэтгэдэг.

❮ Өмнөх нийтлэл Certbot: Let's Encrypt Certificate суулгаж байна
Дараагийн нийтлэл ❯ Сервер ачааллын оношлогоо

VPS-ийн талаар биднээс асуу

Бид таны асуултанд өдөр, шөнийн аль ч цагт хариулахад бэлэн байна.