Linux palvelimet, h3: Apache, PHP, lokit

Asensin ja testasin onnistuneesti Apachen. Asensin PHP:n, mutta en saanut sitä toimimaan oikein. Tein pienen painoindeksilaskurin ja aiheutin virheen Apachen asetustiedostoon. Analysoin Apachen lokia onnistuneesta ja epäonnistuneesta sivulatauksesta.

Tässä harjoituksessa oli monta eri kohtaa, joista valittiin viisi. Valitsin kohdat:

a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.

b) Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit.Tee jokin seuraavista (yksi riittää, useampi vapaaehtoisena lisätehtävänä):

c) Tee virhe weppipalvelimella ajettavaan koodiin (esim PHP tai Python), etsi se lokista ja analysoi tuo lokirivi

d) Tee virhe johonkin Apachen asetustiedostoon, etsi ja analysoi tuo rivi. Etsimiseen sopivat esimerkiksi Apachen omat lokit, syslog sekä ‘apache2ctl configtest’.

f) Tee palvelimella ajettava weppiohjelma, joka tekee käyttäjälle jonkin yksinkertaisen laskun (esim. painoindeksi BMI)

Harjoituksen ohjeet kokonaisuudessaan löytyy osoitteesta http://terokarvinen.com/2017/aikataulu-%E2%80%93-linux-palvelimet-ict4tn021-7-ti-ja-6-to-alkukevat-2018-5-op kohdasta h3.

Apachen asennus ja testaus

Aloitan harjoituksen asentamalla Apachen. Seuraan tässä ohjeita, jotka kuuluvat kurssin materiaaliin ja ovat löydettävissä täältä (1)

Ensin etsin, että löytyykö Apache-nimistä pakettia. Käytin tähän “apt-cache search apache” -komentoa ja löysin listalta apache2:n. Asensin sen “sudo apt-get install apache2”. Asennettuani Apachen avasin nettiselaimen (Firefox) ja kirjoitin osoiteriville osoitteen “http://localhost”. Sivut näyttivät tältä:

local_host

Seuraavaksi tarkistin ip-osoitteeni “ip addr” – komennolla. Saatuani sen, kirjoitin selaimen osoiteriville tällä kertaa ulkoverkkoon menevän ip-osoitteen ja sama sivu ilmestyi eteeni.

Testasin DNS:n toimintaa kirjoittamalla terminaaliin “host” sekä perään ip-osoitteeni. Tässä vaiheessa sain kuitenkin ilmoituksen: “Host <ip-osoite> in-addr.arpa. not found: 3(NXDOMAIN). Kokeilin seuraavaksi host-komentoa sisäisellä ip-osoitteella, jolloin tuota ilmoitusta ei enää tullut. Sen sijaan näytti siltä, että DNS toimisi.

Seuraavaksi piti ottaa käyttöön Userdir. Tämän tein komennolla “sudo a2enmod userdir”, jonka jälkeen tulee ilmoitus, jossa käsketään uudelleenkäynnistämään palvelin (Apache), jotta uusi konfiguraatio tulee toimimaan. Uudelleenkäynnistys tapahtui komennolla “sudo systemctl restart apache2.service”.

Testasin sivun toimintaa kirjoittamlla selaimen osoiteriviin “http://localhost/~jaanaputro&#8221;. Tuloksena oli:

nettisivu

Jotta nettisivua voi testata, piti luoda “public_html” -niminen kansio ja sinne sisältöä luomalla. Tämä tapahtui käyttämällä ensin komentoa “cd”, jotta varmasti ollaan kotihakemistossa. Sitten tein komennon “mkdir public_html”. Menin kansioon komennolla “/home/jaanaputro/public_html” ja loin html-tiedoston komennolla “nano index.html”. Kirjoitin yksinkertaisen html-tiedoston ja tallensin sen “CTRL + x”, “y”, “Enter”:

testi_html

Päivitin selaimessa sivuni ja nyt se näytti tältä:

testinettisivut

