Siirry suoraan sisältöön

Evästeasetukset

Valitse, mitä evästetyyppejä sallit. Voit muuttaa valintaasi milloin tahansa jokaisen sivun alareunassa olevasta kohdasta Evästeasetukset. Tietosuojaseloste

Välttämättömät

Aina käytössä

Tarvitaan sisäänkirjautumiseen, ostoskorin säilyttämiseen ja valintojesi muistamiseen. Nämä ovat aina käytössä.

Mitkä evästeet?
  • weboke_sessie, weboke_klant, weboke_remember: istuntosi ja sisäänkirjautuneena pysyminen
  • weboke_basket: ostoskorisi
  • wkBtwIncl: hintojen näyttäminen verollisina tai verottomina
  • wok_cookies: evästevalintasi, 12 kuukautta

Mittaa, mikä mainos johtaa käyntiin tai tilaukseen, jotta emme maksa mainoksista, joista ei ole hyötyä.

Mitkä evästeet?
  • Google Ads Google Tag Managerin kautta (_gcl_au, _gcl_aw), enintään 90 päivää
  • OpenAI Ads, mainokset ChatGPT-palvelussa
  • wok_aff: minkä kumppanin kautta tulit meille (kumppaniohjelma), 60 päivää

4,6

Maa ja kieli

Jokaisella maalla on oma sivustonsa, jossa on kyseisen maan hinnat ja ALV.

Näytä

Verkkopalvelin nginxillä

Moduuli 7: Verkkotunnus, verkkopalvelin ja https · Lukuaika: 12 minuuttia

Tavoite: Tämän oppitunnin jälkeen osaat asentaa nginxin, tehdä sivuston ja reverse proxyn server blockilla, testata ja ladata asetukset turvallisesti uudelleen sekä asettaa webrootin oikeudet oikein.

Keskeiset käsitteet: nginx, server block, sites-available ja sites-enabled, conf.d, listen, server_name, root, index, try_files, default server, nginx -t, reload, reverse proxy, proxy_pass, Host, X-Forwarded-For, X-Forwarded-Proto, webroot, PHP-FPM

Mitä verkkopalvelin tekee

Verkkopalvelin kuuntelee porttia 80 (http) ja 443 (https), ottaa vastaan selainten pyyntöjä ja lähettää jotain takaisin: tiedoston levyltä (staattinen sivusto) tai sen takana toimivan ohjelman vastauksen (PHP, Node.js-sovellus, kontti). Jälkimmäisessä tapauksessa verkkopalvelinta kutsutaan nimellä reverse proxy: se on edessä, hoitaa https:n ja välittää pyynnön sovellukselle, joka kuuntelee vain osoitetta 127.0.0.1.

Linuxissa tunnetuimmat verkkopalvelimet ovat nginx ja Apache, ja Caddy (oppitunti 7.4) on moderni vaihtoehto, joka hoitaa varmenteet itse. Tällä oppitunnilla käytetään nginxiä: se löytyy jokaisesta jakelusta, käyttää vähän muistia ja on oletus monissa ohjeissa.

Asennus ja ensimmäinen silmäys

anna@web1:~$ sudo apt install nginx
anna@web1:~$ systemctl status nginx
anna@web1:~$ curl -I http://localhost
HTTP/1.1 200 OK
Server: nginx/1.26.3
Content-Type: text/html

(Versionumero on esimerkki.) Muista palomuuri: porttien 80 ja 443 pitää olla auki (oppitunti 5.2). Kun nyt menet osoitteeseen http://192.0.2.10, näet nginxin tervetulosivun.

Asetukset ovat hakemistossa /etc/nginx/:

PolkuMitä
nginx.confpäätiedosto; yleensä jätät sen rauhaan
sites-available/yksi tiedosto sivustoa kohden (Debian ja Ubuntu)
sites-enabled/linkit (symlinkit) käytössä oleviin sivustoihin
conf.d/*.conferilliset asetukset, jotka ladataan aina
snippets/palat, joita käytät uudelleen useassa sivustossa

sites-available ja sites-enabled ovat Debianin ja Ubuntun tapa: sivuston saa päälle tai pois tekemällä tai poistamalla linkin, eikä itse tiedostoa tarvitse poistaa.

Ensimmäinen sivusto

Tee sivustolle hakemisto ja testisivu:

anna@web1:~$ sudo mkdir -p /var/www/example.com
anna@web1:~$ echo '<h1>Het werkt</h1>' | sudo tee /var/www/example.com/index.html

Tee sitten server block: yhden sivuston kuvaus.

# /etc/nginx/sites-available/example.com
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;
}

Lue se näin:

  • listen 80; ja listen [::]:80; saavat nginxin kuuntelemaan sekä IPv4:ää että IPv6:ta. Jos unohdat toisen rivin, AAAA-tietueesi ei toimi (oppitunti 7.1).
  • server_name kertoo, mitä nimiä tämä lohko koskee. nginx katsoo jokaisesta pyynnöstä nimen, jota selain pyytää (Host-otsake), ja valitsee siihen sopivan lohkon.
  • root on tiedostojen hakemisto, index tiedosto, joka näytetään hakemistoa pyydettäessä.
  • try_files kokeilee pyydettyä tiedostoa, sitten hakemistoa ja antaa muuten 404:n. Ilman tällaista riviä väärä määritys voi näyttää enemmän kuin haluat.
  • Omat lokitiedostot sivustoa kohden helpottavat etsimistä paljon (oppitunti 6.2).

Ota sivusto käyttöön, poista oletussivusto, testaa ja lataa uudelleen:

anna@web1:~$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
anna@web1:~$ sudo rm /etc/nginx/sites-enabled/default
anna@web1:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
anna@web1:~$ sudo systemctl reload nginx
anna@web1:~$ curl -I http://example.com
HTTP/1.1 200 OK

Tee komennosta nginx -t vakiotapa ennen jokaista reloadia. Virheen sattuessa se kertoo tiedoston ja rivin, ja käynnissä oleva sivustosi jatkaa häiriöttä. Jos käynnistät uudelleen testaamatta, nginx ei virheen takia enää käynnisty ja kaikki sivustosi ovat alhaalla (oppitunti 6.1).

Default server: mitä tuntematon nimi saa?

Mitä tapahtuu, jos joku pyytää palvelintasi nimellä, jota ei ole missään server_name-rivissä, tai pelkällä IP-osoitteella? Silloin nginx valitsee default serverin: lohkon, jossa listen-rivin perässä on default_server, tai muuten ensimmäisen lohkon, johon se törmäsi. Jos asiaa ei mieti, se on siis jokin oikeista sivustoistasi.

Siistimpää on tehdä erillinen lohko, joka hylkää tällaiset pyynnöt:

# /etc/nginx/sites-available/000-default
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}

444 on nginxin erikoiskoodi: yhteys suljetaan vastaamatta. IP-osoitteita läpi käyvät skannerit eivät näin näe mitään. https:lle (portti 443) default server toimii hieman eri tavalla, koska siihen kuuluu varmenne; palaat siihen oppitunnilla 7.3.

nginx reverse proxyna

Jos sovellus toimii osoitteessa 127.0.0.1:3000 (oppitunti 6.3) tai kontti osoitteessa 127.0.0.1:3001 (oppitunti 9.3), nginx tuo sen ulos näkyviin:

server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Neljä proxy_set_header-riviä ovat tärkeitä. Ilman riviä Host sovellus ei tiedä, millä nimellä siellä vieraillaan. Ilman riviä X-Forwarded-For sovellus näkee jokaisen käynnin tulevan osoitteesta 127.0.0.1 (proxy) eikä kävijän oikeasta osoitteesta. Ilman riviä X-Forwarded-Proto sovellus luulee kaiken kulkevan http:n kautta ja tekee joskus linkkejä tai evästeitä http:lle, vaikka sivustosi toimii https:n kautta. Monissa sovelluksissa on asetus näiden otsakkeiden luottamiselle ("trusted proxy"); laita siihen vain 127.0.0.1, muuten kuka tahansa kävijä voi lähettää väärän osoitteen.

Websocketeja käyttävät sovellukset (reaaliaikaiset päivitykset, kuten Uptime Kuma) tarvitsevat vielä kaksi riviä: proxy_http_version 1.1; sekä otsakkeiden Upgrade ja Connection välittämisen. Sovelluksen dokumentaatio kertoo yleensä tarkalleen, mitkä.

Webrootin oikeudet

Debianissa ja Ubuntussa nginx ajaa työprosessinsa käyttäjänä www-data. Sen pitää pystyä lukemaan tiedostosi, mutta sen ei kuulu pystyä kirjoittamaan niihin. Hyvä jako (oppitunti 3.1):

anna@web1:~$ sudo chown -R anna:www-data /var/www/example.com
anna@web1:~$ sudo find /var/www/example.com -type d -exec chmod 750 {} \;
anna@web1:~$ sudo find /var/www/example.com -type f -exec chmod 640 {} \;

Sinä (anna) hallitset tiedostoja, ryhmä www-data saa lukea, muut eivät mitään. Jos sivuston pitää kirjoittaa jonnekin, esimerkiksi latauksille tarkoitettuun hakemistoon, anna kirjoitusoikeus käyttäjälle www-data vain siihen hakemistoon. Ei koskaan chmod 777 (oppitunti 10.2). Jos saat virheen 403 Forbidden, katso sivuston virhelokia: siellä on permission denied ja polku.

Muutama muu hyvä tapa:

  • Ei salaisuuksia webrootiin. Varmuuskopiot (site.zip), .env-tiedostot ja .git-hakemistot eivät kuulu sinne; jos ne päätyvät sinne vahingossa, niitä voi pyytää selaimella. Lisäturvana location ~ /\. { deny all; } estää kaikki pisteellä alkavat tiedostot (paitsi sen, minkä sallit erikseen, kuten /.well-known/, katso oppitunnit 7.3 ja 7.4).
  • Piilota versio. server_tokens off; tiedostossa nginx.conf poistaa versionumeron Server-otsakkeesta ja virhesivuilta. Se ei ole oikeaa tietoturvaa, mutta antaa skannereille vähemmän tietoa.

PHP lyhyesti

PHP-sivustoille (kuten WordPress) nginx keskustelee PHP-FPM:n kanssa, joka on erillinen palvelu. Debianissa asennat paketin php-fpm ja lisäät server blockiin location ~ \.php$-lohkon, jossa on include snippets/fastcgi-php.conf; ja fastcgi_pass unix:/run/php/php8.4-fpm.sock; (versionumero vaihtelee julkaisun mukaan). WordPress-kurssi käsittelee tätä tarkemmin.

AlmaLinuxissa ja Rocky Linuxissa

Niissä ei ole hakemistoa sites-available: jokainen sivusto on oma tiedostonsa hakemistossa /etc/nginx/conf.d/<nimi>.conf. nginx toimii käyttäjänä nginx eikä www-data, ja oletus-webroot on /usr/share/nginx/html. SELinux ei oletuksena anna nginxin muodostaa yhteyttä sovellukseen, joka on proxy_pass-rivin takana; salli se komennolla setsebool -P httpd_can_network_connect 1. Tavallisten hakemistojen ulkopuoliset tiedostot tarvitsevat SELinux-nimiön (semanage fcontext ja restorecon).

Yhteenveto

  • nginx tarjoilee tiedostoja tai välittää pyyntöjä reverse proxyna sovellukselle osoitteessa 127.0.0.1.
  • Yksi server block sivustoa kohden hakemistossa sites-available, käyttöön linkillä hakemistoon sites-enabled; kuuntele sekä 80 että [::]:80.
  • Aina nginx -t ennen komentoa systemctl reload nginx.
  • Oma default server, jossa on return 444, estää tuntematonta nimeä tai pelkkää IP-osoitetta näyttämästä jotain sivustoistasi.
  • Reverse proxyna välität otsakkeet Host, X-Forwarded-For ja X-Forwarded-Proto; webroot on luettavissa käyttäjälle www-data, ei kirjoitettavissa, eikä siinä ole salaisuuksia.

Tietovisa (quiz)

1. Olet muokannut server blockia. Mikä on turvallinen järjestys?



2. Sivustosi toimii IPv4:llä mutta ei IPv6:lla, vaikka AAAA-tietue on oikein ja palomuuri sallii IPv6:n. Mitä server blockista todennäköisesti puuttuu?



3. Joku avaa osoitteen http://192.0.2.10 (pelkkä IP-osoite) ja näkee asiakkaasi verkkosivuston. Miten estät sen?



4. Rivin proxy_pass takana oleva sovelluksesi näkee jokaisella käynnillä osoitteen 127.0.0.1. Mitä puuttuu?



5. Mitkä oikeudet sopivat staattisen verkkosivuston tiedostoille hakemistossa /var/www/example.com?



Tehtävä

Tehtävä O7.2: Ensimmäinen sivustosi. Asenna nginx (tai käytä Caddya oppitunnilta 7.4) ja tee server block (ali)verkkotunnukselle, joka osoittaa palvelimeesi. Siinä pitää olla listen IPv4:lle ja IPv6:lle, omat lokitiedostot ja oma default server. Testaa komennolla nginx -t, lataa uudelleen ja tarkista komennolla curl -I IPv4:n ja IPv6:n kautta. Aseta webrootin oikeudet kuten oppitunnilla. Täytä tarkistuslista ja liitä server blockisi.

Tehtävä O7.2: Ensimmäinen sivustosi

Tämän tehtävän teet itse, kukaan ei tarkista sitä. Merkitse tekemäsi kohdat ja merkitse tehtävä tehdyksi.




Merkintäsi ja muistiinpanosi pysyvät vain tässä selaimessa, emme lähetä niitä minnekään. Jos olet kirjautunut sisään, tallennamme kohtaan Omat kurssit vain sen, että olet tehnyt tehtävän.

Lue lisää

Hetkinen…

Määritä verkkotunnuksesi

Määritä kullekin verkkotunnukselle nimipalvelimet, liitos webhotelliin ja se, kuka tulee omistajaksi.

Ladataan verkkotunnuksia…