Nginx 400: client sent invalid method — Анализ причин и фикс
В журнале error.log Nginx регулярно появляются предупреждения: client sent invalid method while reading client request line, client: 198.51.100.77, server: example.com, request: "\x16\x03\x01\x02\x00\x01...". Клиент получает отказ с кодом 400 Bad Request.
| Сигнатура запроса в логе | Что на самом деле отправляет клиент | Причина ошибки |
|---|---|---|
\x16\x03\x01... | TLS Client Hello (Бинарный пакет SSL) | Попытка установить HTTPS-соединение на чистый HTTP-порт (80) |
PRI * HTTP/2.0 | HTTP/2 Connection Preface | Попытка соединения по h2c на порт без поддержки HTTP/2 |
| Мусорные байты / эксплойты | Сетевой сканнер (ZGrab, Shodan) | Фаззинг портов и сканирование уязвимостей |
- Большинство таких записей генерируется автоматизированными сканерами уязвимостей или ботами.
- Ошибка может возникать у реальных пользователей, если в ссылке на сайте ошибочно указан протокол
https://example.com:80/.
- Проверьте, какой трафик вызывает ошибку в журнале Nginx:
sudo tail -n 30 /var/log/nginx/error.log | grep "invalid method" - Если строка начинается с шестнадцатеричных символов
\x16\x03..., это означает, что клиенты пытаются открыть TLS-сессию на обычном незашифрованном 80 порту. - Проверьте внешние DNS-записи и конфигурацию балансировщиков нагрузки (AWS ALB, Cloudflare): порт 80 должен принимать только чистый HTTP с последующим 301-редиректом на 443 порт.
- Если вы настраиваете поддержку протокола HTTP/2 (h2c) без шифрования на внутреннем порту, явно включите его в директиве
listen:# Для Nginx 1.25.1+: listen 8080; http2 on; # Для старых версий: listen 8080 http2; - Для снижения шума в логах от сетевых сканеров понизьте уровень логирования подобных аномалий в
nginx.conf:error_log /var/log/nginx/error.log error;
client sent invalid method с одного IP-адреса с различными бинарными последовательностями свидетельствует об активном сканировании портов утилитами вроде Nmap или попытках эксплуатации уязвимостей переполнения буфера.Частые вопросы (FAQ)
Опасна ли ошибка client sent invalid method для сервера?
Нет, для сервера она безопасна. Nginx парсит первую строку запроса на уровне конечного автомата, моментально отбрасывает невалидный метод и закрывает соединение, не передавая данные в бэкенд.
Почему в логе отображаются байты \x16\x03\x01?
Байт \x16 означает тип TLS Handshake Record, а \x03\x01 соответствует версии протокола TLS 1.0/SSL 3.0. Клиент пытался начать защищенную сессию на незащищенном сокете.
Можно ли полностью заблокировать IP-адреса, спамящие такими запросами?
Да, с помощью утилиты fail2ban, настроив фильтр по регулярному выражению 'client sent invalid method' в логах Nginx.
Поддерживает ли Nginx кастомные HTTP-методы (например, PROPFIND для WebDAV)?
Да, для этого необходимо собрать Nginx с модулем ngx_http_dav_module или использовать сторонние WebDAV модули.