Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 405: Method Not Allowed (POST method not allowed for static HTML file) Linux / DevOps

Nginx Error 405: Method Not Allowed (POST to static) — Как исправить

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиентское веб-приложение отправляет AJAX/Fetch HTTP-запрос методом POST, PUT или DELETE к статическому файлу (например, /api/data.json, /index.html), но получает отказ 405 Method Not Allowed. В логе: 405 Method Not Allowed, client: ..., request: "POST /mock.json HTTP/1.1".

Тип ресурсаМетод запросаПоведение Nginx по умолчанию
Статический файл (.html, .json)GET / HEAD200 OK (Штатная отдача контента)
Статический файлPOST / PUT / DELETE405 Method Not Allowed (Блокировка стандартом)
Бэкенд (FastCGI, Proxy, uWSGI)POST200 OK (Передача запроса на обработку бэкенду)
  • По спецификации HTTP статические файлы не могут обрабатывать входящие данные методом POST.
  • Ошибка часто встречается при разработке фронтенда с мок-данными (mock JSON files) или при ошибочной отправке веб-форм на статический HTML.
  1. Вариант 1 (Рекомендуемый): Если POST-запрос должен обрабатываться серверным кодом, убедитесь, что запрос направлен в правильный location с бэкендом (Node.js, PHP, Python), а не на статический файл:
    location /api/ {
        proxy_pass http://backend_api:8080;
    }
  2. Вариант 2 (Для статических JSON/HTML моков): Переопределите обработчик ошибки 405 в блоке server, принудительно трансформируя статус ответа в 200 OK:
    server {
        listen 80;
        server_name example.com;
        root /var/www/html;
    
        # Хак для разрешения POST к статике:
        error_page 405 =200 $uri;
    }
  3. Вариант 3 (Через именованный location и proxy_pass):
    location / {
        error_page 405 = @handle_post_static;
        try_files $uri $uri/ =404;
    }
    
    location @handle_post_static {
        proxy_pass http://127.0.0.1:80$request_uri;
        proxy_method GET;
    }
  4. Проверьте валидность конфигурации и примените: sudo nginx -t && sudo systemctl reload nginx.
Безопасность: Разрешение POST к статическим файлам через error_page 405 =200 не приводит к изменению файлов на диске — Nginx просто возвратит тело статического файла с кодом 200, полностью проигнорировав переданные в POST данные.
Практический опыт инженера: Если 405 ошибка возникает на POST-запросе к SPA-роуту, убедитесь, что в директиве `try_files` последним параметром указан именно проксируемый бэкенд или корректный именованный location.

Частые вопросы (FAQ)

Почему Nginx запрещает POST к статическим файлам по умолчанию?

Потому что согласно спецификации протокола HTTP метод POST предполагает создание или обработку ресурса на сервере, что невозможно для обычных неизменяемых статических файлов.

Может ли Nginx сохранить отправленные в POST данные в JSON-файл без бэкенда?

Нет, штатный Nginx не умеет писать в файлы из тела POST запроса. Для этого требуется динамический бэкенд или модуль ngx_http_dav_module (для WebDAV PUT запросов).

Как разрешить методы PUT и DELETE для статики?

Для полноценной поддержки загрузки и удаления статических файлов через HTTP методы используется модуль WebDAV: директивы dav_methods PUT DELETE MKCOL COPY MOVE;.

Почему error_page 405 =200 $uri может ломать заголовки?

При внутренней переадресации через error_page метод запроса может неявно трансформироваться, а кеширующие заголовки могут вести себя как для статического GET-ответа.