Ошибки

Код 444 в nginx: что значит и как закрыть соединение без ответа

444 — не код HTTP, а внутренний сигнал nginx: закрыть соединение и ничего не отправлять. Посетитель не получает ни страницы, ни кода — браузер покажет ошибку соединения. Код 444 виден только в журнале доступа nginx. Им отсекают сканеры, ботов и запросы к серверу по IP-адресу или по чужому домену.

Обновлено 07.10.2026≈ 4 мин чтения
Содержание 10

Что означает код 444

В стандарте HTTP кода 444 нет. Это особый код nginx: директива return 444 велит закрыть соединение, не отправив клиенту даже заголовка ответа. Клиент не получает ни страницы, ни кода, а nginx записывает в журнал доступа 444 — так видно, сколько запросов он отсёк.

Со стороны клиента это выглядит как оборванное соединение. Например, на запрос по HTTP/1.1 Chrome покажет ошибку ERR_EMPTY_RESPONSE — сервер закрыл соединение, не прислав данных, — а curl завершится с кодом 52: ответа от сервера не было.

Если вы посетитель

  1. Если вы открывали сайт по IP-адресу или по старому домену, сервер мог намеренно не ответить на такой запрос. Откройте сайт по его обычному адресу.
  2. Повторите попытку позже.
  3. Если ошибка не проходит, сообщите владельцу сайта, какой адрес вы открывали и когда.

Зачем закрывать соединение без ответа

Ответ 403 или 404 — всё равно ответ: сервер отправляет заголовки и страницу ошибки, и по ним видно, что на этом адресе работает веб-сервер. С кодом 444 nginx не отправляет ничего. Так поступают с запросами, которые обычным посетителям не нужны:

  • запросы к серверу по IP-адресу или по именам, которые на сервере не настроены;
  • запросы без заголовка Host;
  • типовые адреса, которые перебирают сканеры, — например, /.env.

Как отсечь запросы по IP-адресу и на чужие домены

Если имя из запроса не подходит ни к одному блоку server или заголовка Host нет совсем, nginx отдаёт запрос серверу по умолчанию для этого порта. Поставьте в такой блок return 444 — и эти запросы получат обрыв соединения, а ваши сайты будут работать как обычно:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name "";
    return 444;
}

Похожий пример есть в документации nginx: пустое имя в server_name подходит к запросам без заголовка Host. С версии 0.8.48 пустое имя стоит по умолчанию, и эту строку можно не писать.

На одном порту сервер по умолчанию может быть только один: если default_server стоит у двух блоков, nginx не примет настройки и сообщит «a duplicate default server». В Ubuntu строка listen 80 default_server уже есть в стандартном сайте default. Уберите ссылку на него из /etc/nginx/sites-enabled — так сделано в инструкции Как разместить сайт на VPS.

То же для HTTPS

Для HTTPS в блок по умолчанию ставят директиву ssl_reject_handshake (есть с версии 1.19.4): nginx отклонит установку защищённого соединения, если имя не подходит ни к одному из ваших сайтов.

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl_reject_handshake on;
}

До HTTP-запроса дело здесь не доходит, поэтому кода 444 в журнале доступа не будет.

Как отсечь сканеры

Внутри сайта код 444 подходит для адресов, которые запрашивают только сканеры, — например, файла .env, в котором у приложений бывают записаны пароли:

location = /.env {
    return 444;
}
Не отдавайте 444 там, куда приходят обычные посетители и поисковые роботы: они получат обрыв соединения вместо понятного ответа.

После любых правок: sudo nginx -t, затем sudo systemctl reload nginx.

Как проверить, кого отсекает 444

Двадцать адресов с наибольшим числом ответов 444 покажет команда:

awk '$9 == 444 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Она рассчитана на стандартный формат журнала nginx: девятое поле — код ответа, седьмое — адрес. Если у сайта свой журнал, подставьте его путь. Если в списке оказались настоящие страницы сайта, правило задевает посетителей — поправьте его.

Чем 444 отличается от соседних кодов

КодКогда возникает
400Запрос испорчен — посетитель получает страницу ошибки
403Доступ запрещён — посетитель получает страницу ошибки
444nginx закрыл соединение, ничего не ответив
499Наоборот: соединение закрыл клиент, не дождавшись ответа

Источники

Сверено 6 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 07.10.2026