Veebisaidi paigaldamine Nginxi: server block sammult

07 Apr 2026 Autor: Edgars Kalējs

Käivita serveris ühe käsuga (kontrolli enne skripti sisu allpool):

curl -sSL https://cp.lv/scripts/razvernut-sajt-na-nginx.sh | sudo bash

…või wgetiga:

wget -qO- https://cp.lv/scripts/razvernut-sajt-na-nginx.sh | sudo bash

Skripti sisu razvernut-sajt-na-nginx.sh:

#!/usr/bin/env bash
set -e

# 1. Site directory and permissions
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
echo "<h1>example.com works</h1>" | sudo tee /var/www/example.com/index.html > /dev/null

# 2. server block (quoted 'EOF' leaves Nginx variables alone)
sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
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;
    }

    location ~* \.(jpg|jpeg|png|webp|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

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

# 3. Enable the site and disable the default config
sudo ln -sf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
echo "Site deployed: open http://example.com"

Et Nginx sinu saiti teenindaks, tuleb talle kirjeldada «virtuaalne host» — server block: kus failid asuvad, millist domeeni teenindada ja kuidas päringuid töödelda. Allpool on töötav skeem nii staatilise saidi kui ka PHP jaoks.

Samm 1. Saidi kausta ettevalmistamine

Paiguta saidi failid eraldi kataloogi ja määra omanikuks veebikasutaja www-data:

sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com

Lae failid üles (näiteks rsync või git clone abil). Kontrolliks loo avaleht:

echo "<h1>example.com works</h1>" | sudo tee /var/www/example.com/index.html

Samm 2. Server block staatilise saidi jaoks

Ava /etc/nginx/sites-available/example.com redaktoris:

sudo nano /etc/nginx/sites-available/example.com

Faili sisu:

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

    location ~* \.(jpg|jpeg|png|webp|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

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

Või loo kogu konfiguratsioon ühe käsuga — kopeeri see ja kleebi konsooli (jutumärgid 'EOF' on olulised, et Nginxi muutujad $uri jääksid nii, nagu nad on):

sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
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;
    }

    location ~* \.(jpg|jpeg|png|webp|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

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

Direktiiv try_files ... =404 annab faili välja, kui see on olemas, muidu ausa 404. Plokk expires lülitab sisse staatika kešimise brauseris.

Samm 3. Variant PHP-saidi jaoks

Kui sait on PHP peal, lisa töötlemine PHP-FPM-i kaudu ja index.php. Ava sama fail redaktoris (sudo nano /etc/nginx/sites-available/example.com) ja vii see sellisele kujule:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Või kirjuta PHP-variant tervikuna ühe käsuga (jutumärgid 'EOF' on olulised, et Nginxi muutujad $uri jääksid nii, nagu nad on):

sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}
EOF

Siin on try_files varuvariandiga /index.php standard CMS-idele ja ilusate URL-idega raamistikele (WordPress, Laravel).

Samm 4. Aktiveerimine ja kontroll

Lülita sait sisse sümboolse lingiga, kontrolli süntaksit ja lae konfiguratsioon uuesti:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -t peab vastama syntax is ok ja test is successful. Kui ei vasta, näitab veateade faili ja rea numbri.

Samm 5. Vaikimisi saidi väljalülitamine

Et Nginx ei näitaks vaikimisi asenduslehte, eemalda vaikekonfiguratsioon:

sudo rm /etc/nginx/sites-enabled/default
sudo systemctl reload nginx

Tüüpilised vead

Sümptom Põhjus Lahendus
403 Forbidden failidel puuduvad õigused chown www-data ja chmod 755
404 kõigil URL-idel vale root kontrolli kataloogi teed
PHP laaditakse failina alla puudub plokk location ~ \.php$ lisa FPM-i töötlemine
Avaneb võõras sait default pole välja lülitatud kustuta vaikekonfiguratsioon

Samm 6. Logid diagnostikaks

Kui midagi ei tööta, vaata konkreetse saidi vealogi:

sudo tail -f /var/log/nginx/example.com.error.log

Korduma kippuvad küsimused

Mille poolest erineb server block Apache virtual host’ist? See on sama mõiste — eraldi saidi kirjeldus. Nginxis on üks plokk server { } = üks virtuaalne host.

Kas Nginx tuleb pärast iga muudatust taaskäivitada? Piisab käsust systemctl reload nginx — see rakendab konfiguratsiooni aktiivseid ühendusi katkestamata. Täielikku restart‘i on vaja harva.

Kuidas paigutada ühte serverisse mitu saiti? Loo iga domeeni jaoks kausta sites-available eraldi fail unikaalse server_name ja root-iga, seejärel lülita need linkidega sisse kaustas sites-enabled.

Miks näitab brauser lehe vana versiooni? Töötas keš plokist expires. Tühjenda brauseri keš või vähenda arenduse ajaks kešimise tähtaega.

Pärast paigaldamist lisa HTTPS — Nginx töötab Let’s Encrypti sertifikaatidega suurepäraselt. Töötavatele saitidele sobivad paketid lehel VPS-i rent, CMS-ile aga WordPressi VPS.

Edgars Kalējs