Wyszukiwanie w witrynie

Jak skonfigurować samodzielny serwer Apache z wirtualnym hostingiem opartym na nazwach z certyfikatem SSL — część 4


LFCE (skrót od Linux Foundation Certified Engineer) to wyszkolony specjalista posiadający wiedzę specjalistyczną w zakresie instalowania, zarządzania i rozwiązywania problemów usług sieciowych w systemach Linux, a także odpowiedzialny za projektowanie, wdrażanie i bieżące utrzymanie architektury systemu.

W tym artykule pokażemy, jak skonfigurować Apache do obsługi treści internetowych oraz jak skonfigurować wirtualne hosty oparte na nazwach i protokół SSL, w tym certyfikat z podpisem własnym.

Przedstawiamy Program Certyfikacji Linux Foundation (LFCE).

Uwaga: ten artykuł nie ma być kompleksowym przewodnikiem po Apache, ale raczej punktem wyjścia do samodzielnej nauki na ten temat dla LFCE egzamin. Z tego powodu w tym samouczku nie omawiamy również równoważenia obciążenia za pomocą Apache.

Być może znasz już inne sposoby wykonywania tych samych zadań, co jest OK, biorąc pod uwagę, że certyfikaty Linux Foundation są ściśle oparte na wydajności. Tak więc, jeśli „wykonasz swoją pracę”, masz duże szanse na zdanie egzaminu.

Wymagania

Instrukcje dotyczące instalowania i uruchamiania Apache można znaleźć w Części 1 aktualnej serii („Instalowanie usług sieciowych i konfigurowanie automatycznego uruchamiania przy uruchomieniu”).

Do tej pory powinieneś mieć zainstalowany i uruchomiony serwer WWW Apache. Możesz to sprawdzić za pomocą następującego polecenia.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Uwaga: powyższe polecenie sprawdza obecność Apache lub httpd (najczęstsze nazwy demon sieciowy) na liście uruchomionych procesów. Jeśli Apache jest uruchomiony, otrzymasz dane wyjściowe podobne do poniższych.

Najlepszą metodą przetestowania instalacji Apache i sprawdzenia, czy działa, jest uruchomienie przeglądarki internetowej i wskazanie adresu IP serwera. Powinien nam się pojawić następujący ekran lub przynajmniej komunikat potwierdzający, że Apache działa.

Konfiguracja Apache'a

Główny plik konfiguracyjny Apache może znajdować się w różnych katalogach, w zależności od dystrybucji.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Na szczęście dla nas dyrektywy konfiguracyjne są bardzo dobrze udokumentowane na stronie internetowej projektu Apache. Do niektórych z nich będziemy odnosić się w całym artykule.

Udostępnianie stron na samodzielnym serwerze z Apache

Najbardziej podstawowym zastosowaniem Apache jest udostępnianie stron internetowych na samodzielnym serwerze, na którym nie skonfigurowano jeszcze żadnych wirtualnych hostów. Dyrektywa DocumentRoot określa katalog, z którego Apache będzie udostępniał dokumenty stron internetowych.

Pamiętaj, że domyślnie wszystkie żądania są pobierane z tego katalogu, ale możesz także użyć dowiązań symbolicznych i/lub aliasów, aby wskazać również inne lokalizacje.

O ile nie jest to zgodne z dyrektywą Alias (która pozwala na przechowywanie dokumentów w lokalnym systemie plików zamiast w katalogu określonym przez DocumentRoot), serwer dołącza ścieżkę z żądanego adresu URL do katalogu głównego dokumentu, aby utworzyć ścieżkę do dokumentu.

Na przykład, biorąc pod uwagę następujący DocumentRoot:

Gdy przeglądarka internetowa wskaże [IP serwera lub nazwę hosta]/lfce/tecmint.html, serwer otworzy /var/ www/html/lfce/tecmint.html (zakładając, że taki plik istnieje) i zapisz zdarzenie w dzienniku dostępu z odpowiedzią 200 (OK).

Dziennik dostępu zwykle znajduje się w pliku /var/log pod reprezentatywną nazwą, taką jak access.log lub access_log. Możesz nawet znaleźć ten dziennik (i dziennik błędów) w podkatalogu (na przykład /var/log/httpd w CentOS). W przeciwnym razie zdarzenie zakończone niepowodzeniem będzie nadal rejestrowane w dzienniku dostępu, ale z odpowiedzią 404 (Nie znaleziono).

Ponadto zdarzenia zakończone niepowodzeniem zostaną zapisane w dzienniku błędów:

