Nginx: базовый server block для статического сайта
Минимальная конфигурация nginx для статического сайта (HTML, CSS, JS). try_files, index, обработка ошибок.
Минимальная рабочая конфигурация nginx для статического сайта. Подходит для HTML/CSS/JS сайтов и SPA.
Базовый server block
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
С поддержкой SPA (Single Page Application)
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
# Все запросы на index.html (для SPA роутинга)
location / {
try_files $uri $uri/ /index.html;
}
# Кастомная страница 404
error_page 404 /index.html;
}
С кешированием статики
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
# Статика с кешированием
location ~* \.(jpg|jpeg|png|gif|ico|svg|css|js|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# HTML без кеша
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache";
}
# Основной location
location / {
try_files $uri $uri/ /index.html;
}
}
С gzip сжатием
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
# Gzip для текстовых файлов
gzip on;
gzip_types text/css application/javascript text/html application/json;
gzip_min_length 1000;
location / {
try_files $uri $uri/ /index.html;
}
}
Полный пример с безопасностью
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
# Безопасность
server_tokens off;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
# Защита скрытых файлов
location ~ /\. {
deny all;
access_log off;
}
# Статика с кешем
location ~* \.(jpg|jpeg|png|gif|ico|svg|css|js|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Основной location
location / {
try_files $uri $uri/ /index.html;
}
# Кастомная 404
error_page 404 /index.html;
}
Usage:
Создайте файл в /etc/nginx/sites-available/example.com, добавьте конфигурацию, создайте symlink в sites-enabled и перезагрузите nginx.
Notes:
⚠️ try_files $uri $uri/ /index.html означает: попробуй файл, потом директорию, если не найдено — верни index.html (для SPA). Используйте expires -1 для HTML, чтобы изменения применялись сразу после деплоя. immutable подходит только для версионированных файлов (например, app.abc123.js).