Энэ нийтлэлд бид серверийн ачаалал яагаад нэмэгдэж байгааг судалж, өндөр ачаалалтай процессыг оновчтой болгох янз бүрийн аргуудыг хэлэлцэх болно. Apache/Nginx болон MySQL дээр кодын оновчлолд онцгой анхаарал хандуулах болно, бид туслах хэрэгсэл болгон кэш хийх талаар ярихаас гадна DDOS халдлага гэх мэт гадны аюул заналхийлэл, түүнээс урьдчилан сэргийлэх арга замыг авч үзэх болно.
- 1 Серверийн ачаалал яагаад үүсдэг вэ?
- 2 Apache/Nginx серверийг оновчтой болгож байна
- 2.1 Индексжүүлсний улмаас серверийн ачаалал нэмэгдсэн
- 2.2 Кэшлэх тохиргоог ашиглах
- 2.3 Өгөгдлийн шахалтыг ашиглах
- 2.4 Сервер дээрх DDOS халдлага
- 2.5 DDoS халдлагын нөлөөллийг багасгахын тулд Apache болон Nginx вэб серверүүдийг тохируулах.
- 2.6 MySQL асуулгыг оновчтой болгох
- 2.7 Мэйл сервер нь сервер дээр өндөр ачаалал үүсгэдэг
- 3 Дүгнэлт
Серверийн ачаалал яагаад үүсдэг вэ?
Серверийн оновчлолыг үргэлжлүүлэхийн өмнө нөөцийн одоогийн ачааллын талаар нарийвчилсан дүн шинжилгээ хийх шаардлагатай. Үүнд CPU-ийн ачаалал, 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)"
Ачааллыг бууруулах эхний шийдэл болгон та мета шошгоны тохиргоог ашиглаж болно "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-ийн хувьд эхнийх нь.
А Апачи сервер, та нээх хэрэгтэй .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
Эдгээр тохиргооны тусламжтайгаар зөвшөөрөх болон Дене удирдамжийг тойрч гарах болно.
Өгөгдлийн шахалтыг ашиглах
ашиглан өгөгдөл шахалтыг идэвхжүүлж байна Gzip Apache болон Nginx вэб серверүүд нь сервер болон үйлчлүүлэгчийн хооронд дамжих өгөгдлийн хэмжээг багасгахад тусалдаг бөгөөд энэ нь гүйцэтгэлийг сайжруулж, вэб хуудсыг ачаалах хугацааг бууруулдаг.
Идэвхжүүлэх Gzip on Апачи, та идэвхжүүлэх хэрэгтэй 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;
Тэй төстэй Апачи, энд тодорхой төрлийн файлуудын шахалтын параметрүүдийг тохируулсан болно. Аливаа вэб серверт өөрчлөлт оруулсны дараа үйлчилгээг дахин ачаалах шаардлагатай:
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 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_rate хязгаар модуль:
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 нь төстэй юм Апачи. Дахь 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
Серверийн мэдээллийн сантай харилцахад туслах нэмэлт зөвлөмжүүдийг авч үзье.
- Ашиглах ТАЙЛБАР SQL асуулгын өмнө түүний гүйцэтгэлд дүн шинжилгээ хийх команд. Энэ нь асуулгын гүйцэтгэлийн төлөвлөгөөг авч, ямар индекс ашиглаж байгаа, аль хүснэгтийг сканнердсан гэх мэтийг тодорхойлох боломжийг олгоно.
- Индексүүд нь өгөгдлийн хайлтыг хурдасгадаг тул зөв боловсруулсан индексүүд нь асуулгын гүйцэтгэлийг мэдэгдэхүйц сайжруулдаг. Байнга ашиглагддаг баганад анхаарлаа хандуулаарай WHERE or НЭГДЭХ нөхцөл байдал.
- Хэрэглэхээс зайлсхий Сонгох *. Хүснэгтийн бүх баганыг сонгохын оронд зөвхөн таны асуулгад үнэхээр шаардлагатай багануудыг зааж өгнө үү.
- функцуудыг ашиглахаас зайлсхий WHERE нөхцөл. Функцуудыг ашиглах (жишээ нь Доод, ЗӨВЛӨГӨӨ, Зүүн талд, БАРААin WHERE Нөхцөл байдал нь индексийг ашиггүй болгож болзошгүй. Нөхцөл байдалд шууд ашиглахаас зайлсхийхийг хичээ.
- ашиглах INNER JOIN Энэ нь ихэвчлэн илүү үр дүнтэй байдаг тул боломжтой бол. Түүнчлэн, холбогдох баганууд нь индекстэй эсэхийг шалгаарай.
- ашиглах LIMIT Хэрэв та зөвхөн тодорхой тооны үр дүнг авах шаардлагатай бол буцаж ирсэн мөрүүдийн тоог хязгаарлах.
- Серверийн ачааллыг багасгахын тулд асуулгын үр дүнг кэшлэх, ялангуяа тэдгээр нь бараг өөрчлөгддөггүй тохиолдолд анхаарч үзээрэй.
Мэйл сервер нь сервер дээр өндөр ачаалал үүсгэдэг
Энэ хэсэгт бид шуудангийн сервер өндөр ачаалалтай байгаа эсэхийг хэрхэн тодорхойлох, мессежийн дарааллыг шалгах, серверийн параметрүүдийг тохируулах зэрэг түүний ажиллагааг оновчтой болгохын тулд ямар арга хэмжээ авч болохыг судлах болно. Зурвасын дарааллыг шалгаж эхэл. The mailq хэрэгсэл нь үүнд туслах болно, үүнийг идэвхжүүлэхийн тулд терминал дээр харгалзах командыг оруулна уу:
mailq
Энэ нь хэрэв байгаа бол дараалалд байгаа мессежүүдийн жагсаалтыг харуулах болно. Мессеж бүр өөрийн өвөрмөц танигч болон илгээсэн байдлын талаарх мэдээллийг харуулах болно. Үүнтэй төстэй үр дүнг шуудангийн үйлчлүүлэгчийн бүртгэлийг хянаж үзэх замаар олж авч болно.
Ихэнх тохиолдолд сервер спам илгээж эхлэх үед эвдэрсэн тохиолдолд өндөр ачаалал үүсдэг. Гэсэн хэдий ч администраторыг шалгасны дараа сервер гаднаас халдлагад өртөөгүй гэдэгт итгэлтэй байгаа бөгөөд хэрэглэгчид спамыг үл тоомсорлож байгаа бол шуудангийн серверийг оновчтой болгох цаг болжээ. Үүнд туслах алхмууд энд байна:
- Таны домэйны DNS бичлэгүүд зөв тохируулагдсан эсэхийг шалгаарай SPF, dkim өргөтгөлБолон DMARC захидлын хүргэлтийг сайжруулах, спамаас хамгаалах бүртгэл. Параметрүүдийн зөв тохиргоог нийтлэлээс олж болно мэйл серверийн оношлогоо.
- Блоклохоос сэргийлж, шуудангийн хүргэлтийг хурдасгахын тулд сүлжээний тохиргоо, түүний дотор галт ханын тохиргоо, чиглүүлэлтийн дүрмийг шалгана уу.
- Серверийн ачааллын дагуу мессежийн дарааллын параметрүүдийг тохируулах. Үүнд дарааллын хамгийн их хэмжээ, завсарлага зэргийг багтааж болно.
- Өмнө нь энэ нийтлэлд хэлэлцсэн шийдлүүдийг авч үзье. Гүйцэтгэлийг сайжруулахын тулд мэйл серверийн өгөгдлийн санг үе үе оновчтой болгож, DNS асуулга гэх мэт өгөгдөл хайх, боловсруулалтыг хурдасгахын тулд кэшийн механизмыг ашигла.
- Хэрэв шуудангийн сервер байнга ачаалалтай тулгардаг бол шуудангийн серверүүдийн кластер эсвэл үүлэн шийдлүүдийг ашиглах гэх мэт масштабын сонголтуудыг анхаарч үзээрэй.
Дүгнэлт
Серверийн ачаалал нэмэгдэх нь вэб сайтыг ачаалах хурдад шууд нөлөөлж, эцсийн дүндээ хайлтын систем дэх хэрэглэгчийн туршлага, нэр хүндэд нөлөөлдөг. Тиймээс энэ ачааллыг үр дүнтэй удирдах нь нөөцийн тасралтгүй ажиллагааг хангах, зочдод хүртээмжийг нэмэгдүүлэх гол үүрэг гүйцэтгэдэг.