h3 Hello Web Server

Oma Host kokoonpanoni:

Komponentti Kuvaus Lisätiedot
Emolevy MSI B550-A PRO ATX, AM4
Prosessori AMD Ryzen 9 5900X 12-Core Processor 3.70 GHz
RAM G.Skill Ripjaws V 32GB (4x8GB) DDR4 3600MHz, CL 16, 1.3
Näytönohjain Sapphire PULSE AMD Radeon RX 7900 GRE 16GB
Kovalevy Kingston 1TB A2000 NVMe PCIe SSD M.2
Kovalevy Crucial 512GB MX100 SSD
Kovalevy Crucial 256GB MX100 SSD
Virtalähde Asus 750W TUF Gaming Gold ATX 80 Plus Gold
Kotelo Phanteks Enthoo Pro Full Tower

Käyttöjärjestelmä: Windows 11 Pro 23H2

x) Lue ja tiivistä

The Apache Software Foundation 2023: Apache HTTP Server Version 2.4 Documentation: Name-based Virtual Host Support

Karvinen 2018: Name Based Virtual Hosts on Apache – Multiple Websites to Single IP Address
Tätä on vaikea tiivistää, kun on kohtuullisen tiivis sivu jo valmiiksi:

a) Testaa, että weppipalvelimesi vastaa localhost-osoitteesta. Asenna Apache-weppipalvelin, jos se ei ole jo asennettuna.

Aloitus 5.9.2024 klo 12:55

Apache2 ehdin asentaa eilen tunnilla

sudo apt-get install apache2

Laitan seuraavan komennon, jotta apache2 käynnistyy, kun käyttöjärjestelmä käynnistyy:

sudo systemctl enable –now apache2

apache2now

Seuraavaksi kokeillaan localhostia komentokehotteessa:

curl http://localhost

Localhost toimii komentokehotteessa:

toimii

Kokeillaan vielä Firefoxilla:

toimii2

Myös Firefoxilla toimii.

Klo 13:04 valmis, aikaa kului 9min

b) Etsi lokista rivit, jotka syntyvät, kun lataat omalta palvelimeltasi yhden sivun. Analysoi rivit (eli selitä yksityiskohtaisesti jokainen kohta ja numero, etsi tarvittaessa lähteitä).

Aloitus 5.9.2024 klo 13:10

Yritetään etsiä lokista tietoja: “sudo journalctl” ei näytä ainakaan vielä tietoja.

imagejournalctl

Kokeillaan hakea lokit toista kautta:

sudo tail /var/log/apache2/access.log

“tail” näyttää lokit tiedoston loppupäästä.

imagevarlog
Lokien analysointi onkin hieman hankalampi asia, yritän lonkalta ensin ja sitten haen tietoa internetistä.

Vasemmalla näkyy 127.0.0.1, tämä on localhost IP-osoite.
Päivämäärän jälkeen lukee GET, en tiedä mitä tässä tarkoittanee, paitsi jonkun asian hakemista.
Sen jälkeen /icons/openlogo-75.png, selkeästi joku kuvatiedosto logosta.
“Mozilla/5.0”, olisikohan Firefoxin versio, tai tuo “Firefox/115.0”.

Arvailut sikseen, aika etsiä tietoa. Kohtalaiset ohjeet löysin täältä: https://www.sumologic.com/blog/apache-access-log/.
Lisäksi käytin myös tätä: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status.
Sekä: https://disjoint.ca/til/2016/05/17/how-to-determine-the-file-size-of-a-remote-http-object/.

Eli ensimmäisenä 127.0.0.1 IP osoite, josta pyyntö tuli.
Tässä välissä itsestäänselvyytenä päivämäärä, sekä aika ja aikavyöhyke.
GET / HTTP/1.1 pyynnön tyyppi, sekä “GET” ja “HTTP1.1” välissä se mitä pyydetään.
200 HTTP vastauksen status koodi. “200” viittaa onnistuneeseen pyyntöön. Kyseessä on “GET” tyyppinen pyyntö, jolloin 200 tarkoittaa, että resurssi on onnistuneesti haettu ja toimitettu.
6040 asiakkaalle palautetun objektin koko byteinä, eli tavuina, tässä tapauksessa 6040 tavua, eli 6040 bytes.
http://localhost viittaa osoitteeseen, josta pyyntö on tullut.
Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 on ympäristö, josta käyttäjä käyttää kyseistä palvelua. Tässä tapauksessa Mozilla Firefox Linuxilla.

