Безопасная конфигурация nginx: HTTPS, заголовки безопасности и ограничения доступа

Практический чек-лист с готовыми фрагментами для сайта или обратного прокси на nginx.

nginx быстрый и гибкий, но стандартная конфигурация рассчитана на то, чтобы работать везде, а не на строгость. Эти настройки добавляют шифрование, защитные заголовки и простой контроль доступа. Сочетайте их с регулярными обновлениями — см. нашу статью об уязвимостях nginx в 2026 году.

Перед началом: замените example.am своим доменом, а 192.168.88.0/24 — офисной или VPN-сетью. Проверяйте каждое изменение командой nginx -t перед перезагрузкой и храните копию рабочей конфигурации.

Шаг 1. Перенаправьте весь HTTP на HTTPS

Посетители и поисковики всегда должны попадать на зашифрованную версию сайта.

server {
    listen 80;
    server_name example.am www.example.am;
    return 301 https://$host$request_uri;
}

Шаг 2. Получите бесплатный сертификат

Сертификаты Let's Encrypt бесплатны и автоматически продлеваются через certbot.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.am -d www.example.am

Шаг 3. Современный TLS и заголовки безопасности

Разрешите только TLS 1.2 и 1.3, скройте версию nginx и добавьте заголовки, защищающие браузеры от распространённых атак. Добавьте Content-Security-Policy, когда будете знать, какие внешние скрипты использует сайт.

# in the http { } block:
server_tokens off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
client_max_body_size 10m;
# in the server { } block for HTTPS:
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Шаг 4. Закройте скрытые файлы и защитите админ-разделы

Остатки развёртывания вроде .git или .env никогда не должны скачиваться. Админ-панели должны быть доступны только из доверенных сетей.

# block hidden files such as .git and .env (keep Let's Encrypt working)
location ~ /\.(?!well-known) {
    deny all;
}
# admin area only from the office / VPN
location /admin/ {
    allow 192.168.88.0/24;
    deny all;
}

Шаг 5. Замедлите подбор паролей

Ограничьте, как часто один адрес может запрашивать страницу входа.

# in the http { } block:
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# in the location that handles the login page:
limit_req zone=login burst=5 nodelay;

Шаг 6. Проверьте и примените

Проверьте конфигурацию, перезагрузите без простоя и убедитесь, что заголовки на месте.

sudo nginx -t && sudo systemctl reload nginx
curl -sI https://example.am | grep -iE 'strict|x-frame|x-content|server'

Хорошая конфигурация незаметна для обычных посетителей и очень неудобна для всех остальных.

Нужна помощь? Свяжитесь с CySec — первая консультация бесплатно.


Все статьи

Нужна помощь с этим?

Наши инженеры проанализируют вашу текущую инфраструктуру и предложат конкретные улучшения.