Базовая конфигурация Nginx
Оптимизированная базовая конфигурация Nginx с акцентом на безопасность и производительность.
Основной файл конфигурации
/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log crit;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
log_not_found off;
types_hash_max_size 4096;
client_max_body_size 16M;
# MIME types
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Логирование
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main buffer=16k flush=2m;
# SSL настройки
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Современные TLS настройки
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
resolver_timeout 2s;
# Сжатие
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/xml+rss
application/json;
# Кэширование
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# Защита от DDoS
limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m;
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_conn_zone $server_name zone=conn_limit_per_server:10m;
# Безопасность заголовки
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Включаем конфигурации сайтов
include /etc/nginx/conf.d/*.conf;
}
Базовый виртуальный хост
/etc/nginx/conf.d/default.conf
# Редирект всех HTTP запросов на HTTPS
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
# HTTPS сервер по умолчанию (заглушка)
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
# Самоподписанный сертификат для заглушки
ssl_certificate /etc/nginx/ssl/default.crt;
ssl_certificate_key /etc/nginx/ssl/default.key;
root /var/www/html;
index index.html;
# Отключаем логи для дефолтного сервера
access_log off;
error_log /var/log/nginx/default.error.log;
# Базовые ограничения
limit_conn conn_limit_per_ip 10;
limit_req zone=general burst=20 nodelay;
# Скрываем версию Nginx
server_tokens off;
# Защита от типичных атак
location ~* \.(git|svn|env) {
deny all;
return 404;
}
location ~* \.(sql|bak|backup|config)$ {
deny all;
return 404;
}
# Отключаем favicon.ico логи
location = /favicon.ico {
log_not_found off;
access_log off;
}
# Robots.txt
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Статические файлы
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary Accept-Encoding;
access_log off;
}
# Основная обработка
location / {
try_files $uri $uri/ =404;
}
}
Пример сайта на PHP
/etc/nginx/conf.d/example.com.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.php index.html index.htm;
# SSL сертификаты
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
# Логи
access_log /var/log/nginx/example.com.access.log main buffer=16k flush=2m;
error_log /var/log/nginx/example.com.error.log;
# Ограничения
limit_conn conn_limit_per_ip 10;
limit_req zone=general burst=20 nodelay;
# Защита wp-admin (если WordPress)
location ^~ /wp-admin/ {
limit_req zone=login burst=5 nodelay;
try_files $uri $uri/ /index.php?$args;
}
# PHP обработка
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# Безопасность PHP
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/";
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
# Статические файлы
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary Accept-Encoding;
access_log off;
# Корректная обработка отсутствующих файлов
try_files $uri =404;
}
# Блокировка скрытых файлов
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# Блокировка чувствительных файлов
location ~* \.(sql|bak|backup|config|log)$ {
deny all;
return 404;
}
# WordPress security (опционально)
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
return 404;
}
# Основная обработка
location / {
try_files $uri $uri/ /index.php?$args;
}
}
# Редирект с www на без www (или наоборот)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
return 301 https://example.com$request_uri;
}
Создание самоподписанного сертификата для тестирования
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/default.key \
-out /etc/nginx/ssl/default.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Development/CN=localhost"
sudo chmod 600 /etc/nginx/ssl/default.key
sudo chmod 644 /etc/nginx/ssl/default.crt
Проверка конфигурации
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx
Оптимизация
Эта конфигурация оптимизирована для производительности и безопасности. Адаптируйте параметры под ваши нагрузки.
Безопасность
Обязательно настройте файрвол и регулярно обновляйте Nginx до последних версий.