Główna » jak » Poprawianie dedykowanego wirtualnego serwera WWW

    Poprawianie dedykowanego wirtualnego serwera WWW

    Kiedy otrzymasz dedykowany serwer wirtualny do uruchomienia witryny, istnieje duże prawdopodobieństwo, że jest on skonfigurowany dla wszystkich użytkowników, a nie jest dostosowany do maksymalizacji wydajności w celu uruchomienia witryny.

    Zawartość

    [ukryć]

    • 1. Przegląd
    • 2 Konfiguracja systemu Linux
      • 2.1 Wyłącz DNS
      • 2.2 Wyłącz SpamAssassain
      • 2.3 Wyłącz xinetd
      • 2.4 Ogranicz użycie pamięci Plesk
      • 2.5 Wyłącz lub wyłącz Plesk (opcjonalnie)
    • 3 Konfiguracja MySQL
      • 3.1 Włącz buforowanie zapytań
      • 3.2 Wyłącz TCP / IP
    • 4 Konfiguracja Apache
    • 5 Konfiguracja PHP
      • 5.1 Usuń niepotrzebne moduły PHP
      • 5.2 Pamięć podręczna PHP Opcode
    • 6 kopii zapasowych
      • 6.1 Utwórz zautomatyzowany skrypt kopii zapasowej
      • 6.2 Synchronizuj kopie zapasowe poza witryną za pomocą Rsync
    • 7 Bezpieczeństwo
      • 7.1 Wyłącz logowanie root przez SSH
      • 7.2 Wyłącz SSH w wersji 1
      • 7.3 Uruchom ponownie serwer SSH
      • 7.4 Sprawdź otwarte porty
      • 7.5 Konfiguracja zapory
    • 8 Zobacz także
    • 9 Referencje

    Przegląd

    Jest wiele obszarów problematycznych, w których chcemy zmaksymalizować wydajność:

    • Konfiguracja systemu Linux
      Zwykle są uruchomione 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 domyślne ustawienia 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 hostów instaluje apache z prawie każdym zainstalowanym modułem. Nie ma powodu, aby ładować moduły, jeśli nie zamierzasz ich używać.
    • Konfiguracja PHP
      Domyślna konfiguracja PHP jest podobnie nadęta, zwykle jest zainstalowana tona niepotrzebnych dodatkowych modułów.
    • Pamięć podręczna PHP Opcode
      Zamiast pozwalać PHP na ponowną kompilację skryptów za każdym razem, pamięć podręczna opcode będzie buforować skompilowane skrypty w pamięci w celu zwiększenia wydajności.
    • Kopie zapasowe
      Powinien prawdopodobnie skonfigurować niektóre automatyczne kopie zapasowe, ponieważ twój dostawca usług hostingowych nie zrobi tego za Ciebie.
    • Bezpieczeństwo
      Z pewnością, Linux jest domyślnie wystarczająco bezpieczny, ale zazwyczaj pojawiają się problemy z bezpieczeństwem, które można rozwiązać za pomocą kilku szybkich ustawień.

    Konfiguracja systemu Linux

    Istnieje wiele poprawek, które możesz zmienić, 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 hostingu obsługuje DNS dla Twojej domeny (prawdopodobnie), możesz wyłączyć usługę DNS.

    wyłącz dns /etc/init.d/name zatrzymaj chmod 644 /etc/init.d/named

    Komenda chmod usuwa uprawnienia do wykonania ze skryptu, zatrzymując go przed uruchomieniem podczas uruchamiania.

    Wyłącz SpamAssassain

    Jeśli nie używasz kont e-mail na swoim serwerze, nie powinieneś zawracać sobie głowy uruchamianiem narzędzi antyspamowych. (Powinieneś też sprawdzić Google Apps, znacznie lepsze rozwiązanie do obsługi poczty e-mail)

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

    Wyłącz xinetd

    Proces xinetd zawiera 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 wymusić na nim użycie mniejszej ilości pamięci przez dodanie pliku opcji.

    vi /usr/local/psa/admin/conf/httpsd.custom.include

    Dodaj następujące linie 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 w żadnym innym. (Zobacz referencje)

    Wyłącz lub wyłącz Plesk (opcjonalnie)

    Jeśli korzystasz z Plesk tylko raz w roku, nie ma powodu, aby go w ogóle nie uruchamiać. Zauważ, że ten krok jest całkowicie opcjonalny i nieco bardziej zaawansowany.

    Uruchom następujące polecenie, aby wyłączyć program plesk:

    /etc/init.d/psa stop

    Można go wyłączyć podczas uruchamiania przy uruchomieniu, wykonując następujące polecenie:

    chmod 644 /etc/init.d/psa

    Zauważ, że jeśli go wyłączysz, nie możesz uruchomić go ręcznie bez zmiany uprawnień do plików (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

    Możesz dodać więcej pamięci do pamięci podręcznej zapytań, jeśli chcesz, ale nie używaj za dużo.

    Wyłącz TCP / IP

    Zaskakująca liczba hostów domyślnie umożliwia dostęp do MySQL na TCP / IP, co nie ma sensu dla 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:

    pomijam-networking

    Konfiguracja Apache

    Otwórz 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:

    Limit czasu 20

    Teraz znajdź sekcję, która zawiera te linie, i dostosuj 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 podkręcania serwera na platformie PHP, jest to, że każdy pojedynczy wątek apache będzie ładował PHP w oddzielnej lokalizacji w pamięci. Oznacza to, że jeśli nieużywany moduł dodaje 256k pamięci do PHP, przez 40 wątków apache marnujesz 10 MB pamięci.

    Usuń niepotrzebne moduły PHP

    Musisz znaleźć plik php.ini, który zwykle znajduje się w /etc/php.ini (Zwróć uwagę, że w niektórych dystrybucjach będzie katalog /etc/php.d/ z pewną liczbą plików .ini, po jednym dla każdego modułu.

    Skomentuj wszystkie linie modułów ładowania z tymi modułami:

    • odbc
    • snmp
    • pdo
    • odbc pdo
    • mysqli
    • ioncube-loader
    • json
    • imap
    • ldap
    • ncurses

    Todo: Dodaj więcej informacji tutaj.

    Pamięć podręczna PHP Opcode

    Istnieje wiele pamięci podręcznych z opcode, z których możesz korzystać, w tym APC, eAccelerator i Xcache, z których ostatnia jest moją osobistą preferencją ze względu na stabilność.

    Pobierz xcache i rozpakuj go do katalogu, a następnie uruchom następujące polecenia z katalogu źródłowego xcache:

    phpize ./configure --enable-xcache make make install

    Otwórz swój plik php.ini i dodaj nową sekcję dla xcache. Musisz dostosować ścieżki, jeśli Twoje 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 dostroić rozmiar bufora kodu operacyjnego xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0; Zmień xcache.var_size, aby dostosować rozmiar zmiennej 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: Trzeba trochę rozszerzyć i połączyć z xcache w odnośnikach.

    Kopie zapasowe

    Nie ma większego znaczenia niż automatyczne tworzenie kopii zapasowych witryny. Możesz uzyskać kopie zapasowe ze swojego dostawcy hostingu, które są również bardzo przydatne, ale ja też wolę mieć zautomatyzowane kopie zapasowe.

    Utwórz zautomatyzowany skrypt kopii zapasowej

    Zwykle rozpoczynam od utworzenia katalogu / backups z podkatalogu / backups / files poniżej. Możesz dostosować te ścieżki, jeśli chcesz.

    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, jeśli to konieczne:

    #! / 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 / moja-witryna-ścieżka / httpdocs gzip /backups/files/sitebackup$THEDATE.tar znajdź / kopie zapasowe / pliki / strona * -mtime +5 -exm rm  \; find / backups / files / db * -mtime +5 -exec rm  \;

    Skrypt najpierw utworzy zmienną daty, aby wszystkie pliki miały taką samą nazwę dla pojedynczej kopii zapasowej, następnie zrzuca bazę danych, tasuje pliki sieciowe i je gzipuje. Polecenia find służą do usuwania plików starszych niż 5 dni, ponieważ nie chcesz, aby na dysku zabrakło miejsca.

    Wykonaj skrypt wykonywalny, uruchamiając następujące polecenie:

    chmod u + x /backups/backup.sh

    Następnie musisz go przypisać do automatycznego uruchamiania 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 crontab:

    1 1 * * * /backups/backup.sh

    Możesz przetestować skrypt z wyprzedzeniem, uruchamiając go po zalogowaniu się na konto użytkownika. (Zwykle uruchamiam kopie zapasowe jako root)

    Synchronizuj kopie zapasowe poza witryną za pomocą Rsync

    Teraz, gdy masz już automatyczne kopie zapasowe swojego serwera, możesz je zsynchronizować gdzie indziej, używając narzędzia rsync. Będziesz chciał przeczytać ten artykuł o tym, jak skonfigurować klucze ssh do automatycznego logowania: Dodaj publiczny klucz SSH do serwera zdalnego w jednym poleceniu

    Możesz to przetestować, uruchamiając to polecenie na komputerze z systemem Linux lub Mac w innej lokalizacji (mam serwer Linux w domu, w którym to uruchamiam)

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

    To zajmie trochę czasu, aby uruchomić po raz pierwszy, ale na końcu komputer lokalny 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 je do linii crontab:

    crontab -e

    Dodaj następującą linię, która będzie uruchamiać rsync co godzinę przy znaku 45 minut. Zauważysz, że używamy tutaj pełnej ścieżki do rsync.

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

    Możesz zaplanować uruchamianie w innym czasie lub tylko raz dziennie. To naprawdę zależy od ciebie.

    Zauważ, że istnieje wiele narzędzi, które umożliwiają 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 root. To bardzo zły pomysł, aby zezwolić na bezpośrednie logowanie do roota przez ssh.

    Wyłącz logowanie root przez SSH

    Zmodyfikuj plik / etc / ssh / sshd_config i znajdź następujący wiersz:

    #PermitRootLogin tak

    Zmień ten wiersz tak, aby wyglądał następująco:

    PermitRootLogin no

    Upewnij się, że posiadasz zwykłe konto użytkownika i możesz dokonać rootowania przed dokonaniem tej zmiany, w przeciwnym razie możesz się zablokować.

    Wyłącz SSH w wersji 1

    Naprawdę nie ma powodu, aby używać czegoś innego niż SSH w wersji 2, ponieważ jest bezpieczniejsza niż poprzednie wersje. Zmodyfikuj plik / etc / ssh / sshd_config i poszukaj następującej sekcji:

    # Protokół 2,1 Protokół 2

    Upewnij się, że używasz tylko protokołu 2, jak pokazano.

    Zrestartuj serwer SSH

    Teraz musisz zrestartować serwer SSH, aby to zadziałało.

    /etc/init.d/sshd restart

    Sprawdź Otwarte Porty

    Możesz użyć następującego polecenia, aby sprawdzić, na których portach nasłuchuje serwer:

    netstat -an | grep LISTEN

    Naprawdę nie powinieneś niczego słuchać poza portami 22, 80 i ewentualnie 8443 dla Plesk.

    Skonfiguruj zaporę

    Główny artykuł: Używanie Iptables w systemie Linux

    Opcjonalnie można skonfigurować zaporę iptables, aby zablokować więcej połączeń. Na przykład zwykle blokuję dostęp do innych portów niż z mojej sieci roboczej. Jeśli masz dynamiczny adres IP, powinieneś unikać tej opcji.

    Jeśli wykonałeś już wszystkie kroki opisane w tym przewodniku, prawdopodobnie nie musisz dodawać zapory do miksu, ale dobrze jest zrozumieć swoje opcje.

    Zobacz też

    • Używanie Iptables w systemie Linux

    Referencje

    • Optymalizowanie serwera DV (mediatemple.net)
    • XCache