Palvelimen nettisivuilla surffailu ja lokien tarkasteleminen

Päätin mennä osoitteeseeni http://localhost/~jaanaputro/bmi.html. Avasin terminaalista Apachen lokihistorian komennolla “tail -F /var/log/apache2/access.log”. Lokissa oli rivi: <ip-osoite> – – [04/Feb/2018:21:08:41 +0200] “GET /~jaanaputro/bmi.html HTTP/1.1” 200 691 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0”.

Tässä siis kerrottiin, mikä on palvelimen ip-osoite, sekä päivämäärä, kellonaika ja aikavyöhyke. Tämän jälkeen kerrottiin kohdesivun nimi ja todettiin, että se noudattaa HTTP/1.1 protokollaa. 200 tarkoitti onnistunutta latausta. En tiennyt, mitä 691 tarkoitti ja googlettamalla löysin lähinnä, että se tarkoitti jotain virhekoodia esimerkiksi käyttäjänimeen tai salasanaan liittyen. Seuraavaksi rivi antoi Mozillan versionumeron ja suluissa oli ehkä minun koneen Ubuntun ja Linuxin verio. Tuo Gecko-osio taas kertoi, että selain perustuu Geckoon ja sen perässä oleva numerosarja on geckotrail. Geckotrailin numerosarja 20100101 kertoi, että kyseessä on työasema, jolla sivuille mentiin. Tähän löysin tiedon täältä (2). Lopuksi oli Firefoxin versio.

Yritin saada Apachen error.logista katsottua virheellisen sivulatauksen. Ensin kirjoitin selaimen osoiteriville “http://localhost/~jaanaputro/tmi&#8221; (tarkoituksella virheellinen loppu). Selaimeen ilmestyi sanoma “Not Found” ja menin error.logiin: “tail -F /var/log7apache2/error.log”. Sieltä ei kuitenkaan löytynyt merkintöjä, joten palasin tuonne aiempaan access.logiin. Nyt siellä oli seuraavanlainen rivi:
<ip-osoite> – – [04/Feb/2018:21:23:01 +0200] “GET /~jaanaputro/tmi HTTP/1.1” 404 505 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0”.

Tässä oli uutta vain nuo koodit 404 ja 505. 404 tarkoittaa, että selain pystyi keskustelemaan palvelimen kanssa, mutta palvelin ei löytänyt hakemaa sivua. 505 tarkoittaa, että palvelin ei tue HTTP versiota, joka esitettiin pyynnössä (avata sivu). Lähde molempiin löytyi täältä (3).

Virheen aiheuttaminen palvelimella ajettavaan PHP-koodiin ja virheilmoituksen analysoiminen (yritys)

Jotta pystyin aiheuttamaan virheen, tuli minun asentaa PHP. Tämä onnistui näiden (4) ohjeiden avulla. Ohjeen mukaan annoin komennon “sudo apt-get -y install libapache2-mod-php”. Sitten uudelleenkäynnistin palvelimen komennolla “sudo systemctl restart apache2.service”. Tämän jälkeen muutin index.html -tiedostoni PHP-muotoon komennolla “mv index.html index.php”. Seuraavaksi tein ohjeiden mukaan komennon “sudoedit /etc/apache2/mods-available/php7.0.conf”. Sitten CTRL+X ja Y+Enter. Tämän jälkeen uudelleenkäynnistin palvelimen. Käytin “nano index.php” -komentoa, jotta voisin kirjoittaa jotain PHP:llä. Tein seuraavanlaisen koodin:

php_testi_koodi

Tämä ei kuitenkaan toiminut odotetulla tavalla, enkä edes saanut sitä toimimaan lopulta. Tällainen oli tulos nettiselaimella:

php_testi

Yritin monen eri tutoriaalin avulla saada tuota toimimaan oikein, mutta se vain ei toiminut. Yritin myös asentaa php-mysql:n, jos se olisi auttanut. Ei auttanut ollenkaan palvelimen uudelleenkäynnistämisen jälkeenkään. Apachen error.logissakaan ei näkynyt mitään tuohon viittavaa, joten en saanut sitten testattua tuota virhettä.

