In questu articulu, sfonderemu per quessa chì a carica di u servitore aumenta è discutemu diversi modi per ottimisà i prucessi di alta carica. Attenzioni particulari serà datu à l'ottimisazione di u codice in Apache / Nginx è MySQL, parlemu di caching cum'è un strumentu ausiliariu, è ancu cunsiderà pussibuli minacce esterne, cum'è attacchi DDOS, è modi per impediscenu.
Perchè a carica di u servitore accade
Prima di passà à l'ottimisazione di u servitore, hè necessariu di fà una analisi approfondita di a carica attuale nantu à e risorse. Questu include a misurazione di a carica di CPU, l'usu di RAM, l'attività di a rete è altri parametri chjave. Capisce a dinamica è i picchi di carica permette di identificà i colli di bottiglia è di ottimisà l'allocazione di risorse, aumentendu cusì a stabilità è a prestazione di l'infrastruttura di u servitore.
Per a risoluzione di i prublemi iniziali di alta carica di u servitore, ricumandemu di fà a diagnostica generale di u servitore. Se questu hè insufficiente, un più detallatu analisi di risorse hè necessariu. Cum'è un strumentu ausiliari, esplorendu u logs di Linux servitore pò esse utile, postu chì questu hè induve a fonte di u prublema si trova in a maiò parte di i casi.
Optimizing Apache/Nginx Server
Aumentu di a Carica di u Servitore A causa di l'Indexazione
A carica aumentata per l'indexazione nantu à u servitore pò esse, per esempiu, quandu i mutori di ricerca scansanu un gran numaru di pagine in u vostru situ. Questu pò purtà à un usu aumentatu di risorse di u servitore è, in cunseguenza, rallentà u rendiment di u situ. Identificà a causa hè relativamente simplice; avete bisognu di apre u schedariu situatu à:
/var/www/httpd-logs/sitename.access.log
Quandu indexatu da i motori di ricerca, l'utilizatore vede entrate di a natura seguente:
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)"
Cum'è una prima suluzione per riduce a carica, pudete aduprà l'impostazione di meta tags "noindex" e "nofollow" nantu à e pagine chì ùn anu micca bisognu d'indici. A seconda suluzione hè config file, induve e voci chì currispondenu à i mutori di ricerca specifichi deve esse aghjuntu, per esempiu, per ammuccià da 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
In listessu modu, l'edizioni deve esse fatte per altri motori di ricerca. Hè da nutà chì e capacità di .htaccess ùn sò micca limitati à solu bluccà l'indexazione. Avemu cunsigliatu per avè più familiarizatu cù e so caratteristiche principali in u artìculu.
Utilizà i paràmetri di cache
I paràmetri di caching incorretti nantu à u servitore ponu ancu purtà à una carica alta. Per ottimisà stu paràmetru, i cambiamenti currispundenti deve esse fatti in i schedarii di cunfigurazione o config. In u casu di Apache, l'ultima opzione hè preferibile, per Nginx - a prima.
In una Apache servitore, avete bisognu di apre u .htacess file è inserisci u codice seguente:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Allora, attivate u Caduca modulu cù u cumandimu:
sudo a2enmod expires
Dopu quì, riavvia u servitore web:
sudo service apache2 restart
È attivate u modulu specificendu:
ExpiresActive On
Nantu à a Nginx servitore, hè abbastanza per aghjunghje u seguente codice à u schedariu di cunfigurazione:
location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}
È eseguite una ricarica di serviziu:
sudo service nginx restart
Nota chì cù questi paràmetri, u lascialu e Deny e direttive saranu ignorate.
Utilizà a cumpressione di dati
Attivà a cumpressione di dati usendu Gzip nantu à i servitori web Apache è Nginx aiuta à riduce a quantità di dati trasmessi trà u servitore è u cliente, chì migliurà u rendiment è reduce u tempu di carica di a pagina web.
Per attivà Gzip on Apache, avete bisognu di attivà u mod_deflate modulu:
sudo a2enmod deflate
Dopu, riavvia u servitore web:
sudo service apache2 restart
È infine, aghjunghje u seguente bloccu à u schedariu di cunfigurazione o .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>
Questa cunfigurazione permette a cumpressione per certi tipi di schedari è a disattiva per l'imaghjini.
In lu casu di Nginx, a cunfigurazione si trova in u situ http bloccu di u schedariu di cunfigurazione. U seguente codice deve esse aghjuntu:
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;
Simili a Apache, quì i paràmetri di cumpressione per certi tipi di schedari sò stabiliti. Dopu avè fattu cambiamenti à qualsiasi di i servitori web, un serviziu di ricaricamentu hè necessariu:
sudo service apache2 restart
Or
sudo service nginx restart
Attaccu DDOS à u Servitore
Una carica alta di u servitore pò accade com'è u risultatu di un attaccu DDoS. L'identificazione di a presenza di un attaccu DDoS pò esse fatta da u monitoraghju di un incrementu bruscu di u trafficu, richieste anormali, è caduta di rendiment di u servitore. A rivisione di i logs per e dumande ripetute da un indirizzu IP o scanning di portu pò ancu indicà un pussibule attaccu DDoS. Ci sò parechje misure di prutezzione, ma discuteremu solu i fundamenti.
Utilizà una CDN (Rete di Cunsigliu di Cuntenutu). Un CDN pò serve cum'è intermediariu trà u vostru servitore web è l'utilizatori, distribuzendu u trafficu è caching cuntenutu per mitigà l'impattu di un attaccu DDoS. I CDN ponu ancu avè meccanismi di prutezzione DDoS integrati, cumprese a distribuzione di carica è u filtru di trafficu.
Configurazione di firewall è sistemi di rilevazione di intrusioni (IDS/IPS). Firewalls ponu esse cunfigurati per filtrà u trafficu basatu annantu à diversi criterii, cum'è l'indirizzi IP è i porti. IDS / IPS ponu detectà un cumpurtamentu di trafficu anormale è bluccà e cunnessione sospette. Questi strumenti ponu esse efficaci à seguità è bluccà u trafficu potenzialmente maliziusu.
Configurazione di i servitori web Apache è Nginx per mitigà l'impattu di l'attacchi DDoS.
Cum'è una suluzione per Apache, attivemu u mod_evasive modulu. Per fà questu, uncomment o aghjunghje a seguente linea in u httpd.conf or apache2.conf schedariu di cunfigurazione:
LoadModule evasive20_module modules/mod_evasive.so
In u listessu schedariu, avete bisognu di aghjunghje un bloccu di paràmetri:
<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>
In listessu modu, attivemu u mod_ratelimit modulu:
LoadModule ratelimit_module modules/mod_ratelimit.so
È aghjunghje a cunfigurazione:
<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>
A cunfigurazione per Nginx hè simili à Apache. In u nginx.conf file di cunfigurazione, e seguenti direttive anu da esse utilizzate:
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;
...
}
}
Dopu avè fattu cambiamenti à ognunu di i servizii, anu da esse ricaricati:
sudo systemctl restart apache2
O:
sudo systemctl restart nginx
Questi esempi furniscenu solu una cunfigurazione basica, chì pò esse adattata ulteriormente secondu e esigenze specifiche è a natura di l'attacchi.
Ottimisazione di e dumande MySQL
L'ottimisazione di e dumande di basa di dati MySQL nantu à un servitore web pò esse realizatu in parechji manere, è unu di elli hè a cunfigurazione propria di u schedariu di cunfigurazione. Di genere, stu schedariu hè chjamatu my.cnf or mio.ini è si trova in u / etc / or /etc/mysql/ annuariu. Avete bisognu à apre è fà i seguenti cambiamenti:
[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
Cunsideremu ancu cunsiglii supplementari chì ponu facilità l'interazzione cù a basa di dati di u servitore:
- aduprà u ESPLICI cumanda prima di una dumanda SQL per analizà a so esecuzione. Questu permette di ottene un pianu d'esekzione per a dumanda è determinà quale indici sò usati, quali tavule sò scansati, etc.
- L'indici acceleranu a ricerca di dati, cusì l'indici cuncepiti currettamente ponu migliurà significativamente a prestazione di a dumanda. Prestate attenzione à e culonni chì sò spessu usati in Dà or JOIN cundizioni.
- Evita l'usu SELEZIONA *. Specificate solu e colonne chì sò veramente necessarie per a vostra dumanda, invece di selezziunate tutte e colonne in una tavula.
- Evite aduprà funzioni in Dà cundizioni. Utilizà e funzioni (cum'è INFERIORE, ALTU, MANCA, DIRITTA) in Dà e cundizioni ponu rende l'indici inutili. Pruvate di evitari u so usu direttu in cundizioni.
- U Paghjolu INGERICU JOIN induve pussibule, cum'è di solitu hè più efficace. Inoltre, assicuratevi chì e colonne currispundenti per unisce anu indici.
- U Paghjolu LIMIT per limità u nùmeru di fila torna s'ellu ci vole à ottene solu un certu nùmeru di risultati.
- Cunsiderate i risultati di a ricerca in cache, soprattuttu se cambianu raramente, per riduce a carica di u servitore.
U Servitore di Mail Crea una Carica Alta nantu à u Servitore
In questa sezione, esploreremu cumu per determinà chì u servitore di mail hà una carica alta è quali passi ponu esse fatti per ottimisà u so funziunamentu, cumpresa a verificazione di a fila di messagi è a cunfigurazione di i paràmetri di u servitore. Cumincià cù cuntrollà a fila di messagi. U mailq utilità pò aiutà cun questu, per attivà, entre u cumandamentu currispundente in u terminal:
mailq
Questu hà da vede una lista di missaghji in a fila, s'ellu ci hè. Ogni missaghju serà visualizatu cù u so identificatore unicu è infurmazione nantu à u statu di mandatu. Un risultatu simili pò esse ottenutu da rivisione i logs di u cliente di mail.
In a maiò parte di i casi, una carica alta si trova in casu di cumprumissu di u servitore quandu principia à mandà spam. In ogni casu, se dopu à cuntrollà l'amministratore hè cunvinta chì u servitore ùn hè micca statu attaccatu da l'esternu è l'utilizatori ùn trascuranu micca u puzzicheghju, hè ora di passà à ottimisà u servitore di mail. Eccu i passi chì aiutanu:
- Assicuratevi chì i registri DNS di u vostru duminiu sò cunfigurati currettamente, cumprese SPF, DKIM, e DMARC registri per migliurà a spedizione di mail è prutegge contra u puzzicheghju. A cunfigurazione curretta di i paràmetri pò esse truvata in l'articulu diagnostichi di u servitore di mail.
- Verificate i paràmetri di a rete, cumprese a cunfigurazione di u firewall è e regule di routing, per evità blocchi è accelerà a spedizione di mail.
- Configurate i paràmetri di a fila di messagi secondu a carica di u servitore. Questu pò include stabilisce a dimensione massima di a fila è i timeouts.
- Cunsiderate e suluzioni chì avemu discututu in questu articulu prima. Ottimisate periodicamente a basa di dati di u servitore di mail per migliurà u rendiment, utilizate miccanismi di cache per accelerà a ricerca è u processu di dati, cum'è e dumande DNS.
- Se u servitore di mail scontra regularmente una carica alta, cunzidira l'opzioni di scala, cum'è l'usu di un cluster di servitori di mail o solu suluzione di nuvola.
cunchiusioni
L'aumentu di a carica di u servitore affetta direttamente a velocità di carica di u situ web, affettendu l'esperienza di l'utilizatori è a reputazione in i motori di ricerca. Cusì, a gestione efficace di sta carica ghjoca un rolu chjave per assicurà a funziunalità cuntinuu di a risorsa è aumentendu a so accessibilità per i visitatori.