NGINX
#nginx#security#headers#server_tokens#xss#csp

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 требует тщательной настройки под ваш сайт, иначе может сломать функциональность.