Pereiti prie turinio

Slapukų nustatymai

Pasirinkite, kokių rūšių slapukus leidžiate. Pasirinkimą bet kada galite pakeisti per „Slapukų nustatymai“ kiekvieno puslapio apačioje. Privatumo pareiškimas

Būtinieji

Visada įjungti

Reikalingi prisijungti, išsaugoti krepšelį ir įsiminti Jūsų pasirinkimus. Jie visada įjungti.

Kokie slapukai?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsų sesija ir prisijungimo išlaikymas
  • weboke_basket: Jūsų krepšelis
  • wkBtwIncl: kainų rodymas su PVM arba be PVM
  • wok_cookies: Jūsų slapukų pasirinkimas, 12 mėnesių

Matuoja, kuri reklama atveda prie apsilankymo ar užsakymo, kad nemokėtume už neveiksmingas reklamas.

Kokie slapukai?
  • Google Ads per Google Tag Manager (_gcl_au, _gcl_aw), iki 90 dienų
  • OpenAI Ads, reklamos ChatGPT
  • wok_aff: per kurį partnerį atėjote pas mus (partnerių programa), 60 dienų

4,6

Šalis ir kalba

Kiekviena šalis turi savo svetainę su tos šalies kainomis ir PVM.

Peržiūrėti

Žiniatinklio serveris su nginx

7 modulis: Domenas, žiniatinklio serveris ir https · Skaitymo laikas: 12 min.

Mokymosi tikslas: Po šios pamokos galėsite įdiegti nginx, server block pagalba sukonfigūruoti svetainę ir reverse proxy, saugiai patikrinti ir perkrauti konfigūraciją bei teisingai nustatyti savo webroot teises.

Pagrindinės sąvokos: nginx, server block, sites-available ir 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

Ką daro žiniatinklio serveris

Žiniatinklio serveris klauso 80 (http) ir 443 (https) prievaduose, priima naršyklių užklausas ir grąžina atsakymą: failą iš disko (statinę svetainę) arba už jo veikiančios programos atsakymą (PHP, Node.js programos, konteinerio). Antruoju atveju žiniatinklio serveris vadinamas reverse proxy: jis stovi priekyje, tvarko https ir perduoda užklausą programai, kuri klauso tik 127.0.0.1.

Linux sistemoje žinomiausi žiniatinklio serveriai yra nginx ir Apache, o Caddy (pamoka 7.4) yra moderni alternatyva, kuri sertifikatus tvarko pati. Šioje pamokoje naudojamas nginx: jis yra kiekvienoje distribucijoje, taupiai naudoja atmintį ir yra standartas daugelyje vadovų.

Įdiegimas ir pirmas žvilgsnis

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

(Versijos numeris yra tik pavyzdys.) Nepamirškite užkardos: 80 ir 443 prievadai turi būti atidaryti (pamoka 5.2). Jei dabar atidarysite http://192.0.2.10, pamatysite nginx pasveikinimo puslapį.

Konfigūracija yra /etc/nginx/:

KeliasKas
nginx.confpagrindinis failas; dažniausiai jo neliečiate
sites-available/po vieną failą kiekvienai svetainei (Debian ir Ubuntu)
sites-enabled/nuorodos (symlinks) į įjungtas svetaines
conf.d/*.confatskiri nustatymai, kurie įkeliami visada
snippets/fragmentai, kuriuos pakartotinai naudojate keliose svetainėse

sites-available ir sites-enabled yra Debian ir Ubuntu įprotis: taip svetainę įjungiate ar išjungiate sukurdami arba pašalindami nuorodą, neištrindami paties failo.

Pirmoji svetainė

Sukurkite svetainei katalogą ir bandomąjį puslapį:

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

Tada sukurkite server block: vienos svetainės aprašą.

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

Skaitykite jį taip:

  • listen 80; ir listen [::]:80; nurodo nginx klausyti per IPv4 ir per IPv6. Jei pamiršite antrą eilutę, Jūsų AAAA įrašas neveiks (pamoka 7.1).
  • server_name nurodo, kokiems pavadinimams šis blokas galioja. Kiekvienai užklausai nginx žiūri, kokio pavadinimo prašo naršyklė (Host antraštė), ir pasirenka tinkantį bloką.
  • root yra katalogas su failais, index yra failas, rodomas atidarius katalogą.
  • try_files bando rasti prašomą failą, tada katalogą, o kitaip grąžina 404. Be tokios eilutės klaidinga konfigūracija gali parodyti daugiau, nei norite.
  • Atskiri kiekvienos svetainės žurnalų failai gerokai palengvina paiešką (pamoka 6.2).

Įjunkite svetainę, pašalinkite numatytąją svetainę, patikrinkite ir perkraukite:

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

Paverskite nginx -t prieš kiekvieną reload nuolatiniu įpročiu. Radęs klaidą, jis nurodo failą ir eilutę, o Jūsų veikianti svetainė lieka nepaliesta. Jei perkrausite netikrinę, nginx su klaida nebepasileis ir visos Jūsų svetainės nustos veikti (pamoka 6.1).

Default server: ką gauna nežinomas pavadinimas?

Kas nutinka, kai kas nors kreipiasi į Jūsų serverį pavadinimu, kurio nėra jokiame server_name, arba tiesiog IP adresu? Tada nginx pasirenka default server: bloką su default_server po listen, o jei tokio nėra, pirmą rastą bloką. Jei apie tai negalvojote, tai bus viena iš Jūsų tikrų svetainių.

Tvarkingiau yra turėti atskirą bloką, kuris tokias užklausas atmeta:

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

444 yra ypatingas nginx kodas: ryšys uždaromas be jokio atsakymo. Taip IP adresus skenuojančios programos nieko nepamato. https (443 prievadui) default server veikia šiek tiek kitaip, nes jam reikia sertifikato; prie to grįšite pamokoje 7.3.

nginx kaip reverse proxy

Jei programa veikia 127.0.0.1:3000 (pamoka 6.3) arba konteineris 127.0.0.1:3001 (pamoka 9.3), nginx padaro ją pasiekiamą iš išorės:

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

Keturios proxy_set_header eilutės yra svarbios. Be Host programa nežino, kokiu pavadinimu ji lankoma. Be X-Forwarded-For programa mato, kad kiekvienas apsilankymas ateina iš 127.0.0.1 (proxy), o ne iš tikrojo lankytojo adreso. Be X-Forwarded-Proto programa mano, kad viskas vyksta per http, ir kartais kuria nuorodas ar slapukus http, nors Jūsų svetainė veikia per https. Daugelis programų turi nustatymą, leidžiantį pasitikėti šiomis antraštėmis („trusted proxy“); įrašykite ten tik 127.0.0.1, kitaip bet kuris lankytojas galės atsiųsti netikrą adresą.

Programoms, naudojančioms websockets (tiesioginiai atnaujinimai, pvz., Uptime Kuma), reikia dar dviejų eilučių: proxy_http_version 1.1; ir Upgrade bei Connection perdavimo. Programos dokumentacijoje paprastai tiksliai nurodyta, kokių.

Webroot teisės

Debian ir Ubuntu sistemose nginx savo darbinius procesus vykdo kaip naudotojas www-data. Jis turi galėti Jūsų failus skaityti, bet neturėtų galėti į juos rašyti. Geras išdėstymas (pamoka 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) tvarkote failus, grupė www-data gali skaityti, kiti neturi jokių teisių. Jei svetainei kur nors reikia rašyti, pavyzdžiui, į įkėlimų katalogą, suteikite www-data rašymo teises tik tam katalogui. Niekada chmod 777 (pamoka 10.2). Jei gaunate 403 Forbidden, peržiūrėkite svetainės klaidų žurnalą: ten bus permission denied su keliu.

Dar keli įpročiai:

  • Jokių paslapčių webroot kataloge. Atsarginės kopijos (site.zip), .env failai ir .git katalogai ten nepriklauso; jei jie vis dėlto netyčia ten atsiduria, juos galima atsisiųsti. Papildoma apsauga: location ~ /\. { deny all; } blokuoja visus failus, kurių pavadinimas prasideda tašku (išskyrus tai, ką aiškiai leidžiate, pvz., /.well-known/, žr. pamokas 7.3 ir 7.4).
  • Paslėpkite versiją. server_tokens off; faile nginx.conf pašalina versijos numerį iš Server antraštės ir klaidų puslapių. Tai nėra tikra apsauga, tačiau skenuojančioms programoms suteikiama mažiau informacijos.

Trumpai apie PHP

PHP svetainėms (pvz., WordPress) nginx bendrauja su PHP-FPM, atskira paslauga. Debian sistemoje įdiegiate php-fpm ir server block įrašote location ~ \.php$ bloką su include snippets/fastcgi-php.conf; ir fastcgi_pass unix:/run/php/php8.4-fpm.sock; (versijos numeris skiriasi priklausomai nuo leidimo). WordPress kursas tai aptaria išsamiau.

AlmaLinux ir Rocky Linux sistemose

Ten nėra sites-available: kiekvieną svetainę įrašote kaip atskirą failą į /etc/nginx/conf.d/<naam>.conf. nginx veikia kaip naudotojas nginx, o ne www-data, o numatytasis webroot yra /usr/share/nginx/html. SELinux pagal numatytuosius nustatymus neleidžia nginx jungtis prie programos už proxy_pass; tai įjunkite su setsebool -P httpd_can_network_connect 1. Failams už įprastų katalogų ribų reikia SELinux žymos (semanage fcontext ir restorecon).

Santrauka

  • nginx pateikia failus arba kaip reverse proxy perduoda užklausas programai, veikiančiai 127.0.0.1.
  • Po vieną server block kiekvienai svetainei sites-available, įjungiama nuoroda sites-enabled; klausykite per 80 ir [::]:80.
  • Visada nginx -t prieš systemctl reload nginx.
  • Nuosavas default server su return 444 neleidžia, kad nežinomas pavadinimas ar plikas IP adresas parodytų kurią nors Jūsų svetainę.
  • Kaip reverse proxy perduodate Host, X-Forwarded-For ir X-Forwarded-Proto; webroot yra skaitomas www-data, bet ne rašomas, ir jame nėra paslapčių.

Testas (quiz)

1. Pakeitėte server block. Kokia saugi veiksmų tvarka?



2. Jūsų svetainė veikia per IPv4, bet ne per IPv6, nors AAAA įrašas teisingas ir užkarda leidžia IPv6. Ko greičiausiai trūksta server block?



3. Kažkas atidaro http://192.0.2.10 (pliką IP adresą) ir mato vieno iš Jūsų klientų svetainę. Kaip to išvengti?



4. Jūsų programa už proxy_pass kiekviename apsilankyme mato adresą 127.0.0.1. Ko trūksta?



5. Kokios teisės tinka statinės svetainės failams kataloge /var/www/example.com?



Užduotis

Užduotis O7.2: Jūsų pirmoji svetainė. Įdiekite nginx (arba naudokite Caddy iš pamokos 7.4), sukurkite server block (sub)domenui, kuris nukreiptas į Jūsų serverį, su listen IPv4 ir IPv6, atskirais žurnalų failais ir nuosavu default server. Patikrinkite su nginx -t, perkraukite ir patikrinkite su curl -I per IPv4 ir IPv6. Nustatykite webroot teises, kaip aprašyta pamokoje. Užpildykite kontrolinį sąrašą ir įklijuokite savo server block.

Užduotis O7.2: Jūsų pirmoji svetainė

Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.




Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.

Skaitykite daugiau

Akimirką…

Nustatykite domenus

Kiekvienam domenui nustatykite vardų serverius, susiejimą su talpinimu ir tai, kas taps valdytoju.

Įkeliami Jūsų domenai…