Format dziennika dostępu można dostosować do swoich potrzeb za pomocą dyrektywy LogFormat w głównym pliku konfiguracyjnym, natomiast nie można tego samego zrobić z dziennikiem błędów .

Domyślny format dziennika dostępu jest następujący:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Gdzie każda z liter poprzedzona znakiem procentu oznacza, że serwer ma zapisać określoną informację:

String

Opis

 %h

 Nazwa zdalnego hosta lub adres IP

 %l

 Nazwa dziennika zdalnego

 %u

 Użytkownik zdalny, jeśli żądanie zostało uwierzytelnione

 %t

 Data i godzina otrzymania żądania

 %r

 Pierwsza linia żądania do serwera

 %>s

 Ostateczny status żądania

 %b

 Rozmiar odpowiedzi [bajty]

a pseudonim to opcjonalny alias, którego można użyć do dostosowania innych dzienników bez konieczności ponownego wprowadzania całego ciągu konfiguracyjnego.

Dalsze opcje można znaleźć w dyrektywie LogFormat [sekcja dotycząca niestandardowych formatów dziennika] w dokumentacji Apache.

Obydwa pliki dziennika (dostęp i błąd) stanowią doskonałe źródło informacji umożliwiające szybką analizę tego, co dzieje się na serwerze Apache. Nie trzeba dodawać, że są one pierwszym narzędziem, którego administrator systemu używa do rozwiązywania problemów.

Wreszcie kolejną ważną dyrektywą jest Listen, która mówi serwerowi, aby akceptował żądania przychodzące na określonym porcie lub kombinacji adresu/portu:

Jeśli zdefiniowany jest tylko numer portu, Apache będzie nasłuchiwał danego portu na wszystkich interfejsach sieciowych (znak wieloznaczny * służy do wskazania „wszystkich interfejsów sieciowych”).

Jeśli określono zarówno adres IP, jak i port, Apache będzie nasłuchiwał na kombinacji danego portu i interfejsu sieciowego.

Pamiętaj (jak zobaczysz w poniższych przykładach), że można użyć wielu dyrektyw Listen w tym samym czasie, aby określić wiele adresów i portów do nasłuchiwania. Ta opcja nakazuje serwerowi odpowiedzieć na żądania z dowolnego z wymienionych adresów i portów.

Konfigurowanie hostów wirtualnych opartych na nazwach

Koncepcja hosta wirtualnego definiuje indywidualną witrynę (lub domenę), która jest obsługiwana przez tę samą maszynę fizyczną. W rzeczywistości wiele witryn/domen może być obsługiwanych z jednego „prawdziwego” serwera jako hosta wirtualnego. Proces ten jest przejrzysty dla użytkownika końcowego, dla którego wydaje się, że różne witryny są obsługiwane przez różne serwery internetowe.

Hosting wirtualny oparty na nazwach pozwala serwerowi polegać na kliencie, który zgłasza nazwę hosta jako część nagłówków HTTP. Dlatego też, korzystając z tej techniki, wiele różnych hostów może współdzielić ten sam adres IP.

Każdy host wirtualny jest konfigurowany w katalogu w DocumentRoot. W naszym przypadku do konfiguracji testowej użyjemy następujących fikcyjnych domen, każda zlokalizowana w odpowiednim katalogu:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Aby strony wyświetlały się poprawnie, chmodujemy każdy katalog VirtualHost na 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

Następnie utwórz przykładowy plik index.html w każdym katalogu public_html:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Na koniec w CentOS i openSUSE dodaj następującą sekcję na dole /etc/httpd/conf/httpd.conf lub / etc/apache2/httpd.conf lub po prostu zmodyfikuj go, jeśli już tam jest.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Pamiętaj, że możesz także dodać każdą definicję hosta wirtualnego w oddzielnych plikach w katalogu /etc/httpd/conf.d. Jeśli tak zdecydujesz, każdy plik konfiguracyjny musi mieć następującą nazwę:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

Innymi słowy, musisz dodać plik .conf do nazwy witryny lub domeny.

W Ubuntu każdy indywidualny plik konfiguracyjny nosi nazwę /etc/apache2/sites-available/[nazwa witryny].conf. Następnie każdą witrynę można włączyć lub wyłączyć za pomocą odpowiednio poleceń a2ensite lub a2dissite w następujący sposób.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

Polecenia a2ensite i a2dissite tworzą łącza do pliku konfiguracyjnego hosta wirtualnego i umieszczają je (lub usuwają) w pliku /etc/apache2/sites-enabled katalog.

