Pāriet uz saturu

Sīkdatņu iestatījumi

Izvēlieties, kāda veida sīkdatnes atļaujat. Savu izvēli varat jebkurā laikā mainīt sadaļā Sīkdatņu iestatījumi katras lapas apakšā. Privātuma politika

Nepieciešamās

Vienmēr ieslēgtas

Vajadzīgas, lai pieteiktos, saglabātu grozu un atcerētos Jūsu izvēles. Tās vienmēr ir ieslēgtas.

Kuras sīkdatnes?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsu sesija un pieteikšanās saglabāšana
  • weboke_basket: Jūsu grozs
  • wkBtwIncl: cenu rādīšana ar PVN vai bez PVN
  • wok_cookies: Jūsu sīkdatņu izvēle, 12 mēneši

Mēra, kura reklāma noved pie apmeklējuma vai pasūtījuma, lai mēs nemaksātu par reklāmām, kas neko nedod.

Kuras sīkdatnes?
  • Google Ads ar Google Tag Manager (_gcl_au, _gcl_aw), līdz 90 dienām
  • OpenAI Ads, reklāmas ChatGPT
  • wok_aff: caur kuru partneri nonācāt pie mums (partneru programma), 60 dienas

4,6

Valsts un valoda

Katrai valstij ir sava vietne ar attiecīgās valsts cenām un PVN.

Skatīt

Tīmekļa serveris ar nginx

7. modulis: Domēns, tīmekļa serveris un https · Lasīšanas laiks: 12 min.

Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet instalēt nginx, iestatīt vietni un reverse proxy ar server block, droši pārbaudīt un pārlādēt konfigurāciju, kā arī pareizi iestatīt sava webroot tiesības.

Pamatjēdzieni: nginx, server block, sites-available un 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

Ko dara tīmekļa serveris

Tīmekļa serveris klausās portā 80 (http) un 443 (https), pieņem pārlūku pieprasījumus un nosūta atpakaļ atbildi: failu no diska (statiska vietne) vai atbildi no programmas, kas darbojas aiz tā (PHP, Node.js lietotne, konteiners). Otrajā gadījumā tīmekļa serveri sauc par reverse proxy: tas stāv priekšā, nodrošina https un nodod pieprasījumu lietotnei, kas klausās tikai uz 127.0.0.1.

Linux vidē pazīstamākie tīmekļa serveri ir nginx un Apache, bet Caddy (nodarbība 7.4) ir moderna alternatīva, kas pati rūpējas par sertifikātiem. Šajā nodarbībā izmantojam nginx: tas ir pieejams katrā distribūcijā, taupīgi izmanto atmiņu un ir standarts daudzās pamācībās.

Instalēšana un pirmais ieskats

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

(Versijas numurs ir piemērs.) Neaizmirstiet ugunsmūri: portiem 80 un 443 jābūt atvērtiem (nodarbība 5.2). Ja tagad atverat http://192.0.2.10, Jūs redzēsiet nginx sveiciena lapu.

Konfigurācija atrodas mapē /etc/nginx/:

CeļšKas tas ir
nginx.confgalvenais fails; parasti to nemaina
sites-available/viens fails katrai vietnei (Debian un Ubuntu)
sites-enabled/saites (symlinks) uz ieslēgtajām vietnēm
conf.d/*.confatsevišķi iestatījumi, kas tiek ielādēti vienmēr
snippets/fragmenti, ko atkārtoti izmantojat vairākās vietnēs

sites-available un sites-enabled ir Debian un Ubuntu ieradums: tā Jūs ieslēdzat vai izslēdzat vietni, izveidojot vai noņemot saiti, nedzēšot pašu failu.

Pirmā vietne

Izveidojiet mapi vietnei un testa lapu:

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

Pēc tam izveidojiet server block: vienas vietnes aprakstu.

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

Lasiet to šādi:

  • listen 80; un listen [::]:80; liek nginx klausīties gan IPv4, gan IPv6. Ja aizmirsīsiet otro rindu, Jūsu AAAA ieraksts nedarbosies (nodarbība 7.1).
  • server_name norāda, kuriem nosaukumiem šis bloks ir paredzēts. Katram pieprasījumam nginx skatās nosaukumu, ko pieprasa pārlūks (Host galveni), un izvēlas atbilstošo bloku.
  • root ir mape ar failiem, index ir fails, kas tiek parādīts, ja pieprasīta mape.
  • try_files mēģina atrast pieprasīto failu, tad mapi, un citādi atgriež 404. Bez šādas rindas kļūdaina konfigurācija var parādīt vairāk, nekā vēlaties.
  • Atsevišķi žurnālfaili katrai vietnei ievērojami atvieglo meklēšanu (nodarbība 6.2).

Ieslēdziet vietni, noņemiet noklusējuma vietni, pārbaudiet un pārlādējiet:

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

Padariet nginx -t pirms katras pārlādes par pastāvīgu ieradumu. Kļūdas gadījumā tas norāda failu un rindu, un Jūsu strādājošā vietne paliek neskarta. Ja restartējat bez pārbaudes, nginx ar kļūdu vairs nestartējas un visas Jūsu vietnes ir nepieejamas (nodarbība 6.1).

Default server: ko saņem nezināms nosaukums?

Kas notiek, ja kāds pieprasa Jūsu serveri ar nosaukumu, kas nav norādīts nevienā server_name, vai vienkārši ar IP adresi? Tad nginx izvēlas default server: bloku ar default_server aiz listen vai citādi pirmo bloku, ko tas atrada. Ja par to nepadomājat, tā būs kāda no Jūsu īstajām vietnēm.

Labāk ir izveidot atsevišķu bloku, kas šādus pieprasījumus noraida:

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

444 ir īpašs nginx kods: savienojums tiek aizvērts bez atbildes. Skeneri, kas pārbauda IP adreses pēc kārtas, tā neko neredz. Https (portam 443) default server darbojas nedaudz citādi, jo tam nepieciešams sertifikāts; pie tā atgriezīsimies nodarbībā 7.3.

nginx kā reverse proxy

Ja uz 127.0.0.1:3000 darbojas lietotne (nodarbība 6.3) vai uz 127.0.0.1:3001 konteiners (nodarbība 9.3), nginx padara to pieejamu no ārpuses:

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

Četras proxy_set_header rindas ir svarīgas. Bez Host lietotne nezina, ar kādu nosaukumu tā tiek apmeklēta. Bez X-Forwarded-For lietotne redz katru apmeklējumu kā nākošu no 127.0.0.1 (proxy), nevis no apmeklētāja īstās adreses. Bez X-Forwarded-Proto lietotne domā, ka viss notiek caur http, un dažkārt veido saites vai sīkdatnes priekš http, lai gan Jūsu vietne darbojas caur https. Daudzām lietotnēm ir iestatījums, lai uzticētos šīm galvenēm ("trusted proxy"); norādiet tur tikai 127.0.0.1, citādi jebkurš apmeklētājs var nosūtīt viltotu adresi.

Lietotnēm, kas izmanto websockets (tiešraides atjauninājumi, piemēram, Uptime Kuma), vajag vēl divas rindas: proxy_http_version 1.1; un Upgrade un Connection nodošanu. Lietotnes dokumentācijā parasti precīzi norādīts, kuras.

Webroot tiesības

Debian un Ubuntu vidē nginx savus darba procesus palaiž kā lietotājs www-data. Tam jāspēj Jūsu failus lasīt, bet nav jāspēj tos rakstīt. Labs sadalījums (nodarbība 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 {} \;

Jūs (anna) pārvaldāt failus, grupa www-data drīkst lasīt, pārējie neko. Ja vietnei kaut kur jāraksta, piemēram, augšupielāžu mapē, piešķiriet www-data rakstīšanas tiesības tikai šai mapei. Nekad chmod 777 (nodarbība 10.2). Ja saņemat 403 Forbidden, apskatiet vietnes kļūdu žurnālu: tur būs permission denied ar ceļu.

Daži citi ieradumi:

  • Nekādu noslēpumu webroot mapē. Rezerves kopijām (site.zip), .env failiem un .git mapēm tur nav vietas; ja tās tomēr nejauši tur nonāk, tās var pieprasīt. Papildu drošības tīkls: location ~ /\. { deny all; } bloķē visus failus, kuru nosaukums sākas ar punktu (izņemot to, ko Jūs skaidri atļaujat, piemēram, /.well-known/, skatiet nodarbību 7.3 un 7.4).
  • Versijas slēpšana. server_tokens off; failā nginx.conf noņem versijas numuru no Server galvenes un kļūdu lapām. Tā nav īsta aizsardzība, taču skeneri saņem mazāk informācijas.

Īsi par PHP

PHP vietnēm (piemēram, WordPress) nginx sazinās ar PHP-FPM, atsevišķu pakalpojumu. Debian vidē Jūs instalējat php-fpm un server block ievietojat location ~ \.php$ bloku ar include snippets/fastcgi-php.conf; un fastcgi_pass unix:/run/php/php8.4-fpm.sock; (versijas numurs atšķiras atkarībā no laidiena). WordPress kursā tas aplūkots sīkāk.

AlmaLinux un Rocky Linux vidē

Tur nav sites-available: katru vietni Jūs ievietojat kā atsevišķu failu mapē /etc/nginx/conf.d/<naam>.conf. nginx darbojas kā lietotājs nginx, nevis www-data, un noklusējuma webroot ir /usr/share/nginx/html. SELinux pēc noklusējuma neļauj nginx izveidot savienojumu ar lietotni aiz proxy_pass; ieslēdziet to ar setsebool -P httpd_can_network_connect 1. Failiem ārpus ierastajām mapēm nepieciešama SELinux etiķete (semanage fcontext un restorecon).

Kopsavilkums

  • nginx pasniedz failus vai kā reverse proxy nodod pieprasījumus lietotnei uz 127.0.0.1.
  • Viens server block katrai vietnei mapē sites-available, ieslēgšana ar saiti mapē sites-enabled; klausieties gan uz 80, gan uz [::]:80.
  • Vienmēr nginx -t pirms systemctl reload nginx.
  • Savs default server ar return 444 novērš to, ka nezināms nosaukums vai tukša IP adrese parāda kādu no Jūsu vietnēm.
  • Kā reverse proxy Jūs nododat Host, X-Forwarded-For un X-Forwarded-Proto; webroot ir lasāms lietotājam www-data, bet nav rakstāms, un tajā nav noslēpumu.

Tests (quiz)

1. Jūs esat mainījuši server block. Kāda ir drošā secība?



2. Jūsu vietne darbojas caur IPv4, bet ne caur IPv6, lai gan AAAA ieraksts ir pareizs un ugunsmūris atļauj IPv6. Kas, visticamāk, trūkst server block?



3. Kāds atver http://192.0.2.10 (tukšo IP adresi) un redz Jūsu klienta vietni. Kā to novērst?



4. Jūsu lietotne aiz proxy_pass katrā apmeklējumā redz adresi 127.0.0.1. Kas trūkst?



5. Kādas tiesības ir piemērotas statiskas vietnes failiem mapē /var/www/example.com?



Uzdevums

Uzdevums O7.2: Jūsu pirmā vietne. Instalējiet nginx (vai izmantojiet Caddy no nodarbības 7.4), izveidojiet server block (apakš)domēnam, kas norāda uz Jūsu serveri, ar listen priekš IPv4 un IPv6, atsevišķiem žurnālfailiem un savu default server. Pārbaudiet ar nginx -t, pārlādējiet un pārbaudiet ar curl -I caur IPv4 un IPv6. Iestatiet webroot tiesības, kā aprakstīts nodarbībā. Aizpildiet kontrolsarakstu un ielīmējiet savu server block.

Uzdevums O7.2: Jūsu pirmā vietne

Šo uzdevumu veicat paši; neviens to nepārbauda. Atzīmējiet, ko esat izdarījuši, un atzīmējiet uzdevumu kā paveiktu.




Jūsu atzīmes un piezīmes paliek tikai šajā pārlūkprogrammā; mēs tās nekur nesūtām. Ja esat pieteikušies, sadaļā Mani kursi saglabājam tikai to, ka uzdevums ir paveikts.

Vairāk lasīt

Lūdzu, uzgaidiet…

Iestatiet savus domēnus

Katram domēnam norādiet vārdu serverus, piesaisti hostingam un to, kurš būs turētājs.

Ielādē Jūsu domēnus…