Tweaking en dedikeret virtuel webserver
Når du får en dedikeret virtuel server til at køre din hjemmeside, er chancerne gode, at den er konfigureret til alle, og ikke tilpasset for at maksimere ydeevnen til at køre en hjemmeside.
Indhold[skjule]
|
Oversigt
Der er en række problemområder, hvor vi vil maksimere ydeevnen:
- Linux konfiguration
Der kører normalt tjenester, der ikke behøver at være, spildende hukommelse, som kan bruges til flere forbindelser. - MySQL konfiguration
Standardindstillingerne er ofte baseret på en lille server, vi kan tilføje nogle få vigtige ændringer for at øge ydeevnen meget. - Apache konfiguration
Som standard installerer de fleste hostingudbydere apache med næsten alle moduler installeret. Der er ingen grund til at indlæse moduler, hvis du aldrig bruger dem. - PHP konfiguration
Standard PHP konfiguration er ligeledes opustet, der er normalt et ton unødvendige ekstra moduler installeret. - PHP Opcode Cache
I stedet for at tillade PHP at genopbygge scripts hver eneste gang, vil en opcode cache cache de kompilerede scripts i hukommelsen for store præstationsforøgelser. - Backups
Skal sandsynligvis opsætte nogle automatiske sikkerhedskopier, da din hostingudbyder ikke vil gøre det for dig. - Sikkerhed
Sikker på, Linux er sikkert nok som standard, men der er normalt nogle skarpe sikkerhedsproblemer, som du kan rette med nogle få hurtige indstillinger.
Linux konfiguration
Der er ganske mange tweaks du kan gøre, som vil variere lidt baseret på den server, du bruger. Disse tweaks er for en server, der kører CentOS, men de skal arbejde for de fleste DV-servere.
Deaktiver DNS
Hvis din hostingudbyder håndterer DNS'en for dit domæne (sandsynligvis), kan du deaktivere DNS-tjenesten fra at køre.
deaktiver dns /etc/init.d/named stop chmod 644 /etc/init.d/named
Kommandoen chmod fjerner eksekutiv tilladelse fra scriptet, og stopper det fra at køre ved opstart.
Deaktiver SpamAssassain
Hvis du ikke bruger e-mail-konti på din server selv, bør du ikke gider kørsel af anti-spam-værktøjer. (Du bør også tjekke ud Google Apps, meget bedre email-løsning)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Deaktiver xinetd
Xinetd-processen indeholder en række andre processer, hvoraf ingen er nyttige til en typisk webserver.
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Begræns brug af Plesk-hukommelse
Hvis du bruger plesk panelet, kan du tvinge det til at bruge mindre hukommelse ved at tilføje en optionsfil.
vi /usr/local/psa/admin/conf/httpsd.custom.include
Tilføj følgende linjer til filen:
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
Bemærk, at denne mulighed er kendt for at fungere på MediaTemple DV-servere, men er ikke blevet kontrolleret på andre. (Se referencer)
Deaktiver eller sluk Plesk (valgfrit)
Hvis du kun bruger Plesk en gang om året, er der meget lidt grund til at lade det køre i det hele taget. Bemærk, at dette trin er helt valgfrit, og lidt mere avanceret.
Kør følgende kommando for at slukke for plesk:
/etc/init.d/psa stop
Du kan deaktivere den fra at køre ved opstart ved at køre følgende kommando:
chmod 644 /etc/init.d/psa
Bemærk, at hvis du deaktiverer det, kan du ikke starte det manuelt uden at ændre filtilladelserne tilbage (chmod u + x).
MySQL-konfiguration
Aktivér forespørgselscache
Åbn din /etc/my.cnf fil og tilføj følgende linjer i din [mysqld] sektion som denne:
[mysqld] query-cache-type = 1 forespørgsels-cache-size = 8M
Du kan tilføje mere hukommelse til forespørgselscache, hvis du vil have det, men brug ikke for meget.
Deaktiver TCP / IP
Et overraskende antal værter giver som standard adgang til MySQL på TCP / IP, hvilket ikke giver mening for et websted. Du kan finde ud af om mysql lytter på TCP / IP ved at køre følgende kommando:
netstat -an | grep 3306
For at deaktivere, tilføj følgende linje til din /etc/my.cnf fil:
skip-networking
Apache Konfiguration
Åbn din httpd.conf-fil, som ofte findes i /etc/httpd/conf/httpd.conf
Find den linje, der ser sådan ud:
Timeout 120
Og ændre det til dette:
Timeout 20
Find nu den sektion, der indeholder disse linjer, og juster til noget lignende:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
PHP konfiguration
En af de ting, du skal huske på, når du tilpasser en server på PHP-platformen, er, at hver enkelt apache-tråd skal indlæse PHP i en separat placering i hukommelsen. Dette betyder, at hvis et ubrugt modul tilføjer 256k hukommelse til PHP, på tværs af 40 apache tråde spilder du 10MB hukommelse.
Fjern unødvendige PHP-moduler
Du skal finde din php.ini-fil, som normalt findes på /etc/php.ini (Bemærk, at der i nogle distributioner vil være et /etc/php.d/-bibliotek med en række .ini-filer, en for hvert modul.
Kommentere eventuelle loadmodule linjer med disse moduler:
- ODBC
- snmp
- BOB
- odbc pdo
- MySQLi
- ioncube-loader
- jSON
- imap
- ldap
- ncurses
Todo: Tilføj flere oplysninger her.
PHP Opcode Cache
Der er en række opcode caches, som du kan bruge, herunder APC, eAccelerator og Xcache, den sidste er min personlige præference på grund af stabilitet.
Download xcache og udpak det i en mappe, og kør derefter følgende kommandoer fra xcache-kildemappen:
phpize ./configure --enable-xcache gør gør installationen
Åbn din php.ini-fil og tilføj et nyt afsnit til xcache. Du skal justere stierne, hvis dine php-moduler er indlæst fra et andet sted.
vi /etc/php.ini
Tilføj følgende afsnit til filen:
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusnavn" xcache.admin.pass = "putanmd5hashhere" [xcache]; Skift xcache.size for at indstille størrelsen på opcode cache xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0; Skift xcache.var_size for at justere størrelsen 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 = Fra xcache.readonly_protection = På xcache.mmap_path = "/ tmp / xcache" xcache.coredump_directory = "" xcache.cacher = På xcache.stat = På xcache.optimizer = Fra
Todo: Behov for at udvide dette lidt og link til xcache i referencerne.
Backups
Der er meget lidt mere vigtigt end at have automatiserede sikkerhedskopier af dit websted. Du kan muligvis få stillbilleder fra din hostingudbyder, som også er meget nyttige, men jeg foretrækker også at have automatiserede sikkerhedskopier også.
Opret automatisk backup script
Jeg starter som regel ved at oprette en / backup-mappe med en / / backups / files-mappe under den. Du kan justere disse stier, hvis du vil.
mkdir -p / backups / filer
Opret nu et backup.sh script inde i sikkerhedskopieringsmappen:
vi /backups/backup.sh
Tilføj følgende til filen, juster stier og mysqldump adgangskode efter behov:
#! / bin / sh THEDATE = "dato +% d% m% y% H% M" mysqldump -uadmin -pPASSWORD DATABASENAME> /backups/files/dbbackup$THEDATE.bak tar -cf / backups / files / sitebackup $ THEDATE .tar / var / www / vhosts / min-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 \;
Scriptet vil først oprette en datavariabel, så alle filerne bliver navngivet de samme for en enkelt backup, så dumper databasen, tars op webfilerne og gzips dem. Finde kommandoer bruges til at fjerne filer, der er ældre end 5 dage, da du ikke vil have dit drev ud af rummet.
Gør scriptet eksekverbart ved at køre følgende kommando:
chmod u + x /backups/backup.sh
Næste skal du tildele det til at køre automatisk af cron. Sørg for at bruge en konto, der har adgang til sikkerhedskopieringsmappen.
crontab -e
Tilføj følgende linje til crontab:
1 1 * * * /backups/backup.sh
Du kan teste scriptet på forhånd ved at køre det, mens du er logget på brugerkontoen. (Jeg kører normalt backuperne som root)
Synkroniser Backups Off-Site med Rsync
Nu hvor du har automatiske sikkerhedskopier af din server, der kører, kan du synkronisere dem et andet sted ved at bruge rsync-værktøjet. Du vil gerne læse denne artikel om, hvordan du opsætter ssh-nøgler til automatisk login: Tilføj offentlig SSH-nøgle til fjernserver i en enkelt kommando
Du kan teste dette ved at køre denne kommando på en Linux eller Mac-maskine på et andet sted (jeg har en linux-server derhjemme, hvilket er hvor jeg kører dette)
rsync -a [email protected]: / backups / files / * / offsitebackups /
Det tager et stykke tid at køre første gang, men i sidste ende skal din lokale computer have en kopi af filkataloget i / offsitebackups / directory. (Sørg for at oprette mappen, før du kører scriptet)
Du kan planlægge dette ved at tilføje det til en crontab linje:
crontab -e
Tilføj følgende linje, som vil køre rsync hver time ved 45 minutters mark. Du vil bemærke, at vi bruger den fulde sti til rsync her.
45 * * * * / usr / bin / rsync -a [email protected]: / backups / files / * / offsitebackups /
Du kan planlægge det til at køre på et andet tidspunkt, eller kun én gang om dagen. Det er virkelig op til dig.
Bemærk, at der er mange værktøjer, der giver dig mulighed for at synkronisere via ssh eller ftp. Du behøver ikke bruge rsync.
Sikkerhed
Den første ting du vil gøre er at sørge for, at du har en almindelig brugerkonto til brug via ssh, og sørg for at du kan bruge su til at skifte til root. Det er en meget dårlig idé at tillade direkte login til root over ssh.
Deaktiver root login over SSH
Rediger filen / etc / ssh / sshd_config, og søg efter følgende linje:
#PermitRootLogin ja
Skift den linje for at se sådan ud:
PermitRootLogin nr
Sørg for, at du har en almindelig brugerkonto, og at du kan rotere, før du foretager denne ændring, ellers kan du låse dig selv.
Deaktiver SSH Version 1
Der er virkelig ingen grund til at bruge andet end SSH version 2, da det er mere sikkert end tidligere versioner. Rediger filen / etc / ssh / sshd_config, og søg efter følgende afsnit:
# Protokol 2.1 Protokol 2
Sørg for, at du kun bruger protokol 2 som vist.
Genstart SSH Server
Nu skal du genstarte SSH-serveren for at få dette til at virke.
/etc/init.d/sshd genstart
Tjek for åbne porte
Du kan bruge følgende kommando til at se, hvilke porte serveren lytter til:
netstat -an | grep LISTEN
Du burde virkelig ikke have noget andet at høre end havne 22, 80 og muligvis 8443 for plesk.
Opsæt en firewall
Hovedartikel: Brug af Iptables på Linux
Du kan eventuelt opsætte en iptables firewall for at blokere flere forbindelser. For eksempel blokkerer jeg normalt adgang til andre havne end fra mit arbejdsnetværk. Hvis du har en dynamisk IP-adresse, vil du gerne undgå denne mulighed.
Hvis du allerede har fulgt alle trin i denne vejledning hidtil, er det sandsynligvis ikke nødvendigt at også tilføje en firewall til blandingen, men det er godt at forstå dine muligheder.
Se også
- Brug af Iptables på Linux
Referencer
- Optimering af din DV-server (mediatemple.net)
- xcache