Aby móc przeglądać obie witryny z innego systemu Linux, musisz dodać następujące linie w pliku /etc/hosts na tym komputerze, aby przekierować żądania do tych domen na określony adres IP adres.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Ze względów bezpieczeństwa SELinux nie pozwoli Apache na zapisywanie logów w katalogu innym niż domyślny /var/log/httpd.

Możesz wyłączyć SELinux lub ustawić odpowiedni kontekst bezpieczeństwa:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

gdzie xxxxxx to katalog w /var/www/html, w którym zdefiniowałeś wirtualne hosty.

Po ponownym uruchomieniu Apache pod powyższymi adresami powinieneś zobaczyć następującą stronę:

Instalacja i konfiguracja protokołu SSL za pomocą Apache

Na koniec utworzymy i zainstalujemy certyfikat samopodpisany do użycia z Apache. Ten rodzaj konfiguracji jest akceptowalny w małych środowiskach, takich jak prywatna sieć LAN.

Jeśli jednak Twój serwer będzie udostępniał treści światu zewnętrznemu przez Internet, będziesz chciał zainstalować certyfikat podpisany przez stronę trzecią, aby potwierdzić jego autentyczność. Tak czy inaczej, certyfikat umożliwi szyfrowanie informacji przesyłanych do, z lub w obrębie Twojej witryny.

W CentOS i openSUSE musisz zainstalować pakiet mod_ssl.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

Natomiast w Ubuntu będziesz musiał włączyć moduł ssl dla Apache.

a2enmod ssl

Poniższe kroki opisano przy użyciu serwera testowego CentOS, ale konfiguracja powinna być prawie identyczna w innych dystrybucjach (jeśli napotkasz jakiekolwiek problemy, nie wahaj się zadać pytania, korzystając z komentarzy formularz).

Krok 1 [Opcjonalnie]: Utwórz katalog do przechowywania certyfikatów.

mkdir /etc/httpd/ssl-certs

Krok 2: Wygeneruj certyfikat z podpisem własnym i klucz, który będzie go chronił.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Krótkie wyjaśnienie opcji wymienionych powyżej:

  1. req -X509 wskazuje, że tworzymy certyfikat x509.
  2. -nodes (NO DES) oznacza „nie szyfruj klucza”.
  3. -days 365 to liczba dni, przez które certyfikat będzie ważny.
  4. -newkey rsa:2048 tworzy 2048-bitowy klucz RSA.
  5. -keyout /etc/httpd/ssl-certs/apache.key to ścieżka bezwzględna klucza RSA.
  6. -out /etc/httpd/ssl-certs/apache.crt to bezwzględna ścieżka certyfikatu.

Krok 3: Otwórz wybrany plik konfiguracyjny hosta wirtualnego (lub odpowiednią sekcję w pliku /etc/httpd/conf/httpd.conf, jak wyjaśniono wcześniej) i dodaj następujące wiersze do deklaracja wirtualnego hosta nasłuchującego na porcie 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Pamiętaj, że musisz dodać.

NameVirtualHost *:443

na górze, zaraz poniżej

NameVirtualHost *:80

Obie dyrektywy instruują Apache'a, aby nasłuchiwał na portach 443 i 80 wszystkich interfejsów sieciowych.

Poniższy przykład pochodzi z /etc/httpd/conf/httpd.conf:

Następnie uruchom ponownie Apache,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

I skieruj przeglądarkę na stronę https://www.ilovelinux.com. Zostanie wyświetlony następujący ekran.

Śmiało, kliknij „Rozumiem ryzyko” i „Dodaj wyjątek”.

Na koniec zaznacz opcję „Zapisz ten wyjątek na stałe” i kliknij „Potwierdź wyjątek zabezpieczeń”.

Zostaniesz przekierowany na swoją stronę główną za pomocą https.

Streszczenie

W tym poście pokazaliśmy, jak skonfigurować hosting wirtualny Apache i oparty na nazwie z SSL w celu zabezpieczenia transmisji danych. Jeśli z jakiegoś powodu napotkałeś jakiekolwiek problemy, daj nam znać, korzystając z poniższego formularza komentarza. Z przyjemnością pomożemy Ci w przeprowadzeniu udanej konfiguracji.

Przeczytaj także

  1. Hosting wirtualny oparty na adresach IP i nazwach Apache
  2. Tworzenie wirtualnych hostów Apache z opcjami włączania/wyłączania Vhostów
  3. Monitoruj „Serwer WWW Apache” za pomocą narzędzia „Apache GUI”.