Tweaking un server Web virtuale dedicato
Quando si ottiene un server virtuale dedicato per l'esecuzione del sito Web, è probabile che sia configurato per tutti e non personalizzato per ottimizzare le prestazioni per l'esecuzione di un sito Web.
Contenuto[nascondere]
|
Panoramica
Esiste una serie di aree problematiche in cui vogliamo massimizzare le prestazioni:
- Configurazione Linux
Di solito ci sono servizi in esecuzione che non devono necessariamente essere, sprecando memoria che potrebbe essere utilizzata per più connessioni. - Configurazione MySQL
Spesso le impostazioni predefinite sono basate su un server di piccole dimensioni, possiamo aggiungere alcune modifiche chiave per aumentare notevolmente le prestazioni. - Configurazione Apache
Di default la maggior parte dei provider di hosting installa apache con quasi tutti i moduli installati. Non c'è motivo di caricare moduli se non li userai mai. - Configurazione PHP
La configurazione predefinita di PHP è altrettanto gonfia, di solito ci sono una tonnellata di moduli aggiuntivi non necessari installati. - PHP Opcode Cache
Invece di consentire a PHP di ricompilare gli script ogni volta, una cache di opcode memorizzerà nella cache gli script compilati in memoria per enormi incrementi di prestazioni. - I backup
Probabilmente dovrebbe configurare alcuni backup automatici, dal momento che il tuo provider di hosting non ha intenzione di farlo per te. - Sicurezza
Certo, Linux è abbastanza sicuro per impostazione predefinita, ma di solito ci sono alcuni problemi di sicurezza che puoi correggere con alcune impostazioni rapide.
Configurazione Linux
C'è un certo numero di modifiche che puoi fare, che possono variare leggermente in base al server che stai utilizzando. Queste modifiche sono per un server che esegue CentOS, ma dovrebbero funzionare per la maggior parte dei server DV.
Disabilita DNS
Se il tuo provider di hosting gestisce il DNS per il tuo dominio (probabilmente), puoi disattivare il servizio DNS.
disabilitare dns /etc/init.d/named stop chmod 644 /etc/init.d/named
Il comando chmod rimuove il permesso di esecuzione dallo script, impedendogli di essere eseguito all'avvio.
Disabilita SpamAssassain
Se non si utilizzano account e-mail sul server stesso, non si deve preoccupare di eseguire gli strumenti anti-spam. (Inoltre dovresti controllare Google Apps, soluzione email molto migliore)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Disabilita xinetd
Il processo xinetd contiene una serie di altri processi, nessuno dei quali è utile per un server web tipico.
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Limitare l'utilizzo della memoria di Plesk
Se si utilizza il pannello plesk, è possibile forzarlo a utilizzare meno memoria aggiungendo un file di opzioni.
vi /usr/local/psa/admin/conf/httpsd.custom.include
Aggiungi le seguenti righe al file:
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
Si noti che questa opzione è nota per funzionare sui server MediaTemple DV, ma non è stata controllata su nessun'altra. (Vedi riferimenti)
Disattiva o Disattiva Plesk (opzionale)
Se usi Plesk solo una volta all'anno, c'è ben poco motivo per lasciarlo funzionare. Si noti che questo passaggio è completamente facoltativo e leggermente più avanzato.
Esegui il seguente comando per disattivare plesk:
/etc/init.d/psa stop
Puoi disabilitarlo dall'esecuzione all'avvio eseguendo il seguente comando:
chmod 644 /etc/init.d/psa
Nota che se lo disattivi, non puoi avviarlo manualmente senza cambiare i permessi del file (chmod u + x).
Configurazione MySQL
Abilita cache di query
Apri il tuo file /etc/my.cnf e aggiungi le seguenti righe nella tua sezione [mysqld] in questo modo:
[mysqld] query-cache-type = 1 query-cache-size = 8M
Puoi aggiungere più memoria alla cache delle query, se lo desideri, ma non usare troppo.
Disabilita TCP / IP
Un numero sorprendente di host consente l'accesso a MySQL su TCP / IP per impostazione predefinita, il che non ha senso per un sito Web. È possibile capire se mysql è in ascolto su TCP / IP eseguendo il seguente comando:
netstat -an | grep 3306
Per disabilitare, aggiungi la seguente riga al tuo file /etc/my.cnf:
salta networking
Configurazione di Apache
Apri il tuo file httpd.conf, che si trova spesso in /etc/httpd/conf/httpd.conf
Trova la linea che assomiglia a questa:
Timeout 120
E cambialo in questo modo:
Timeout 20
Ora trova la sezione che include queste righe e regola qualcosa di simile:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
Configurazione PHP
Una delle cose da tenere a mente quando si modifica un server sulla piattaforma PHP è che ogni singolo thread di apache caricherà PHP in una posizione separata in memoria. Ciò significa che se un modulo non utilizzato aggiunge 256k di memoria a PHP, su 40 thread apache stai sprecando 10MB di memoria.
Rimuovere i moduli PHP non necessari
Dovrai localizzare il tuo file php.ini, che di solito si trova in /etc/php.ini (nota che su alcune distribuzioni, ci sarà una directory /etc/php.d/ con un numero di file .ini, uno per ogni modulo.
Commenta qualsiasi linea di modulo di carico con questi moduli:
- odbc
- snmp
- pdo
- odbc pdo
- mysqli
- ionCube-loader
- jSON
- imap
- LDAP
- ncurses
Todo: aggiungi ulteriori informazioni qui.
PHP Opcode Cache
Ci sono un certo numero di cache opcode che puoi usare, tra cui APC, eAccelerator e Xcache, l'ultima è la mia preferenza personale dovuta alla stabilità.
Scarica xcache ed estrailo in una directory, quindi esegui i seguenti comandi dalla directory di origine xcache:
phpize ./configure --enable-xcache make make install
Apri il tuo file php.ini e aggiungi una nuova sezione per xcache. Avrai bisogno di regolare i percorsi se i tuoi moduli php sono caricati da qualche altra parte.
vi /etc/php.ini
Aggiungi la seguente sezione al file:
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusername" xcache.admin.pass = "putanmd5hashhere" [xcache]; Modifica xcache.size per ottimizzare la dimensione della cache dell'opcode xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0; Modifica xcache.var_size per regolare la dimensione della cache delle variabili xcache.var_size = 1M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Off xcache.readonly_protection = Su xcache.mmap_path = "/ tmp / xcache" xcache.coredump_directory = "" xcache.cacher = Su xcache.stat = Su xcache.optimizer = Off
Todo: Bisogno di espandere questo un po 'e link a xcache nei riferimenti.
I backup
È molto più importante avere i backup automatici del tuo sito web. Potresti riuscire a ottenere backup di istantanee dal tuo provider di hosting, che sono anche molto utili, ma preferisco avere anche backup automatici.
Crea script di backup automatico
Di solito inizio creando una directory / backups, con una directory / backups / files al di sotto di essa. Puoi regolare questi percorsi se vuoi.
mkdir -p / backups / files
Ora crea uno script backup.sh all'interno della directory dei backup:
vi / backups/backup.sh
Aggiungi il seguente al file, regolando i percorsi e la password di mysqldump come necessario:
#! / bin / sh THEDATE = "data +% d% m% y% H% M" mysqldump -uadmin -pPASSWORD DATABASENAME> /backups/files/dbbackup$THEDATE.bak tar -cf / backups / files / sitebackup $ THEDATE .tar / var / www / vhosts / percorso-mio-sito web / httpdocs gzip /backups/files/sitebackup$THEDATE.tar find / backups / files / site * -mtime +5 -exec rm \; find / backups / files / db * -mtime +5 -exec rm \;
Lo script creerà dapprima una variabile di data in modo che tutti i file saranno denominati uguali per un singolo backup, quindi scaricherà il database, eseguirà il drill up dei file Web e li gzips. I comandi di ricerca vengono utilizzati per rimuovere tutti i file più vecchi di 5 giorni, dal momento che non si desidera che l'unità esaurisca lo spazio.
Rendi eseguibile lo script eseguendo il seguente comando:
chmod u + x /backups/backup.sh
Successivamente dovrai assegnarlo per essere eseguito automaticamente da cron. Assicurati di utilizzare un account che abbia accesso alla directory dei backup.
crontab -e
Aggiungi la seguente riga al crontab:
1 1 * * * /backups/backup.sh
È possibile testare lo script in anticipo eseguendolo mentre si è connessi all'account utente. (Solitamente eseguo i backup come root)
Sincronizza i backup fuori sito con Rsync
Ora che hai eseguito il backup automatico del tuo server, puoi sincronizzarlo da qualche altra parte usando l'utility rsync. Ti consigliamo di leggere questo articolo su come configurare le chiavi ssh per l'accesso automatico: Aggiungi la chiave SSH pubblica al server remoto in un singolo comando
Puoi testarlo eseguendo questo comando su un computer Linux o Mac in un'altra posizione (ho un server linux a casa, che è dove lo eseguo)
rsync -a [email protected]: / backups / files / * / offsitebackups /
Questo richiederà un po 'di tempo per essere eseguito la prima volta, ma alla fine il computer locale dovrebbe avere una copia della directory dei file nella directory / offsitebackups /. (Assicurati di creare quella directory prima di eseguire lo script)
Puoi pianificare questo aggiungendolo a una linea crontab:
crontab -e
Aggiungi la seguente riga, che eseguirà rsync ogni ora al punto di 45 minuti. Noterai che usiamo il percorso completo per rsync qui.
45 * * * * / usr / bin / rsync -a [email protected]: / backup / file / * / offsitebackups /
È possibile pianificare l'esecuzione in un momento diverso o solo una volta al giorno. Dipende solo da te.
Nota che ci sono molte utility che ti permetteranno di sincronizzare tramite ssh o ftp. Non devi usare rsync.
Sicurezza
La prima cosa che vuoi fare è assicurarti di avere un account utente regolare da usare tramite ssh, e assicurati di poter usare su per passare a root. È una pessima idea consentire il login diretto per root su ssh.
Disabilitare il login root su SSH
Modifica il file / etc / ssh / sshd_config e cerca la seguente riga:
#PermitRootLogin sì
Cambia quella linea per assomigliare a questa:
PermitRootLogin no
Assicurati di avere un account utente regolare e puoi su a root prima di apportare questa modifica, altrimenti potresti bloccarti.
Disabilita SSH versione 1
Non c'è davvero alcun motivo per utilizzare qualcosa di diverso da SSH versione 2, in quanto è più sicuro rispetto alle versioni precedenti. Modifica il file / etc / ssh / sshd_config e cerca la seguente sezione:
# Protocollo 2,1 Protocollo 2
Assicurati di utilizzare solo il protocollo 2 come mostrato.
Riavvia il server SSH
Ora dovrai riavviare il server SSH per renderlo effettivo.
/etc/init.d/sshd restart
Controlla le porte aperte
È possibile utilizzare il seguente comando per vedere su quali porte il server è in ascolto:
netstat -an | grep ASCOLTA
Davvero non dovresti avere niente che ascolti oltre alle porte 22, 80 e possibilmente 8443 per plesk.
Imposta un firewall
Articolo principale: Uso di Iptables su Linux
Opzionalmente puoi configurare un firewall iptables per bloccare più connessioni. Ad esempio, di solito blocco l'accesso a qualsiasi altra porta diversa dalla mia rete di lavoro. Se hai un indirizzo IP dinamico, vorrai evitare questa opzione.
Se hai già seguito tutti i passaggi di questa guida fino ad ora, probabilmente non è necessario aggiungere un firewall al mix, ma è bene capire le tue opzioni.
Guarda anche
- Uso di Iptables su Linux
Riferimenti
- Ottimizzazione del server DV (mediatemple.net)
- XCache