Svetainės diegimas Nginx: server block po žingsnį
Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):
curl -sSL https://cp.lv/scripts/razvernut-sajt-na-nginx.sh | sudo bash…arba su wget:
wget -qO- https://cp.lv/scripts/razvernut-sajt-na-nginx.sh | sudo bashSkripto turinys 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"
Kad Nginx aptarnautų jūsų svetainę, jam reikia aprašyti „virtualų hostą“ — server block: kur guli failai, kokį domeną aptarnauti ir kaip apdoroti užklausas. Žemiau — veikianti schema tiek statikai, tiek PHP.
1 žingsnis. Svetainės katalogo paruošimas
Patalpinkite svetainės failus atskirame kataloge ir savininku nustatykite žiniatinklio vartotoją 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
Įkelkite failus (pavyzdžiui, per rsync arba git clone). Patikrai sukurkite pradinį puslapį:
echo "<h1>example.com works</h1>" | sudo tee /var/www/example.com/index.html
2 žingsnis. Server block statinei svetainei
Atidarykite /etc/nginx/sites-available/example.com redaktoriuje:
sudo nano /etc/nginx/sites-available/example.com
Failo turinys:
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;
}
Arba sukurkite visą konfigūraciją viena komanda — nukopijuokite ir įklijuokite į konsolę (kabutės 'EOF' svarbios, kad Nginx kintamieji $uri liktų nepakeisti):
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
Direktyva try_files ... =404 grąžina failą, jei jis egzistuoja, priešingu atveju — sąžiningą 404. Blokas su expires įjungia statikos talpyklą naršyklėje.
3 žingsnis. Variantas PHP svetainei
Jei svetainė veikia su PHP, pridėkite apdorojimą per PHP-FPM ir index.php. Atidarykite tą patį failą redaktoriuje (sudo nano /etc/nginx/sites-available/example.com) ir pertvarkykite jį taip:
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;
}
}
Arba įrašykite PHP variantą viena komanda (kabutės 'EOF' svarbios, kad Nginx kintamieji $uri liktų nepakeisti):
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
Čia try_files su atsarga į /index.php — standartas CMS ir karkasams su draugiškais URL (WordPress, Laravel).
4 žingsnis. Aktyvavimas ir patikra
Įjunkite svetainę simboline nuoroda, patikrinkite sintaksę ir perkraukite:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
nginx -t turi atsakyti syntax is ok ir test is successful. Jei ne — klaida nurodys failą ir eilutę.
5 žingsnis. Numatytosios svetainės išjungimas
Kad Nginx nerodytų numatytojo užsklandos puslapio, pašalinkite numatytąją konfigūraciją:
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
Tipinės klaidos
| Simptomas | Priežastis | Sprendimas |
|---|---|---|
| 403 Forbidden | nėra teisių į failus | chown www-data ir chmod 755 |
| 404 visuose URL | neteisingas root |
patikrinkite kelią iki katalogo |
| PHP atsisiunčiamas failu | nėra bloko location ~ \.php$ |
pridėkite FPM apdorojimą |
| Atsidaro svetimas puslapis | neišjungtas default |
pašalinkite numatytąją konfigūraciją |
6 žingsnis. Žurnalai diagnostikai
Jei kas nors neveikia, žiūrėkite konkrečios svetainės klaidų žurnalą:
sudo tail -f /var/log/nginx/example.com.error.log
Dažni klausimai
Kuo server block skiriasi nuo virtual host Apache serveryje?
Tai ta pati sąvoka — atskiros svetainės aprašas. Nginx vienas blokas server { } = vienas virtualus hostas.
Ar reikia perkrauti Nginx po kiekvieno pakeitimo?
Pakanka systemctl reload nginx — jis pritaikys konfigūraciją nenutraukdamas aktyvių ryšių. Pilnas restart reikalingas retai.
Kaip talpinti kelias svetaines viename serveryje?
Sukurkite atskirą failą kataloge sites-available kiekvienam domenui su unikaliu server_name ir root, tada įjunkite nuorodomis kataloge sites-enabled.
Kodėl naršyklė rodo seną puslapio versiją?
Suveikė talpykla iš bloko expires. Išvalykite naršyklės talpyklą arba kūrimo metu laikinai sumažinkite talpinimo laiką.
Po paleidimo pridėkite HTTPS — Nginx puikiai dirba su Let’s Encrypt sertifikatais. Realioms svetainėms tiks planai puslapyje VPS serverio nuoma, o CMS — WordPress VPS.