Kiedy otrzymasz dedykowany serwer wirtualny do obsługi witryny internetowej, istnieje duże prawdopodobieństwo, że jest on skonfigurowany dla wszystkich i nie jest dostosowany do maksymalizacji wydajności działania witryny.
Zawartość[ ukryć ]
|
Przegląd
Istnieje wiele problematycznych obszarów, w których chcemy zmaksymalizować wydajność:
-
Konfiguracja Linuksa
Zwykle działają usługi, które nie muszą być, marnując pamięć, która może być wykorzystana do większej liczby połączeń. -
Konfiguracja MySQL
Często ustawienia domyślne są oparte na małym serwerze, możemy dodać kilka kluczowych zmian, aby znacznie zwiększyć wydajność. -
Konfiguracja Apache
Domyślnie większość dostawców hostingu instaluje Apache z prawie każdym zainstalowanym modułem. Nie ma powodu, aby ładować moduły, jeśli nie zamierzasz ich nigdy używać. -
Konfiguracja PHP
Domyślna konfiguracja PHP jest podobnie rozdęta, zwykle jest zainstalowanych mnóstwo niepotrzebnych dodatkowych modułów. -
Pamięć podręczna kodu operacyjnego PHP
Zamiast zezwalać PHP na rekompilację skryptów za każdym razem, pamięć podręczna kodu operacji będzie buforować skompilowane skrypty w pamięci, aby znacznie zwiększyć wydajność. -
Kopie zapasowe
Powinien prawdopodobnie skonfigurować automatyczne tworzenie kopii zapasowych, ponieważ Twój dostawca hostingu nie zrobi tego za Ciebie. -
Bezpieczeństwo
Jasne, Linux jest domyślnie wystarczająco bezpieczny, ale zwykle występują rażące problemy z bezpieczeństwem, które można naprawić za pomocą kilku szybkich ustawień.
Konfiguracja Linuksa
Istnieje wiele poprawek, które możesz wprowadzić, które będą się nieznacznie różnić w zależności od używanego serwera. Te poprawki dotyczą serwera z systemem CentOS, ale powinny działać na większości serwerów DV.
Wyłącz DNS
Jeśli Twój dostawca usług hostingowych obsługuje DNS Twojej domeny (prawdopodobnie), możesz wyłączyć usługę DNS.
wyłącz dns /etc/init.d/named stop chmod 644 /etc/init.d/named
Polecenie chmod usuwa uprawnienie do wykonywania skryptu, uniemożliwiając mu uruchamianie przy starcie.
Wyłącz SpamAssassin
Jeśli nie używasz kont e-mail na swoim serwerze, nie powinieneś zawracać sobie głowy uruchamianiem narzędzi antyspamowych. (Powinieneś także sprawdzić Google Apps, znacznie lepsze rozwiązanie pocztowe)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Wyłącz xinetd
Proces xinetd przechowuje szereg innych procesów, z których żaden nie jest przydatny dla typowego serwera WWW.
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Ogranicz użycie pamięci Plesk
Jeśli używasz panelu plesk, możesz zmusić go do zużywania mniejszej ilości pamięci, dodając plik opcji.
vi /usr/local/psa/admin/conf/httpsd.custom.include
Dodaj następujące wiersze do pliku:
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
Zauważ, że ta opcja działa na serwerach MediaTemple DV, ale nie została sprawdzona na żadnych innych. (Widzieć Bibliografia )
Wyłącz lub wyłącz Plesk (opcjonalnie)
Jeśli używasz Pleska tylko raz w roku, nie ma powodu, aby w ogóle go wyłączać. Zwróć uwagę, że ten krok jest całkowicie opcjonalny i nieco bardziej zaawansowany.
Uruchom następujące polecenie, aby wyłączyć plesk:
/etc/init.d/psa stop
Możesz wyłączyć jego uruchamianie podczas uruchamiania, uruchamiając następujące polecenie:
chmod 644 /etc/init.d/psa
Zauważ, że jeśli go wyłączysz, nie możesz go uruchomić ręcznie bez zmiany uprawnień do pliku z powrotem (chmod u + x).
Konfiguracja MySQL
Włącz pamięć podręczną zapytań
Otwórz plik /etc/my.cnf i dodaj następujące wiersze w sekcji [mysqld] w następujący sposób:
[mysqld] query-cache-type = 1 query-cache-size = 8M
Jeśli chcesz, możesz dodać więcej pamięci do pamięci podręcznej zapytań, ale nie używaj jej zbyt dużo.
Wyłącz TCP / IP
Zaskakująca liczba hostów domyślnie umożliwia dostęp do MySQL przez TCP / IP, co nie ma sensu w przypadku strony internetowej. Możesz dowiedzieć się, czy mysql nasłuchuje na TCP / IP, uruchamiając następujące polecenie:
netstat -an | grep 3306
Aby wyłączyć, dodaj następujący wiersz do pliku /etc/my.cnf:
pomiń sieci
Konfiguracja Apache
Otwórz swój plik httpd.conf, często znajdujący się w /etc/httpd/conf/httpd.conf
Znajdź linię, która wygląda następująco:
Limit czasu 120
I zmień to na to:
Limit czasu 20
Teraz znajdź sekcję zawierającą te linie i dostosuj się do czegoś podobnego:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
Konfiguracja PHP
Jedną z rzeczy, o których należy pamiętać podczas modyfikowania serwera na platformie PHP, jest to, że każdy pojedynczy wątek Apache będzie ładował PHP w oddzielnym miejscu w pamięci. Oznacza to, że jeśli nieużywany moduł dodaje 256k pamięci do PHP, w 40 wątkach Apache marnujesz 10 MB pamięci.
Usuń niepotrzebne moduły PHP
Będziesz musiał zlokalizować swój plik php.ini, który zwykle znajduje się w /etc/php.ini (Zauważ, że w niektórych dystrybucjach będzie katalog /etc/php.d/ z wieloma plikami .ini, po jednym na każdy moduł.
Zakomentuj wszystkie linie loadmodule z tymi modułami:
- odbc
- snmp
- pdo
- odbc pdo
- mysqli
- ioncube-loader
- json
- imap
- ldap
- ncurses
Do zrobienia: dodaj więcej informacji tutaj.
Pamięć podręczna kodu operacyjnego PHP
Istnieje wiele pamięci podręcznych kodów operacyjnych, z których możesz korzystać, w tym APC, eAccelerator i Xcache, z których ostatnia jest moim osobistym preferencją ze względu na stabilność.
Pobierz xcache i wyodrębnij go do katalogu, a następnie uruchom następujące polecenia z katalogu źródłowego xcache:
phpize ./configure --enable-xcache robić dokonać instalacji
Otwórz plik php.ini i dodaj nową sekcję dla xcache. Będziesz musiał dostosować ścieżki, jeśli moduły php są ładowane z innego miejsca.
vi /etc/php.ini
Dodaj następującą sekcję do pliku:
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusername" xcache.admin.pass = "putanmd5hashhere" [xcache] ; Zmień xcache.size, aby dostosować rozmiar pamięci podręcznej kodu operacji xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8 KB xcache.ttl = 0 xcache.gc_interval = 0 ; Zmień xcache.var_size, aby dostosować rozmiar zmiennej pamięci podręcznej xcache.var_size = 1 mln 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 = Włączone xcache.mmap_path = "/ tmp / xcache" xcache.coredump_directory = "" xcache.cacher = Wł xcache.stat = Wł xcache.optimizer = Off
Do zrobienia: Musisz to trochę rozwinąć i połączyć z xcache w odniesieniach.
Kopie zapasowe
Nie ma nic ważniejszego niż automatyczne tworzenie kopii zapasowych witryny. Możesz uzyskać kopie zapasowe migawek od swojego dostawcy hostingu, które są również bardzo przydatne, ale wolę również mieć automatyczne kopie zapasowe.
Utwórz skrypt automatycznej kopii zapasowej
Zwykle zaczynam od utworzenia katalogu / backups, z katalogiem / backups / files pod nim. Jeśli chcesz, możesz dostosować te ścieżki.
mkdir -p / backups / files
Teraz utwórz skrypt backup.sh w katalogu kopii zapasowych:
vi /backups/backup.sh
Dodaj następujące elementy do pliku, dostosowując ścieżki i hasło mysqldump w razie potrzeby:
#! / bin / sh
THEDATE = `data +% d% m% y% H% M`
mysqldump -uadmin -p NAZWA BAZY DANYCH HASŁA> /backups/files/dbbackup$THEDATE.bak
tar -cf /backups/files/sitebackup$THEDATE.tar / var / www / vhosts / moja-ścieżka-witryny / httpdocs
gzip /backups/files/sitebackup$THEDATE.tar
znajdź / backups / files / site * -mtime +5 -exec rm {} \;
znajdź / backups / files / db * -mtime +5 -exec rm {} \;
Skrypt najpierw utworzy zmienną z datą, więc wszystkie pliki będą miały takie same nazwy dla pojedynczej kopii zapasowej, a następnie zrzuci bazę danych, rozpakuje pliki internetowe i zgzipuje je. Polecenia wyszukiwania służą do usuwania plików starszych niż 5 dni, ponieważ nie chcesz, aby na dysku zabrakło miejsca.
Spraw, aby skrypt był wykonywalny, uruchamiając następujące polecenie:
chmod u + x /backups/backup.sh
Następnie musisz przypisać mu automatyczne uruchamianie przez cron. Upewnij się, że używasz konta, które ma dostęp do katalogu kopii zapasowych.
crontab -e
Dodaj następujący wiersz do tabeli crontab:
1 1 * * * /backups/backup.sh
Możesz przetestować skrypt z wyprzedzeniem, uruchamiając go po zalogowaniu się na konto użytkownika. (Zazwyczaj kopie zapasowe uruchamiam jako root)
Synchronizuj kopie zapasowe poza witryną z Rsync
Teraz, gdy masz już uruchomione automatyczne kopie zapasowe serwera, możesz je zsynchronizować w innym miejscu za pomocą narzędzia rsync. Warto przeczytać ten artykuł o tym, jak skonfigurować klucze ssh do automatycznego logowania: Dodaj publiczny klucz SSH do zdalnego serwera za pomocą jednego polecenia
Możesz to przetestować, uruchamiając to polecenie na komputerze z systemem Linux lub Mac w innej lokalizacji (mam serwer linux w domu, na którym to uruchamiam)
rsync -a uż[email protected]: / backups / files / * / offsitebackups /
Pierwsze uruchomienie zajmie trochę czasu, ale na końcu twój lokalny komputer powinien mieć kopię katalogu plików w katalogu / offsitebackups /. (Upewnij się, że utworzyłeś ten katalog przed uruchomieniem skryptu)
Możesz to zaplanować, dodając go do linii crontab:
crontab -e
Dodaj następujący wiersz, który będzie uruchamiał rsync co godzinę po 45 minutach. Zauważysz, że używamy tutaj pełnej ścieżki rsync.
45 * * * * / usr / bin / rsync -a uż[email protected]: / backups / files / * / offsitebackups /
Możesz zaplanować uruchamianie go o innej godzinie lub tylko raz dziennie. To naprawdę zależy od ciebie.
Zauważ, że istnieje wiele narzędzi, które pozwolą ci na synchronizację przez ssh lub ftp. Nie musisz używać rsync.
Bezpieczeństwo
Pierwszą rzeczą, którą chcesz zrobić, jest upewnienie się, że masz zwykłe konto użytkownika do używania przez ssh i upewnij się, że możesz użyć su, aby przełączyć się na roota. To bardzo zły pomysł, aby zezwolić na bezpośrednie logowanie dla roota przez ssh.
Wyłącz logowanie roota przez SSH
Edytuj plik / etc / ssh / sshd_config i poszukaj następującego wiersza:
#PermitRootLogin tak
Zmień tę linię, aby wyglądała następująco:
PermitRootLogin no
Przed dokonaniem tej zmiany upewnij się, że masz zwykłe konto użytkownika i możesz uzyskać uprawnienia roota jako root, w przeciwnym razie możesz się zablokować.
Wyłącz wersję SSH 1
Naprawdę nie ma powodu, by używać czegoś innego niż SSH w wersji 2, ponieważ jest bezpieczniejszy niż poprzednie wersje. Edytuj plik / etc / ssh / sshd_config i poszukaj następującej sekcji:
#Protocol 2,1 Protokół 2
Upewnij się, że używasz tylko protokołu 2, jak pokazano.
Uruchom ponownie serwer SSH
Teraz musisz ponownie uruchomić serwer SSH, aby to zadziałało.
/etc/init.d/sshd restart
Sprawdź otwarte porty
Możesz użyć następującego polecenia, aby zobaczyć, na których portach nasłuchuje serwer:
netstat -an | grep SŁUCHAJ
Naprawdę nie powinno być niczego innego niż porty 22, 80 i prawdopodobnie 8443 dla plesk.
Skonfiguruj zaporę
Możesz opcjonalnie skonfigurować zaporę sieciową iptables, aby blokować więcej połączeń. Na przykład zazwyczaj blokuję dostęp do innych portów niż z mojej sieci służbowej. Jeśli masz dynamiczny adres IP, nie będziesz chciał tej opcji.
Jeśli do tej pory wykonałeś już wszystkie kroki tego przewodnika, prawdopodobnie nie jest konieczne dodawanie do zestawu zapory sieciowej, ale dobrze jest poznać dostępne opcje.
Zobacz też
- Korzystanie z Iptables w systemie Linux