12Sep

Tweaking en dedikerad virtuell webbserver

När du får en dedikerad virtuell server för att köra din webbplats är chansen bra att den är konfigurerad för alla, och inte anpassad för att maximera prestanda för att köra en webbplats.

Innehåll

[dölj]

  • 1 Översikt
  • 2 Linux-konfiguration
    • 2.1 Inaktivera DNS
    • 2.2 Inaktivera SpamAssassain
    • 2.3 Inaktivera xinetd
    • 2.4 Begränsa Plesk-minnesanvändning
    • 2.5 Inaktivera eller stäng av Plesk( tillval)
  • 3 MySQL-konfiguration
    • 3.1 Aktivera Query Cache
    • 3.2 Avaktivera TCP / IP
  • 4 Apache Konfiguration
  • 5 PHP Konfiguration
    • 5.1 Ta bort onödiga PHP-moduler
    • 5.2 PHP Opcode Cache
  • 6 Backup
    • 6.1 Skapa Automatiserat Backup-skript
    • 6.2 Synkronisera Backups Off-Site med Rsync
  • 7 Säkerhet
    • 7.1 Avaktivera rotLogga in över SSH
    • 7.2 Avaktivera SSH Version 1
    • 7.3 Starta om SSH Server
    • 7.4 Kontrollera efter öppna portar
    • 7.5 Installera en brandvägg
  • 8 Se även
  • 9 Referenser

Översikt

Det finns ett antal problemområden där vi want för att maximera prestanda:

  • Linux konfiguration
    Det går oftast tjänster som inte behöver slösa 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 prestanda mycket.
  • Apache konfiguration
    Som standard installerar de flesta webbhotell leverantörer apache med nästan alla moduler installerade. Det finns ingen anledning att ladda moduler om du aldrig kommer att använda dem.
  • PHP-konfiguration
    Den vanliga PHP-konfigurationen är uppblåst på samma sätt, det finns vanligtvis massor av onödiga extra moduler installerade.
  • PHP Opcode Cache
    I stället för att låta PHP återställa kompileringarna varje gång, kommer en opcode-cache att cache de sammanställda skripten i minnet för stora prestandaökningar.
  • Backups
    Bör förmodligen konfigurera några automatiska säkerhetskopior, eftersom din värdleverantör inte kommer att göra det för dig.
  • Säkerhet
    Visst, Linux är säkert tillräckligt som standard, men det finns vanligtvis vissa skarpa säkerhetsproblem som du kan fixa med några snabba inställningar.

Linux-konfiguration

Det finns ganska många tweaks du kan göra, vilket kommer att variera något baserat 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 webbleverantör hanterar DNS för din domän( sannolikt), kan du inaktivera DNS-tjänsten från att köra.

inaktivera dns /etc/init.d/ namngiven stopp chmod 644 /etc/init.d/ heter

Kommandot chmod tar bort exekutivt behörighet från manuset, vilket hindrar det från att köras vid start.

Inaktivera SpamAssassain

Om du inte använder e-postkonton på din server själv, borde du inte bry dig om att köra anti-spam-verktyg.(Du bör också kolla in Google Apps, mycket bättre e-postlösning)

/etc/init.d/ psa-spamassassin sluta chmod 644 /etc/init.d/ psa-spamassassin

Inaktivera xinetd

Xinetd-processen innehåller ett antal andra processer, varav ingen är användbara för en vanlig webbserver.

/etc/init.d/ xinetd stoppa chmod 644 /etc/init.d/ xinetd

Limit Plesk-minnesanvändning

Om du använder pleskpanelen kan du tvinga den till 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 att fungera på MediaTemple DV-servrar, men har inte kontrollerats på någon annan.(Se referenser)

Inaktivera eller stäng av Plesk( tillval)

Om du bara använder Plesk en gång per år finns det väldigt lite anledning att låta det gå igång. Observera att detta steg är helt frivilligt och lite mer avancerat.

Kör följande kommando för att stänga av plesk:

/etc/init.d/ psa stop

Du kan inaktivera det från att köra 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Ändra filbehörigheterna tillbaka( chmod u + x).

MySQL Configuration

Aktivera Query Cache

Öppna din /etc/ my.cnf-fil och lägg till följande rader i din [mysqld] sektion så här:

[mysqld] query-cache-type = 1 query-cache-size = 8M

Du kanlägg till mer minne till frågan om cache om du vill, men använd inte för mycket.

Inaktivera TCP / IP

Ett överraskande antal värdar gör det möjligt att använda MySQL på TCP / IP som standard, vilket inte ger någon mening 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:

hoppa-nätverk

Apache-konfiguration

Öppna din httpd.conf-fil, som ofta finns i /etc/httpd/conf/ httpd.conf

Hitta linjen som ser ut så här:

Timeout 120

Ändra det här:

Timeout 20

Hitta nu det avsnitt 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 attkom ihåg när tweaking en server på PHP-plattformen är att varje enskild apache tråd kommer att ladda upp PHP på en separat plats i minnet. Det betyder att om en oanvänd modul lägger till 256k minne till PHP, över 40 apache trådar slösar du 10MB minne.

