Palvelinten hallinta – ICT4TN022 – 3005 Harjoitus 7

Tehtävän tarjoaa Tero Karvisen palvelinten hallinta kurssi:
http://terokarvinen.com/2020/configuration-managment-systems-palvelinten-hallinta-ict4tn022-spring-2020/

Oma Moduli

b) Oma moduli (iso tehtävä). Ratkaise jokin oikean elämän tai keksitty tarve omilla tiloilla/moduleilla. Voit käyttää Salttia tai muuta valitsemaasi modernia keskitetyn hallinnan ohjelmaa.

GitHubista löytyy Salt tilat, sekä muut konfigurointi tiedostot.
https://github.com/inframake/OmaModuli

Päätin lähteä konfiguroimaan Nginx webpalvelinta. Tarkemmin ottaen lähdin konfiguroimaan reverse proxya. Ohessa muutama linkki, josta voi lukea lisää reverse proxyn hyödyistä ja toiminnoista.
https://www.nginx.com/resources/glossary/reverse-proxy-server/
https://www.cloudflare.com/learning/cdn/glossary/reverse-proxy/
https://en.wikipedia.org/wiki/Reverse_proxy

Käytännössä lähdin konfiguroimaan Nginx:ää siten, että hakemalla virtuaalikoneeni IPv4-osoitetta, päädyn GitHubiin. Tarkoituksena on käyttää GitHubia ilman, että menisin niiden palvelimelle. Tähän olisin voinut käytännössä laittaa minkä tahansa nettisivun, johon Nginx vie hakemalla jotain tiettyä domainia. Yksi hyvä esimerkki tällaisestä on, kun käyttäjämäärä on kasvanut niin paljon, että haluaa kofiguroida uuden kerroksen käyttäjille, joka vähentää pyyntöjä pääpalvelimelle jolloin proxy palvelin toimii käytännössä välimuistina. Tämä luo paremman suorituskyvyn ja tasapainottaa palvelimen kuormitusta. Olen tehnyt tämän tehtävän samalla periaatteella, mutta minun konfigurointi vain uudelleen ohjaa nämä pyynnöt GitHubiin.

Ensin oli tehtävä SSL-sertifikaatti, jotta voin käyttää https-protokollaa käyttäviä sivustoja. (Tein myös konfigurointi tiedoston, johon riittää http-protokollaa käyttävä sivusto, tästä enemmän myöhemmin.)

Lähdin tekemään SSL-sertifikaattia seuraavalla ohjeella: https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Näin minulla oli SSL-sertifikaatti ja tiedot, mistä kansioista avain ja sertifikaatti löytyvät. Eli /etc/ssl/certs ja /etc/ssl/private kansioista.

Seuraavaksi lähdin tekemään /srv/salt hakemistoon uutta hakemistoa Nginx:ää varten. Sekä loin init.sls tiedoston juuri tehtyyn hakemistoon.
$ sudo mkdir /srv/salt/nginx
$ sudo nano /srv/salt/nginx/init.sls

init.sls tiedostoon lähdin kirjoittamaan YAML-kielellä tarvittavia tiloja, joilla saan asennettua ja hallittua Nginx webpalvelinta. Tähän tarvittiin aluksi vain kaksi tilaa.

init.sls

Tämän jälkeen ajoin Nginx moduulin.
$ sudo salt ‘*’ state.apply nginx

Asentamisen jälkeen kopion nginx.conf, sekä index.nginx-debian.html tiedosto /srv/salt/nginx hakemistoon, jotta näiden tiedostojen hallinta onnistuu saltin avulla.
$ sudo cp /etc/nginx/nginx.conf /srv/salt/nginx/nginx.conf
$ sudo cp /var/www/html/index.nginx-debian.html /srv/salt/nginx/index.nginx-debian.html

Tämän jälkeen muokkasin init.sls tiedostoa seuraavanlaiseksi.

init.sls

Seuraavaksi muokkasin hiukan nginx.conf ja index.nginx-debian.html tiedostoja ennen kuin ajoin tämän moduulin. Nginx.conf tiedostoon lisäsin tiedon, kun haetaan localhost, tällöin pääsee index.nginx-debian.html sivustolle. Muokkasin index.html sivustoa hiukan omanlaiseksi, jossa käytin jinjaa apuna.

nginx.conf
index.ngnix-debian.html

Näiden muutosten jälkeen ajoin moduulin ja käynnistin uudelleen ngnix palvelimen.
$ sudo salt ‘*’ state.apply nginx
$ sudo systemctl restart nginx

