Serwer HTTP, cz. 2

Wymagana ilość zrzutów do sprawozdania: 10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10). Jak prawidłowo sporządzić sprawozdanie?
  1. Wprowadzenie do laboratorium
  2. 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ą.
  3. Czynności wstępne
  4. Na początku aktualizujemy repozytoria i pakiety poleceniami sudo apt update oraz sudo apt upgrade.
  5. Resetowanie serwera Apache
  6. 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. 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:

  7. Dodanie nowego portu
  8. 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.

  9. Katalogi i strony strony www
  10. 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>
    

  11. Konfiguracja poszczególnych stron
  12. 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: 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
    

  13. Konfiguracja usługi DNS
  14. 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
    

  15. Sprawdzenie strony z poziomu klienta
  16. 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

  17. Instalacja interpretera PHP
  18. 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


© mgr inż. Adrian Zapała