- Wprowadzenie do laboratorium
W tym ćwiczeniu utworzymy dwie autonomiczne strony www. Pierwszą będzie strona - subdomena - o adresie www.imienazwisko.local natomiast drugą subdomena o adresie prog.imienazwisko.local.
Pierwsza strona będzie zawierała stronę główną w postaci pliku HTML, a druga w postaci pliku PHP.
Tą drugą subdomenę ustawimy w ten sposób, aby uruchamiała się na porcie 8080, który jest alternatywnym do 80 numerem portu i służy najczęściej do testowania różnorakich ustawień HTTP.
Dla jasności: domena to nazwa pod którą widoczna będzie strona w sieci, a subdomena to jej poddomena. Dla przykładu w adresie www.imienazwisko.local, fraza www jest subdomeną a imienazwisko domeną.
Z kolei local to sufiks oznaczające rozszerzenie domeny, w tym przypadku local oznacza stronę lokalną.
- Czynności wstępne
Na początku aktualizujemy repozytoria i pakiety poleceniami sudo apt update oraz sudo apt upgrade.
- Resetowanie serwera Apache
Aby przystąpić do tego ćwiczenia należy najpierw "zresetować" serwer Apache do ustawień sprzed wykonania poprzedniego ćwiczenia. Można to zrobić przez zwykłą edycję plików zmienianych w poprzednim ćwiczeniu.
- Zmieniamy więc numer portu z powrotem na domyślny - 80 (z obecnego tam 5010+X). Robimy to edytując plik ports.conf komendą
sudo nano /etc/apache2/ports.conf.
- Następnie zmieniamy port na 80 (z obecnego tam 5010+X) i katalog stron w sekcji DocumentRoot pliku 000-default.conf na /var/www/html poprzez edycję tego pliku a więc wydając komendę sudo nano /etc/apache2/sites-available/000-default.conf.
- Pozostaje jeszcze zmiana pliku /etc/apache2/apache2.conf w którym zmieniamy jedną z sekcji Directory tak, aby znalazł się tam katalog /var/www/ zamiast /page.
Edytujemy ten plik poleceniem sudo nano /etc/apache2/apache2.conf. Ten plik będziemy jeszcze edytować później, kiedy wpiszemy do niego konkretne katalogi dla stron głównych dwóch naszych poddomen.
Po przeprowadzeniu ww. kroków restartujemy serwer i sprawdzamy jego status:
$ sudo systemctl restart apache2
$ sudo systemctl status apache2
Wyświetlamy również stronę serwer.imienazwisko.local na kliencie Lubuntu, aby sprawdzić, czy serwer działa poprawnie. Powinniśmy otrzymać domyślną stronę Apache'a:

- Dodanie nowego portu
W tym kroku dodamy nowy numer portu, aby serwer nasłuchiwał żądań HTTP również na nim. Będzie to numer 8080, wspomniany we wprowadzeniu do tego laboratorium (będzie on związany ze stroną prog.imienazwisko.local).
W tym celu zmieniamy zawartość pliku /etc/apache2/ports.conf, komendą sudo nano /etc/apache2/ports.conf. Poniżej Listen 80 wpisujemy Listen 8080, po czym zapisujemy plik.

Następnie restartujemy serwer i sprawdzamy jego status znanymi już poleceniami.

- Katalogi i strony strony www
Teraz pora na utworzenie na dysku dwóch katalogów, w których znajdą się nasze strony internetowe. Oba foldery powstaną w domyślnym - dla Apache'a - katalogu w którym przechowywane są takie strony a więc w /var/www/.
Pierwszym katalogiem będzie www.imienazwisko.local a drugim prog.imienazwisko.local. Z kolei w nich utworzymy podkatalogi public_html, w których przechowywane będą właściwe pliki naszych stron.
Dlaczego akurat public_html? Dlatego, że w profesjonalnych hostingach często tak właśnie nazywa się katalog przeznaczony na pliki stron internetowych.
$cd /var/www/
$ sudo mkdir www.imienazwisko.local
$ sudo mkdir www.imienazwisko.local/public_html
$ sudo mkdir prog.imienazwisko.local
$ sudo mkdir prog.imienazwisko.local/public_html
$ tree
Teraz zmienimy uprawnienia obecnego użytkownika aby można było edytować pliki oraz nadamy prawa dostępu do utworzonych folderów.
$ sudo chown www-data:www-data -R /var/www/
$ sudo chmod 775 -R /var/www/
W końcowym etapie tego kroku utworzymy statyczną stronę HTML w katalogu www.imienazwisko.local poleceniem sudo nano index.html, oczywiście po wcześniejszym przejściu do właściwego katalogu:
<!DOCTYPE html>
<html>
<head>
<title>www.imienazwisko.local</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Strona www.imienazwisko.local</h1>
</body>
</html>


