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
- Name-based virtual hostingissa palvelin luottaa asiakkaan ilmoittamaan isäntänimeen HTTP-otsikoissa
- Name-based virtual hostingissa moni isäntä voi käyttää samaa IP-osoitetta
- Name-based virtual hosting usein yksinkertaisempaa, kuin IP-based Virtual Host
- Tulisi aina käyttää Name-based virtual hostingia, jos suinkin laitteisto ei muuta vaadi
- Historialliset syyt eivät enää päde IP-based Virtual hostingiin
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:
- Yleensä käytössä on yksi IP-osoite ja monta web-sivua hostattavana, Apachen kanssa voi pitää useita verkkotunnuksia yhdellä IP-osoitteella
- Asennetaan apache2 ja konfiguroidaan web palvelin
$ sudo apt-get -y install apache2
$ echo “Default”|sudo tee /var/www/html/index.html - Lisätään uusi Name Based Virtual Host
$ sudoedit /etc/apache2/sites-available/pyora.example.com.conf
$ cat /etc/apache2/sites-available/pyora.example.com.conf
$ sudo a2ensite pyora.example.com - Uudelleenkäynnistetään eli restartataan apache2
$ sudo systemctl restart apache2
- Luodaan web sivu normaalikäyttäjänä
$ mkdir -p /home/xubuntu/publicsites/pyora.example.com/
$ echo pyora > /home/xubuntu/publicsites/pyora.example.com/index.html - Viimeisenä koeajo
$ curl -H ‘Host: pyora.example.com’ localhost
$ curl localhost
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
Seuraavaksi kokeillaan localhostia komentokehotteessa:
curl http://localhost
Localhost toimii komentokehotteessa:
Kokeillaan vielä Firefoxilla:
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.
Kokeillaan hakea lokit toista kautta:
sudo tail /var/log/apache2/access.log
“tail” näyttää lokit tiedoston loppupäästä.
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
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. |
Lisätään Name Based Virtual Host:
sudoedit /etc/apache2/sites-available/hattu.example.com.conf
Lisätään tiedot:
Ajetaan “sudo a2ensite hattu.example.com” ja käynnistetään apache2 uudestaan komennolla “sudo systemctl restart apache2”
Kokeillaan tehdä web sivu normaalina käyttäjänä:
mkdir -p /home/xubuntu/publicsites/hattu.example.com/
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
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:

Ja “curl localhost” seuraavaa:

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
Nyt näyttää toimivan (muutin localhostin Defaultiksi välissä)
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”
Nyt hattu.example.com näyttää tältä:
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:
“curl -I” palauttaa web-sivun yksityiskohtaisia tietoja:
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:
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)
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:
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



