Tämän jälkeen tarkistin toimivuuden testaamalla hakemalla localhost virtuaalikoneella.

Lopputulos index.ngnix-debian.html sivusta.

Kaikki toimii, joten on hyvä jatkaa eteenpäin.

Seuraavaksi tutustuin seuraaviin sivuihin, joiden perusteella lähdin konfiguroimaan reverse proxya.
http://nginx.org/
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching

Seuraava askel oli poistaa /etc/nginx/sites-enabled/default ja /etc/nginx/sites-available/default tiedostot, jotta voin konfiguroida helpommin proxy.conf tiedostoa. Tämän jälkeen loin vielä proxy.conf tiedoston /srv/salt/nginx hakemistoon.
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo rm /etc/nginx/sites-available/default
$ sudo nano /srv/salt/nginx/proxy.conf

Seuraavaksi muokkasin init.sls tiedostoa seuraavanlaiseksi

init.sls

Eli loin ja hallitsen salt hakemistossa olevalla proxy.conf tiedostolla /sites-available/proxy.conf ja /sites-enabled/default tiedostoja. Salt kansiossa oleva proxy.conf tiedosto löytyy ja hallitsee nyt siis molemmissa (sites-available ja enabled) hakemistoissa. Tämän olisi voinut tehdä sym.link tilalla, mutta en saanut sitä toimimaan, joten sain ratkaistua asian yllä olevalla tavalla, joka ajaa käytännössä samaa asiaa.

Seuraavaksi päästäänkin tekemään proxy.conf tiedostoon asetuksia.

proxy.conf

Ensinnäkin, palvelin kuuntelee 443 ssl porttia, koska käytetään suojattua yhteyttä. Palvelimen nimeksi laitoin salt-masterin IPv4-osoitteen, tässä tapauksessa se on 192.168.10.38. Tämä helpottaa testaamista, koska tällöin palvelimen nimi muodostuu testaajan oman koneen mukaan. Seuraavaksi kerroin mistä sertifikaatti ja tämän avain löytyy ja asetin, että välimuisti jaetaan kaikkien työprosessien kesken, sekä asetin tälle timeoutin. Seuraavaksi asetin minne logit tallentuu. Tämän jälkeen asetin proxy_pass:in github sivustolleni ja määritin Host $proxy_host komennolla, joka hakee hostin proxy_pass kohdasta. X-Forwarded-Proto $scheme antaa tiedon proxy palvelimelle alkuperäisen clientin pyynnöstä, oli se joko http- tai https-protokollasta peräisin. Asetin X-Real-IP headerin clientin IP-osoitteeseen (“$remote_addr” hakee käyttäjän IP-osoitteen automaattisesti.), jotta proxy palvelin osaa tehdä päätöksiä tai kirjautua tämän informaation perusteella. XForwarded-For listaa nämä IP-osoitteet, jotka ovat käyttäneet proxy palvelinta.

Tämän jälkeen ajoin moduulin muutaman kerran ja käynnistetään Nginx uudestaan.
$ sudo salt ‘*’ state.apply nginx
$ sudo systemctl restart nginx

Testataan lopputulos. Eli haetaan IP-osoittetta 192.168.10.38, sekä salatulla yhteydellä https://192.168.10.38, koska kyseessä on Firefox-selain.

Kun ei käytä salattua yhteyttä, tällöin pääsee index.html sivustolle

Salatulla yhteydellä pääsee käyttämään GitHubia

Tehdään sama Chromella. Chrome tunnistaa heti, että kyseessä on https-protokollaa käyttämä domain.

Ja näin homma toimii.

Näin lopuksi vielä konfigurointi tiedosto, jos käytössä ei ole SSL-sertifikaattia. Tällöin on otettava sivusto, jossa ei käytetä https-protokollaa. Tässä käytän Teron terokarvinen.com sivua.

http-proxy.conf

Lopputulos on seuraava:

Homma toimii samalla periaatteella kuin salatulla yhteydellä.

Lähteet:

http://terokarvinen.com/2020/configuration-managment-systems-palvelinten-hallinta-ict4tn022-spring-2020/

https://en.wikipedia.org/wiki/Reverse_proxy

https://www.cloudflare.com/learning/cdn/glossary/reverse-proxy/

http://nginx.org/http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching

http://nginx.org/

https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04

One thought on “Palvelinten hallinta – ICT4TN022 – 3005 Harjoitus 7

Leave a comment

Design a site like this with WordPress.com
Get started