Mine sisu juurde

Küpsiste seaded

Vali iga liigi kohta, milliseid küpsiseid lubad. Oma valikut saad alati muuta iga lehe allosas oleva lingi „Küpsiste seaded“ kaudu. Privaatsuspoliitika

Vajalikud

Alati sees

Vajalikud sisselogimiseks, ostukorvi säilitamiseks ja sinu valikute meelespidamiseks. Need on alati sees.

Millised küpsised?
  • weboke_sessie, weboke_klant, weboke_remember: sinu seanss ja sisselogituks jäämine
  • weboke_basket: sinu ostukorv
  • wkBtwIncl: hindade näitamine koos käibemaksuga või ilma
  • wok_cookies: sinu küpsisevalik, 12 kuud

Mõõdab, milline reklaam viib külastuse või tellimuseni, et me ei maksaks reklaamide eest, mis midagi ei anna.

Millised küpsised?
  • Google Ads Google Tag Manageri kaudu (_gcl_au, _gcl_aw), kuni 90 päeva
  • OpenAI Ads, reklaamid ChatGPT-s
  • wok_aff: millise partneri kaudu meie juurde jõudsid (partnerprogramm), 60 päeva

4,6

Riik ja keel

Igal riigil on oma sait, selle riigi hindade ja käibemaksuga.

Vaata

Veebiserver nginxiga

Moodul 7: Domeen, veebiserver ja https · Lugemisaeg: 12 minutit

Õpieesmärk: Pärast seda õppetundi oskad paigaldada nginxi, seadistada server blocki abil veebisaidi ja reverse proxy, seadistust turvaliselt testida ja uuesti laadida ning seada oma webrooti õigused õigesti.

Põhimõisted: 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

Mida veebiserver teeb

Veebiserver kuulab porte 80 (http) ja 443 (https), võtab brauseritelt päringuid vastu ja saadab midagi tagasi: faili kettalt (staatiline sait) või selle programmi vastuse, mis töötab tema taga (PHP, Node.js-rakendus, konteiner). Teisel juhul nimetatakse veebiserverit reverse proxyks: see seisab ees, hoolitseb https eest ja annab päringu edasi rakendusele, mis kuulab ainult aadressil 127.0.0.1.

Linuxis on tuntuimad veebiserverid nginx ja Apache, ning Caddy (õppetund 7.4) on moodne alternatiiv, mis hoolitseb sertifikaatide eest ise. Selles õppetunnis kasutame nginxi: see on olemas igas distributsioonis, kasutab vähe mälu ja on paljudes juhendites standardvalik.

Paigaldamine ja esimene pilk

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

(Versiooninumber on näide.) Ära unusta tulemüüri: pordid 80 ja 443 peavad olema avatud (õppetund 5.2). Kui avad nüüd aadressi http://192.0.2.10, näed nginxi tervituslehte.

Seadistus asub kaustas /etc/nginx/:

AsukohtMis
nginx.confpõhifail; tavaliselt jäta see rahule
sites-available/üks fail iga saidi kohta (Debian ja Ubuntu)
sites-enabled/lingid (symlinks) sisselülitatud saitidele
conf.d/*.conferaldi seaded, mis laaditakse alati
snippets/tükid, mida kasutad mitmes saidis uuesti

sites-available ja sites-enabled on Debiani ja Ubuntu tava: nii lülitad saidi sisse või välja lingi loomise või eemaldamisega, ilma faili kustutamata.

Esimene sait

Loo saidi jaoks kaust ja testleht:

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

Seejärel loo server block: ühe saidi kirjeldus.

# /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;
}

Loe seda nii:

  • listen 80; ja listen [::]:80; panevad nginxi kuulama nii IPv4 kui ka IPv6 kaudu. Kui unustad teise rea, ei tööta su AAAA-kirje (õppetund 7.1).
  • server_name ütleb, milliste nimede jaoks see plokk kehtib. nginx vaatab iga päringu puhul nime, mida brauser küsib (Host-päis), ja valib sobiva ploki.
  • root on failide kaust, index fail, mida kausta puhul näidatakse.
  • try_files proovib küsitud faili, seejärel kausta ja annab muidu vastuseks 404. Sellise reata võib vale seadistus näidata rohkem, kui soovid.
  • Iga saidi oma logifailid teevad otsimise palju lihtsamaks (õppetund 6.2).

Lülita sait sisse, eemalda vaikesait, testi ja laadi uuesti:

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 nginx -t käivitamisest enne iga reloadi kindel harjumus. Vea korral ütleb see, milline fail ja milline rida, ning su töötav sait jääb puutumata. Kui taaskäivitad ilma testimata, ei käivitu nginx vea korral enam ja kõik su saidid on maas (õppetund 6.1).

Default server: mida saab tundmatu nimi?

Mis juhtub, kui keegi pöördub su serveri poole nimega, mida pole üheski server_name-reas, või lihtsalt IP-aadressiga? Siis valib nginx default serveri: ploki, kus on listen järel default_server, või muidu esimese ploki, mille ta leidis. Kui sa selle peale ei mõtle, on see seega üks su päris saitidest.

Korrektsem on eraldi plokk, mis sellised päringud tagasi lükkab:

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

444 on nginxi eriline kood: ühendus suletakse ilma vastuseta. Nii ei näe IP-aadresse läbi käivad skannerid midagi. https puhul (port 443) töötab default server veidi teisiti, sest selle juurde kuulub sertifikaat; selle juurde tuleme tagasi õppetunnis 7.3.

nginx kui reverse proxy

Kui aadressil 127.0.0.1:3000 töötab rakendus (õppetund 6.3) või aadressil 127.0.0.1:3001 konteiner (õppetund 9.3), teeb nginx selle väljapoole kättesaadavaks:

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;
    }
}

Neli proxy_set_header-rida on olulised. Ilma Host-ta ei tea rakendus, millise nime all teda külastatakse. Ilma X-Forwarded-For-ta näeb rakendus iga külastust tulevat aadressilt 127.0.0.1 (proxy) külastaja päris aadressi asemel. Ilma X-Forwarded-Proto-ta arvab rakendus, et kõik käib üle http, ja loob vahel lingid või küpsised http jaoks, kuigi su sait töötab üle https. Paljudel rakendustel on seade nende päiste usaldamiseks ("trusted proxy"); pane sinna ainult 127.0.0.1, muidu saab iga külastaja kaasa saata võltsitud aadressi.

Rakendused, mis kasutavad websocketeid (reaalajas uuendused, nagu Uptime Kuma), vajavad veel kahte rida: proxy_http_version 1.1; ning Upgrade ja Connection edasiandmist. Rakenduse dokumentatsioon ütleb tavaliselt täpselt, millised.

Webrooti õigused

nginx käitab Debianis ja Ubuntus oma tööprotsesse kasutajana www-data. See peab saama su faile lugeda, kuid ei tohiks saada neisse kirjutada. Hea jaotus (õppetund 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 {} \;

Sina (anna) haldad faile, grupp www-data võib lugeda, ülejäänud ei saa midagi. Kui sait peab kuhugi kirjutama, näiteks üleslaadimiste kausta, anna kirjutusõigus www-data-le ainult sellele kaustale. Mitte kunagi chmod 777 (õppetund 10.2). Kui saad vea 403 Forbidden, vaata saidi vealogi: seal on permission denied koos asukohaga.

Veel mõned head harjumused:

  • Ära hoia saladusi webrootis. Varukoopiad (site.zip), .env-failid ja .git-kaustad ei kuulu sinna; kui need kogemata sinna satuvad, saab neid küsida. Lisakaitse: location ~ /\. { deny all; } blokeerib kõik punktiga algavad failid (välja arvatud see, mida selgesõnaliselt lubad, nagu /.well-known/, vaata õppetunde 7.3 ja 7.4).
  • Peida versioon. server_tokens off; failis nginx.conf eemaldab versiooninumbri Server-päisest ja vealehtedelt. See ei ole päris turvameede, kuid annab skanneritele vähem teavet.

PHP lühidalt

PHP-saitide (nagu WordPress) puhul suhtleb nginx PHP-FPM-iga, mis on eraldi teenus. Debianis paigaldad php-fpm ja lisad server blocki location ~ \.php$-ploki koos include snippets/fastcgi-php.conf; ja fastcgi_pass unix:/run/php/php8.4-fpm.sock;-ga (versiooninumber erineb väljalaske kaupa). WordPressi kursus käsitleb seda põhjalikumalt.

AlmaLinuxis ja Rocky Linuxis

Seal pole sites-available: paned iga saidi eraldi failina kausta /etc/nginx/conf.d/<naam>.conf. nginx töötab kasutaja nginx all kasutaja www-data asemel ja vaikimisi webroot on /usr/share/nginx/html. SELinux ei luba nginxil vaikimisi luua ühendust proxy_pass taga oleva rakendusega; lülita see sisse käsuga setsebool -P httpd_can_network_connect 1. Tavapärastest kaustadest väljaspool olevad failid vajavad SELinuxi silti (semanage fcontext ja restorecon).

Kokkuvõte

  • nginx serveerib faile või annab reverse proxyna päringud edasi rakendusele aadressil 127.0.0.1.
  • Iga saidi jaoks üks server block kaustas sites-available, sisselülitamine lingiga kaustas sites-enabled; kuula nii 80 kui ka [::]:80 kaudu.
  • Alati nginx -t enne systemctl reload nginx.
  • Oma default server koos return 444-ga hoiab ära, et tundmatu nimi või paljas IP-aadress näitaks mõnda su saitidest.
  • Reverse proxyna annad edasi Host, X-Forwarded-For ja X-Forwarded-Proto; webroot on www-data-le loetav, mitte kirjutatav, ja ilma saladusteta.

Test (quiz)

1. Muutsid server blocki. Milline on turvaline järjekord?



2. Su sait töötab IPv4 kaudu, kuid mitte IPv6 kaudu, kuigi AAAA-kirje on õige ja tulemüür lubab IPv6. Mis server blockist tõenäoliselt puudub?



3. Keegi avab aadressi http://192.0.2.10 (paljas IP-aadress) ja näeb ühe su kliendi veebisaiti. Kuidas seda vältida?



4. Su rakendus proxy_pass taga näeb iga külastuse puhul aadressi 127.0.0.1. Mis puudub?



5. Millised õigused sobivad staatilise veebisaidi failidele kaustas /var/www/example.com?



Ülesanne

Ülesanne O7.2: Sinu esimene sait. Paigalda nginx (või kasuta Caddyt õppetunnist 7.4), loo server block (ala)domeenile, mis osutab su serverile, koos listen-ga IPv4 ja IPv6 jaoks, oma logifailide ja oma default serveriga. Testi käsuga nginx -t, laadi uuesti ja kontrolli curl -I-ga IPv4 ja IPv6 kaudu. Sea webrooti õigused nagu õppetunnis. Täida kontrollnimekiri ja kleebi oma server block.

Ülesanne O7.2: Sinu esimene sait

Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.




Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.

Loe edasi

Hetk…

Seadista oma domeenid

Määra iga domeeni jaoks nimeserverid, seos sinu majutusega ja kes saab omanikuks.

Laadin sinu domeene…