Veebisaidi paigaldamine Nginxi: server block sammult
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 bashSkripti 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.