När du får en dedikerad virtuell server för att köra din webbplats är chansen stor att den är konfigurerad för alla, och inte anpassad för att maximera prestanda för att driva en webbplats.
Innehåll[Dölj]
|
Översikt
Det finns ett antal problemområden där vi vill maximera prestanda:
- Linux-konfiguration
Det finns vanligtvis tjänster som inte behöver vara, vilket slösar minne som kan användas för fler anslutningar. - MySQL-konfiguration
Ofta är standardinställningarna baserade på en liten server, vi kan lägga till några viktiga ändringar för att öka prestandan mycket. - Apache-konfiguration
Som standard installerar de flesta värdleverantörer apache med nästan varje modul installerad. Det finns ingen anledning att ladda moduler om du inte någonsin ska använda dem. - PHP-konfiguration
Standard-PHP-konfigurationen är på samma sätt uppblåst, det finns vanligtvis massor av onödiga extra moduler installerade. - PHP Opcode-cache
I stället för att låta PHP kompilera om skript varje gång, kommer en opcode-cache att cacha de sammanställda skripten i minnet för enorma prestandaförhöjningar. - Säkerhetskopior
Bör förmodligen ställa in några automatiska säkerhetskopior, eftersom din webbhotell inte kommer att göra det åt dig. - säkerhet
Visst, Linux är säkert nog som standard, men det finns vanligtvis några uppenbara säkerhetsproblem som du kan fixa med några snabba inställningar.
Linux-konfiguration
Det finns ett stort antal tweaks du kan göra,som varierar något beroende på servern du använder. Dessa tweaks är för en server som kör CentOS, men de borde fungera för de flesta DV-servrar.
Inaktivera DNS
Om din värdleverantör hanterar DNS för din domän (troligtvis) kan du inaktivera att DNS-tjänsten körs.
disable dns /etc/init.d/named stop chmod 644 /etc/init.d/named
Kommandot chmod tar bort exekveringsbehörighet från skriptet och förhindrar att det körs vid start.
Inaktivera SpamAssassain
Om du inte använder e-postkonton på själva servern, bör du inte bry dig mot skräppostverktyg. (Du bör också kolla in Google Apps, mycket bättre e-postlösning)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Inaktivera xinetd
Xinetd-processen innehåller ett antal andra processer, varav ingen är användbar för en typisk webbserver.
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Begränsa Plesk-minnesanvändning
Om du använder plesk-panelen kan du tvinga den att använda mindre minne genom att lägga till en alternativfil.
vi /usr/local/psa/admin/conf/httpsd.custom.include
Lägg till följande rader i filen:
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
Observera att det här alternativet är känt för att fungera på MediaTemple DV-servrar, men det har inte kontrollerats på några andra. (Se referenser)
Inaktivera eller stäng av Plesk (valfritt)
Om du bara använder Plesk en gång om året, finns det väldigt liten anledning att låta det gå alls. Observera att detta steg är helt valfritt och lite mer avancerat.
Kör följande kommando för att stänga av plesk:
/etc/init.d/psa stop
Du kan inaktivera att den körs vid start genom att köra följande kommando:
chmod 644 /etc/init.d/psa
Observera att om du inaktiverar det kan du inte starta det manuellt utan att ändra filbehörigheterna tillbaka (chmod u + x).
MySQL-konfiguration
Aktivera frågecache
Öppna din /etc/my.cnf-fil och lägg till följande rader i avsnittet [mysqld] så här:
[mysqld] query-cache-type = 1 query-cache-size = 8M
Du kan lägga till mer minne i frågecachen om du vill, men inte använda för mycket.
Inaktivera TCP / IP
Ett överraskande antal värdar möjliggör som standard åtkomst till MySQL på TCP / IP, vilket inte är meningsfullt för en webbplats. Du kan ta reda på om mysql lyssnar på TCP / IP genom att köra följande kommando:
netstat -an | grep 3306
För att inaktivera, lägg till följande rad i din /etc/my.cnf-fil:
skip-networking
Apache-konfiguration
Öppna din httpd.conf-fil som du ofta hittar i /etc/httpd/conf/httpd.conf
Hitta linjen som ser ut så här:
Timeout 120
Och ändra det till detta:
Timeout 20
Hitta nu avsnittet som innehåller dessa rader och justera till något liknande:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
PHP-konfiguration
En av de saker du bör tänka på när du justerar enserver på PHP-plattformen är att varje enskild apache-tråd kommer att ladda upp PHP på en separat plats i minnet. Detta innebär att om en oanvänd modul lägger till 256k minne till PHP, slösar du över 40 apache-trådar 10 MB minne.
Ta bort onödiga PHP-moduler
Du måste hitta din php.ini-fil, som vanligtvis finns på /etc/php.ini (Observera att vid vissa distributioner kommer det att finnas en /etc/php.d/-katalog med ett antal .ini-filer, en för varje modul.
Kommentera alla lastmodulrader med dessa moduler:
- odbc
- snmp
- pdo
- odbc pdo
- mysqli
- jonkubbelastare
- json
- imap
- ldap
- ncurses
Todo: Lägg till mer information här.
PHP Opcode-cache
Det finns ett antal opcode-cachar som du kan använda, inklusive APC, eAccelerator och Xcache, den sista är min personliga preferens på grund av stabilitet.
Ladda ner xcache och extrahera den till en katalog och kör sedan följande kommandon från xcache-källkatalogen:
phpize ./configure --enable-xcache make make install
Öppna din php.ini-fil och lägg till ett nytt avsnitt för xcache. Du måste justera banorna om dina php-moduler laddas från någon annanstans.
vi /etc/php.ini
Lägg till följande avsnitt i filen:
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusername" xcache.admin.pass = "putanmd5hashhere" [xcache] ; Change xcache.size to tune the size of the opcode cache xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0 ; Change xcache.var_size to adjust the size of variable cache 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 = On xcache.mmap_path = "/tmp/xcache" xcache.coredump_directory = "" xcache.cacher = On xcache.stat = On xcache.optimizer = Off
Todo: Behöver utöka detta lite och länka till xcache i referenserna.
Säkerhetskopior
Det är väldigt lite viktigare än att haautomatiserade säkerhetskopior av din webbplats. Du kanske kan få säkerhetskopior av ögonblicksbilder från din värdleverantör, vilket också är mycket användbart, men jag föredrar att ha automatiska säkerhetskopior också.
Skapa automatiskt säkerhetskopieringsskript
Jag börjar vanligtvis med att skapa en / backups-katalog, med en / backups / files-katalog under den. Du kan justera dessa vägar om du vill.
mkdir -p /backups/files
Skapa nu ett backup.sh-skript i säkerhetskopian:
vi /backups/backup.sh
Lägg till följande i filen, justera sökvägarna och mysqldump-lösenordet efter behov:
#!/bin/sh THEDATE=`date +%d%m%y%H%M` mysqldump -uadmin -pPASSWORD DATABASENAME > /backups/files/dbbackup$THEDATE.bak tar -cf /backups/files/sitebackup$THEDATE.tar /var/www/vhosts/my-website-path/httpdocs gzip /backups/files/sitebackup$THEDATE.tar find /backups/files/site* -mtime +5 -exec rm {} ; find /backups/files/db* -mtime +5 -exec rm {} ;
Skriptet skapar först en datumvariabel såalla filer kommer att namnges samma för en enda säkerhetskopia, dumpar sedan databasen, tar upp webbfilerna och zippar dem. Sökkommandona används för att ta bort filer som är äldre än fem dagar, eftersom du inte vill att din enhet ska ta slut.
Gör skriptet körbart genom att köra följande kommando:
chmod u+x /backups/backup.sh
Därefter måste du tilldela den för att köras automatiskt av cron. Se till att du använder ett konto som har åtkomst till säkerhetskopieringskatalogen.
crontab -e
Lägg till följande rad i crontab:
1 1 * * * /backups/backup.sh
Du kan testa skriptet i förväg genom att köra det medan du är inloggad på användarkontot. (Jag kör vanligtvis säkerhetskopiorna som root)
Synkronisera säkerhetskopior utanför webbplatsen med Rsync
Nu när du har automatiserade säkerhetskopior av dinserver körs kan du synkronisera dem någon annanstans med hjälp av rsync-verktyget. Du vill läsa den här artikeln om hur du ställer in ssh-nycklar för automatisk inloggning: Lägg till offentlig SSH-nyckel till fjärrservern i ett enda kommando
Du kan testa detta genom att köra det här kommandot på en Linux- eller Mac-maskin på en annan plats (jag har en linuxserver hemma, det är där jag kör det här)
rsync -a user@website.com:/backups/files/* /offsitebackups/
Det tar ett tag att köra den förstatid, men i slutet bör din lokala dator ha en kopia av filkatalogen i / offsitebackups / katalogen. (Se till att skapa den katalogen innan du kör skriptet)
Du kan schemalägga detta genom att lägga till det i en crontab-rad:
crontab -e
Lägg till följande rad, som kör rsync varje timme vid 45-minutersmarkeringen. Du kommer att märka att vi använder hela vägen till rsync här.
45 * * * * /usr/bin/rsync -a user@website.com:/backups/files/* /offsitebackups/
Du kan schemalägga att den ska köras vid en annan tidpunkt, eller bara en gång per dag. Det är verkligen upp till dig.
Observera att det finns många verktyg som gör att du kan synkronisera via ssh eller ftp. Du behöver inte använda rsync.
säkerhet
Det första du vill göra är att se till attdu har ett vanligt användarkonto att använda via ssh och se till att du kan använda su för att växla till root. Det är en mycket dålig idé att tillåta direkt inloggning för root över ssh.
Inaktivera root-inloggning via SSH
Redigera filen / etc / ssh / sshd_config och leta efter följande rad:
#PermitRootLogin yes
Ändra den raden så att den ser ut så här:
PermitRootLogin no
Se till att du har ett vanligt användarkonto och kan su till root innan du gör den här ändringen, annars kan du låsa dig själv.
Inaktivera SSH version 1
Det finns egentligen ingen anledning att använda något annat än SSH version 2, eftersom den är säkrare än tidigare versioner. Redigera filen / etc / ssh / sshd_config och leta efter följande avsnitt:
#Protocol 2,1 Protocol 2
Se till att du bara använder protokoll 2 som visas.
Starta om SSH-servern
Nu måste du starta om SSH-servern för att detta ska träda i kraft.
/etc/init.d/sshd restart
Sök efter öppna portar
Du kan använda följande kommando för att se vilka portar servern lyssnar på:
netstat -an | grep LISTEN
Du borde verkligen inte ha något annat att lyssna än portarna 22, 80 och möjligen 8443 för plesk.
Ställ in en brandvägg
Huvudartikel: Använda Iptables på Linux
Du kan valfritt ställa in en iptables-brandvägg tillblockera fler anslutningar. Till exempel blockerar jag vanligtvis åtkomst till andra portar än mitt arbetsnätverk. Om du har en dynamisk IP-adress vill du undvika det alternativet.
Om du hittills har följt alla steg i den här guiden är det förmodligen inte nödvändigt att lägga till en brandvägg till mixen, men det är bra att förstå dina alternativ.
Se även
- Använda Iptables på Linux
referenser
- Optimera din DV-server (mediatemple.net)
- XCache