Valmis klo 13:49, aikaa kului 39min

Unohdin katsoa vielä “sudo tail /var/log/apache2/error.log”:lla virhelokit. Teen sen nyt 6.9.2024 klo 8:30

imageapacheerrorlog

https://stackify.com/apache-error-log-explained/ täältä löytyy tietoa näistä virhelokeista.
https://httpd.apache.org/docs/2.4/mpm.html myös täältä.
https://httpd.apache.org/docs/current/logs.html

Kuvassa näkyy:
mpm_event eli Multi-Processing Modules, “notice” eli ei vakava virhe, mutta lähinnä ilmoitusasia
pid eli prosessin id numero
tid eli “thread id”
core eli ydin

Valmis klo 8:44 aikaa kului 14min

c) Etusivu uusiksi. Tee uusi name based virtual host. Sivun tulee näkyä suoraan palvelimen etusivulla http://localhost/. Sivua pitää pystyä muokkaamaan normaalina käyttäjänä, ilman sudoa. Tee uusi, laita vanhat pois päältä. Uusi sivu on hattu.example.com, ja tämän pitää näkyä: asetustiedoston nimessä, asetustiedoston ServerName-muuttujassa sekä etusivun sisällössä

Aloitus 6.9.2024 klo 9:01

Komennolla “echo “hattu.example.com” sudo tee /var/www/html/index.html” lähdetään päällekirjoittamaan index.html tiedostoa.

image

Lisätään Name Based Virtual Host:

sudoedit /etc/apache2/sites-available/hattu.example.com.conf

Lisätään tiedot:

imageconffi

Ajetaan “sudo a2ensite hattu.example.com” ja käynnistetään apache2 uudestaan komennolla “sudo systemctl restart apache2”

imagea2ensite-restart

Kokeillaan tehdä web sivu normaalina käyttäjänä:

mkdir -p /home/xubuntu/publicsites/hattu.example.com/

“Permission denied”
image-denied

Vaihdoin “xubuntu” nimen “santeri”:ksi. Nyt kansioiden luonti onnistui. Täytyy vain käydä vielä muokkaamassa .conf tiedostoon xubuntujen tilalle santeri

sudoedit /etc/apache2/sites-available/hattu.example.com.conf

echo hattu > /home/santeri/publicsites/hattu.example.com/index.html

Nyt voidaan testata web sivua:

curl -H ‘Host: hattu.example.com’ localhost

Ei oikeutta tähän resurssiin

imagedenied-2

Luon uudestaan kansion: “mkdir -p /home/santeri/publicsites/hattu.example.com/” ja varmuudeksi “echo hattu > /home/santeri/publicsites/hattu.example.com/index.html”

Edelleen sama error, ei oikeutta.

Ajoin uudelleen samat komennot tuolta alusta lähtien, nyt “curl -H ‘Host: hattu.example.com’ localhost”, ohjeen “Default” tekstiin kirjoitin “hattu”, nyt komento antaa seuraavan:
imagehattu

Ja “curl localhost” seuraavaa:
image-curl.local

Tauko klo 9:46, aikaa käytetty 45min
Jatkuu klo 10:04

Tuossa tauolta palatessa katsoin seuraavaa videota: https://www.youtube.com/watch?v=1CDxpAzvLKY. Videon innoittamana menin “sudoedit /etc/hosts” ja lisäsin sinne localhostin jälkeen seuraavat rivit:

127.0.1.1 hattu
127.0.0.1 hattu.example.com

imagehosts

Nyt näyttää toimivan (muutin localhostin Defaultiksi välissä)

image-toimii

imagefox1