Palvelimella ajettava web ohjelma

Tein painoindeksilaskurin, johon annetaan käyttäjän pituus metreinä ja paino kiloina. Ohjelma laskee käyttäjän painoindeksin aika monen desimaalin tarkkuudella. Otin neuvoja täältä (4) ja omasta muistista, jotta sain tehtyä tuon. Ensin loin uuden bmi.html-tiedoston, jonne aloin sitten kirjoittaa html:ää ja javascriptiä. Testatessani ohjelmaa koin lähinnä omasta muistamattomuudesta johtuneita virheitä. En muistanut, että painoindeksi lasketaan vaikkapa metrien mukaan, ei senttimetrien. Tämän takia vastaus aluksi heitti pahasti. Korjasin virheen muuttamalla “Anna pituus (cm)” –> “Anna pituus (m)”. Loppujen lopuksi koodinpätkä näytti tältä:

laskuri

Lopputuloksena oli:

laskuritesti

 

Tee virhe Apachen asetustiedostoon ja analysoi

Tässä otin mallia tuosta aiemmasta sudoedit-komennosta ja nyt käytin sitä näin: “sudoedit /etc/apache2/apache2.conf”. Käytin tabulaattoria muutaman kerran, jotta sain kaikki mahdolliset vaihtoehdot esille. Painoin enter. Poistin kommentoinnin ensimmäiseltä riviltä (# on kommentti). CTRL+X ja Y+Enter. Yritin uudelleenkäynnistää palvelimen, mutta sain ilmoituksen: “Job for apache2.service failed because the control process exited with error code. See “systemctl status apache2.service” and “journalctl -xe” for details”. Käytin tuota “systemctl status apache2.service” -komentoa ja sain seuraavanlaisen ilmotuksen:

apache_fail

Alussa kerrotaan, ettei Apache käynnistynyt oikein (kaikki missä ei ole päivämäärää). Seuraavilla riveillä kerrotaan, että konfiguraatiotesti epäonnistui syntaksivirheen (rivillä 1, tiedostossa /etc/apache2/apache2.conf) takia. Tuloste kertoo, että Apachen error logissa voi olla lisätietoa. Menen error logiin “tail -F /var/log/apache2/error.log” ja loki näyttää seuraavanlaista riviä: [Mon Feb 05 00:05:11.846495 2018] [mpm_event:notice] [pid 11468:tid 139798259722112] AH00491: caught SIGTERM, shutting down. Ensin ilmoitetaan päivämäärä ja kellonaika tarkasti. Tämän jälkeen on hankala sanoa, mitä tuo error.log yrittää sanoa, sillä tuolla aiemmin kerrottiin jo aika tarkasti, missä oli vika. Menin siis takaisin tuonne Apachen konfiguraatioon ja kommentoin ylimmän rivin taas pois. Tämän jälkeen uudelleenkäynnistin palvelimen ja se onnistui taas normaalisti.

Lähteet

Pohjana Tero Karvinen 2018: Linux kurssi, http://terokarvinen.com

Karvinen, Tero: Oppitunnit 2018-01-30, Linux palvelimet -kurssi

Tekstin seassa olevat lähteet on numeroitu, jotta ne olisi löydettävissä täältä lähteet-osiosta hyvässä järjestyksessä.

(1) Karvinen Tero, Install Apache Server on Ubuntu, 2008:   http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4 

(2) MDN Webdocs, Firefox user agent string reference – HTTP | MDN, 2018:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox

(3) 404 Error Pages, 2012: http://www.404errorpages.com/

(4) Karvinen Tero, Read MySQL database with PHP – php-pdo, 2016:
http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo

(5) Stackoverflow, Basic BMI Calculator HTML/Javascript, 2014:   https://stackoverflow.com/questions/21698044/basic-bmi-calculator-html-javascript

 

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s