- Konfiguracja poszczególnych stron
Nadszedł czas, w którym musimy skonfigurować poszczególne strony. Samo utworzenie ich kodu bowiem nie wystarczy: to zadanie dla FrontEnd/BackEnd Developera a więc programisty.
My natomiast w tym ćwiczeniu wchodzimy w buty administratora systemu Linux a więc naszym zadaniem jest przygotowanie gruntu pod stawianie profesjonalnych stron internetowych.
Pierwszym krokiem będzie przejście do katalogu /etc/apache2/sites-available/. Następnym wyłączenie domyślnej strony serwera Apache. Kolejnym utworzenie w katalogu dwóch plików konfiguracyjnych.
Plik taki musi być napisany zgodnie z określonymi regułami syntaktycznymi. Po pierwsze warto aby nazwa pliku była taka sama
jak nazwa naszej domeny, ale dodatkowo z roszerzeniem .conf. Nasze pliki będą miały więc składnię www.imienazwisko.local.conf oraz prog.imienazwisko.local.conf. Struktura
składniowa pliku powinna z kolei wyglądać następująco:
- <VirtualHost *:numer_portu> - informacja dla serwera, że zaczyna się definicja wirtualnego hosta, na którą składa się socket, tzn. adres IP w połączeniu z dwukropkiem
i numerem portu. Gwiazdka, czyli wildcard, symbolizuje dowolny adres IP.
- ServerName domena - nazwa domeny, a więc www.imienazwisko.local dla jednego i prog.imienazwisko.local dla drugiego pliku konfiguracyjnego.
- ServerAlias - inna nazwa domeny. Docelowo będzie ona przekierowywać na domenę podaną w ServerName. Dla subdomeny www.imienazwisko.local aliasem będzie imienazwisko.local: tak często są aliasowane w Internecie subdomeny z prefiksem www.
- DocumentRoot - ścieżka do katalogu z plikami strony dla danej domeny określonej w ServerName, u nas: www.imienazwisko.local/public_html oraz prog.imienazwisko.local/public_html. Oba foldery jako podkatalogi foldera /var/www/.
- ErrorLog sciezka - lokalizacja do pliku logów z błędami. Będzie to /var/log/apache2/www.imienazwisko.local_error.log oraz /var/log/apache2/prog.imienazwisko.local_error.log. Samą frazę /var/log/apache2/ można zastąpić zmienną ${APACHE_LOG_DIR}.
- CustomLog sciezka combined - lokalizacja do pliku innych wpisów. Będzie to /var/log/apache2/www.imienazwisko.local_access.log oraz /var/log/apache2/prog.imienazwisko.local_access.log.
Wpis dla wirtualnego hosta musimy dodać dla dwóch portów: 80 i 8080. Dla tego drugiego hosta dodajemy jeszcze zapis, dzięki któremu dla innego portu pojawi się błąd 443 (access denied, dostęp zabroniony):
<Directory sciezka>
Require all denied
</Directory>
Przystępujemy do działania. Wyłączamy więc stronę domyślną i tworzymy plik konfiguracyjny dla pierwszej domeny, uprzednio przechodząc do właściwego katalogu. Apache dostarcza domyślny plik wirtualnego hosta o nazwie 000-default.conf,
użyjemy go więc jako szablonu. Proponuję skopiować więc plik 000-default.conf a następnie skopiowany edytować.
$ cd /etc/apache2/sites-available/
$ sudo a2dissite 000-default
$ sudo cp 000-default.conf www.imienazwisko.local.conf
$ sudo nano www.imienazwisko.local.conf

Plik www.imienazwisko.local.conf będzie wyglądał więc jak poniższy. Komentarze oznaczone na niebiesko usuwamy. Ten zrzut ekranu należy włączyć do sprawozdania
<VirtualHost *:80>
ServerName www.imienazwisko.local
ServerAlias imienazwisko.local
DocumentRoot /var/www/www.imienazwisko.local/public_html
ErrorLog ${APACHE_LOG_DIR}/www.imienazwisko.local_error.log
CustomLog ${APACHE_LOG_DIR}/www.imienazwisko.local_access.log combined
</VirtualHost>
<VirtualHost *:8080>
ServerName www.imienazwisko.local
ServerAlias imienazwisko.local
DocumentRoot /var/www/www.imienazwisko.local/public_html
<Directory /var/www/www.imienazwisko.local/public_html>
Require all denied
</Directory>
ErrorLog ${APACHE_LOG_DIR}/www.imienazwisko.local_error.log
CustomLog ${APACHE_LOG_DIR}/www.imienazwisko.local_access.log combined
</VirtualHost>

Po utworzeniu tego pliku proponuję z kolei skopiować go dla drugiej domeny ze zmienioną nazwą, a następnie zmienić wpisy które się różnią (oczywiście będąc w tym co poprzednio katalogu):
$ sudo cp www.imienazwisko.local.conf prog.imienazwisko.local.conf
$ sudo nano prog.imienazwisko.local.conf

