Nginx: безопасность (server_tokens, заголовки безопасности)
Скрытие версии nginx, добавление заголовков безопасности (X-Frame-Options, X-Content-Type-Options, CSP) в nginx.
Настройка базовой безопасности в nginx: скрытие версии сервера и добавление заголовков безопасности.
Скрытие версии nginx
http {
# Скрыть версию nginx в заголовках ответа
server_tokens off;
server {
listen 80;
server_name example.com;
# ...
}
}
Базовые заголовки безопасности
server {
listen 443 ssl;
server_name example.com;
# Скрыть версию nginx
server_tokens off;
# Заголовки безопасности
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
Полный набор заголовков безопасности
server {
listen 443 ssl http2;
server_name example.com;
server_tokens off;
# Защита от clickjacking
add_header X-Frame-Options "DENY" always;
# Запрет MIME-sniffing
add_header X-Content-Type-Options "nosniff" always;
# XSS защита (устаревший, но некоторые браузеры используют)
add_header X-XSS-Protection "1; mode=block" always;
# Политика реферера
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Permissions Policy (бывший Feature-Policy)
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
# HSTS (только для HTTPS!)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
Content Security Policy (CSP)
server {
listen 443 ssl;
server_name example.com;
# Базовый CSP
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;
}
Глобальные заголовки в http блоке
http {
server_tokens off;
# Заголовки для всех server блоков
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
server {
listen 80;
server_name example.com;
# ...
}
}
Usage:
Добавьте server_tokens off в http блок для скрытия версии везде. Используйте add_header с флагом always для применения заголовков даже при ошибках.
Notes:
⚠️ always гарантирует, что заголовок будет добавлен даже при кодах ошибок (404, 500). HSTS работает только для HTTPS — не добавляйте его для HTTP. CSP требует тщательной настройки под ваш сайт, иначе может сломать функциональность.