Ta bort onödiga PHP-moduler

Du måste hitta din php.ini-fil, som vanligtvis finns på /etc/ php.ini( Observera att det i vissa utdelningar kommer att finnas en /etc/php.d/-katalog med ett antal. ini-filer, en förvarje modul.

Kommentera några moduler för moduler med följande moduler:

  • odbc
  • snmp
  • snmp
  • ODBC pdo
  • mysqli
  • ioncube-laddare
  • json
  • imap
  • ldap
  • ncurses

Todo: Lägg till mer information här.

PHP Opcode Cache

Därär 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ällankatalog:

phpize. /configure --enable-xcache gör gör installationen

Öppna din php.ini-fil ochlägg till en ny sektion 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];Ändra xcache.size för att ställa in storleken på opcode cache xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0;Ändra xcache.var_size för att justera storleken på variabel 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 = Av xcache.readonly_protection =På xcache.mmap_path = "/tmp/ xcache" xcache.coredump_directory = "" xcache.cacher = På xcache.stat = På xcache.optimizer = Av

Todo: Behöver utöka detta lite och länka till xcache i referenserna.

Backups

Det är väldigt lite viktigare än att ha automatiserade säkerhetskopior av din webbplats. Du kan eventuellt få stillbilder från din värdleverantör, som också är mycket användbara, men jag föredrar att ha automatiserade säkerhetskopior också.

Skapa automatisk säkerhetskopieringskript

Jag börjar vanligen genom att skapa en / backup-katalog med en /backups/-filer katalog under den. Du kan justera dessa vägar om du vill.

mkdir -p /backups/-filer

Skapa nu ett backup.sh-skript i säkerhetskatalogen:

vi /backups/ backup.sh

Lägg till följande i filen, justera sökvägarna och mysqldump-lösenordet efter behov:

#!/bin/ sh THEDATE = `datum +% d% m% y% H% M` mysqldump -uadmin -pPASSWORD DATABASENAME & gt;/backups/files/ dbbackup $ THEDATE.bak tar -cf /backups/files/ sitebackup $ THEDATE.tar /var/www/vhosts/ min hemsida-sökväg / httpdocs gzip /backups/files/ sitebackup $ THEDATE.tar hitta /backups/files/-webbplats * -mtime +5 -exec rm{ } \;hitta /backups/files/ db * -mtime +5 -exec rm{ } \;

Skriptet skapar först en datumvariabel så att alla filer heter samma för en enda säkerhetskopia, dumpar sedan databasen, tars upp webfilerna och gzips dem. Sökkommandon används för att ta bort filer som är äldre än 5 dagar, eftersom du inte vill att din enhet ska gå tom för utrymme.

Gör scriptet körbart genom att köra följande kommando:

chmod u + x /backups/ backup.sh

Nästa måste du ange att den körs automatiskt av cron. Se till att du använder ett konto som har åtkomst till säkerhetskatalogen.

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 brukar köra säkerhetskopiorna som root)

Synkronisera säkerhetskopior från webbplatsen med Rsync

Nu när du har automatiska säkerhetskopior av din server som 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ärrserver 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( jagha en linux-server hemma, vilket är där jag kör det här)

rsync -a [email protected]: /backups/files/ * /offsitebackups/

Det tar ganska lång tid att köra första gången, men i slutet ska din lokala dator ha en kopiaav 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-linje:

crontab -e

Lägg till följande rad, som körs rsync varje timme vid 45-minutersmarkeringen. Du märker att vi använder hela vägen till rsync här.

45 * * * * /usr/bin/ rsync -a [email protected]: /backups/files/ * /offsitebackups/

Du kan schemalägga den för att köra på en annan tid, eller bara en gång per dag. Det är verkligen upp till dig.

Observera att det finns många verktyg som låter dig 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 att du 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 Över SSH

Redigera filen /etc/ssh/ sshd_config och leta efter följande rad:

#PermitRootLogin yes

Ändra den här raden så här:

PermitRootLogin no

Se till att du har ett vanligt användarkonto och kan su tillroot innan du gör denna förändring, annars kan du låsa dig själv.

Inaktivera SSH Version 1

Det finns verkligen ingen anledning att använda något annat än SSH version 2, eftersom det är säkrare än tidigare versioner. Redigera filen /etc/ssh/ sshd_config och leta efter följande avsnitt:

#Protocol 2.1 Protokoll 2

Se till att du bara använder protokoll 2 som visas.

Starta om SSH Server

Nu måste du starta om SSH-servern för att detta ska träda i kraft.

/etc/init.d/ sshd omstart

Kontrollera 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 som lyssnar än portar 22, 80 och eventuellt 8443 för plesk.

Installera en brandvägg

Huvudsaklig artikel: Använda Iptables på Linux

Du kan eventuellt konfigurera en iptables-brandvägg för att blockera fler anslutningar. Till exempel blockerar jag vanligtvis tillgång till andra hamnar än från mitt arbetsnätverk. Om du har en dynamisk IP-adress vill du undvika det alternativet.

Om du redan har följt alla steg i den här guiden hittills är det nog inte nödvändigt att även lägga till en brandvägg i 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