Zawartosć drugiego pliku - prog.imienazwisko.local.conf - wygląda w konsekwencji jak poniżej (rezygnujemy tu z aliasu domenowego). Ten zrzut ekranu należy włączyć do sprawozdania
<VirtualHost *:8080>
ServerName prog.imienazwisko.local
DocumentRoot /var/www/prog.imienazwisko.local/public_html
ErrorLog ${APACHE_LOG_DIR}/prog.imienazwisko.local_error.log
CustomLog ${APACHE_LOG_DIR}/prog.imienazwisko.local_access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName prog.imienazwisko.local
DocumentRoot /var/www/prog.imienazwisko.local/public_html
<Directory /var/www/prog.imienazwisko.local/public_html>
Require all denied
</Directory>
ErrorLog ${APACHE_LOG_DIR}/prog.imienazwisko.local_error.log
CustomLog ${APACHE_LOG_DIR}/prog.imienazwisko.local_access.log combined
</VirtualHost>

Teraz aktywujemy strony. Pierwsze polecenie to przejście (upewnienie się), że jesteśmy we właściwym katalogu. Ten zrzut ekranu należy włączyć do sprawozdania
$ cd /etc/apache2/sites-available
$ sudo a2ensite www.adrianzapala.local
$ sudo a2ensite prog.adrianzapala.local

- Konfiguracja usługi DNS
Póki co nasze dwie domeny są nieznane. Co prawda, wprowadziliśmy je do plików konfiguracyjnych domen, ale musimy również - a może przede wszystkim - poinformować
o tym serwer DNS. Dopiero wtedy będziemy móc z nich korzystać. W tym celu należy zmodyfikować dwa pliki: dla strefy przeszukiwania do przodu i dla strefy przeszukiwania do tyłu. Pierwszym plikiem
niech będzie plik strefy przeszukiwania do przodu. Edytujemy go poleceniem sudo nano /etc/bind/forward.adrianzapala.local.db nie zapominając o inkrementacji opcji Serial.
Ten zrzut ekranu należy włączyć do sprawozdania

Podobnie robimy dla pliku strefy przeszukiwania wstecz, sudo nano /etc/bind/reverse.adrianzapala.local.db nie zapominając o inkrementacji opcji Serial.
Ten zrzut ekranu należy włączyć do sprawozdania

W kolejnym kroku sprawdzamy pliki stref oraz przeładowujemy strefę. Ten zrzut ekranu należy włączyć do sprawozdania
$ sudo named-checkzone imienazwisko.local /etc/bind/forward.imienazwisko.local.db
$ sudo named-checkzone 0.16.172.in-addr.arpa /etc/bind/reverse.imienazwisko.local.db
$ sudo rndc reload imienazwisko.local
$ sudo rndc reload 0.16.172.in-addr.arpa
$ sudo systemctl reload apache2

Następnie przechodzimy do pliku apache2.conf i wprowadzamy prawidłową ścieżkę dla pliku index.html a więc pliku strony głównej serwisu www.imienazwisko.local (/var/www/www.imienazwisko.local/public_html)
oraz dla pliku index.php który znajdzie się w katalogu odpowiednim dla subdomeny prog.imienazwisko.local (/var/www/prog.imienazwisko.local/public_html). Musimy dodać zawrzeć dwa wpisy w sekcji Directory.
Edytujemy plik poleceniem sudo nano /etc/apache2/apache2.conf. Po tym restartujemy serwer poleceniem sudo systemctl restart apache2. Ten zrzut ekranu należy włączyć do sprawozdania

Następnie sprawdzamy programem nslookup czy wszystko działa dla dwóch subdomen. Ten zrzut ekranu należy włączyć do sprawozdania
$ sudo nslookup www
$ sudo nslookup prog

- Sprawdzenie strony z poziomu klienta
Wchodzimy do Lubuntu i uruchamiamy stronę zawartą w pliku index.html dla subdomeny www.imienazwisko.local. Strony dla drugiej subdomeny (prog.imienazwisko.local) jeszcze nie utworzyliśmy, zrobimy to w następnym kroku.
Ten zrzut ekranu należy włączyć do sprawozdania

- Instalacja interpretera PHP
W ostatnim kroku zainstalujemy interpreter języka PHP. Dzięki temu pisane strony internetowe będą mogły być interaktywne.
PHP jest językiem skryptowym, a skrypty są na serwerze interpretowane przez interpreter PHP po czym wynik w postaci kodu HTML jest dostarczany do przeglądarki użytkownika.
Użytkownik nie zobaczy więc nigdy źródła strony z kodem PHP. Interpreter PHP instalujemy
poleceniem sudo apt install php libapache2-mod-php.

Następnie w odpowiednim folderze plików dla subdomeny prog.imienazwisko.local tworzymy przykładowy skrypt PHP poleceniem sudo nano /var/www/prog.imienazwisko.local/public_html/index.php.
<?php
echo "Imię Nazwisko - subdomena <b>prog.imienazwisko.local</b>, data: " . "<b>" . date("l jS \of F Y h:i:s A") . "<b>";
?>

Wyświetlamy gotową stronę. Ten zrzut ekranu należy włączyć do sprawozdania