imagefox2

Valmis klo 10:14, aikaa meni yhteensä 55min

e) Tee validi HTML5 sivu

Aloitus klo 10:17

Tähän tietenkin Karvisen (2012) ohjeet: https://terokarvinen.com/2012/short-html5-page/

Menen kansioon /home/santeri/publicsites/hattu.example.com/ ja sieltä muokkaan “micro edit index.html”

image-html5
Nyt hattu.example.com näyttää tältä:

imagefox3

Valmis klo 10:28, aikaa meni 11min

f) Anna esimerkit ‘curl -I’ ja ‘curl’ -komennoista. Selitä ‘curl -I’ muutamasta näyttämästä otsakkeesta (response header), mitä ne tarkoittavat

ALoitus klo 10:30, kahvin keiton lomassa luen lisää curleista

https://curl.github.io/curl-cheat-sheet/http-sheet.html Kätevä muistikartta “curl”:n käytöstä.
https://curl.se/docs/tutorial.html <- Täällä myös hyvin selitetty asioita.

“curl” palauttaa web-palvelimen pääsivun:

image-curl

“curl -I” palauttaa web-sivun yksityiskohtaisia tietoja:

imagecurl-I

Date = päivämäärä
Server = palvelin, versio ja käyttöjärjestelmä
Last-Modified = viimeksi muokattu pvm, klo
Etag = Entity Tag, eli kyseisen resurssin identifiointitunnus. Auttaa vähentämään esimerkiksi kuormitusta ja turhia päällekkäisiä päivityksiä: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
Accept-Ranges = kertoo tässä tapauksessa, että range requestit vastaanotetaan tavuina: https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
Content-Length = messagen pituus tavuina: https://reqbin.com/req/curl/b3tqmhxa/post-request-with-content-length-header
Vary = en aivan täysin ymmärrä tämän toimintaa, mutta se toimii jonkunlaisena validaattorina: https://www.smashingmagazine.com/2017/11/understanding-vary-header/
Content-Type = kertoo minkälaista sisältöä sivu sisältää. Tässä tapauksessa sekä tekstiä, että html:ää.

Kokeilin vielä käydä muuttamassa web-sivun tekstiä, jotta saan ETagin muuttumaan:

imageetag

Valmis klo 11:09, aikaa kului 39min

Bonus, “curl -i” palauttaa sekä “curl”:n, että “curl -I”:n (tätä riviä muokattu myöhemmin keskeneräisen lauseen vuoksi)

imagecurliii

m) Vapaaehtoinen, suosittelen tekemään: Hanki GitHub Education -paketti

Tämän hankin GitHubin ohjeiden mukaan.

edit) 12.9.2024

Jälkikäteen tajusin, kuinka kohdan e) HTML5-sivu validoidaan oikein.
Tässä kuvassa HTML-koodia muokattu niin, että validaattori päästää läpi:

imagevalidator

Validaattori löytyy osoitteesta: https://validator.w3.org/.
Välilehdellä “Validate by Direct Input” pystyy syöttämään suoraan HTML-koodin tekstikenttään.

Lähteet

Fizpatrick, S. 2020. Understanding the Apache Access Log: View, Locate and Analyze. Luettavissa: https://www.sumologic.com/blog/apache-access-log/. Luettu 5.9.2024
Karvinen, T. 2012. Short HTML5 page. Luettavissa: https://terokarvinen.com/2012/short-html5-page/. Luettu 6.9.2024 Karvinen, T. 2018. Name Based Virtual Hosts on Apache – Multiple Websites to Single IP Address. Luettavissa: https://terokarvinen.com/2018/04/10/name-based-virtual-hosts-on-apache-multiple-websites-to-single-ip-address/. Luettu 5.9.2024
The Apache Foundation. 2024. Name-based Virtual Host Support. Luettavissa: https://httpd.apache.org/docs/2.4/vhosts/name-based.html. Luettu 5.9.2024


Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvinen 2012: Linux kurssi, http://terokarvinen.com

Kirjoittanut Santeri Vauramo, 2024

← Back