MIME-типы
Тема дорожной карты · Nginx
MIME-типы в Nginx сопоставляют расширения файлов с заголовком HTTP-ответа Content-Type, сообщая браузерам, как интерпретировать передаваемый контент — отрендерить как HTML, выполнить как JavaScript, отобразить как изображение или предложить скачать. Сопоставления MIME-типов определяются в /etc/nginx/mime.types с использованием синтаксиса блока types (text/html html htm; application/javascript js mjs;) и подключаются в главную конфигурацию директивой include mime.types; внутри блока http файла /etc/nginx/nginx.conf. Директива default_type application/octet-stream; задаёт резервный MIME-тип для файлов, расширение которых не включено в блок types, заставляя веб-сервер отдавать их как обычный бинарный файл для скачивания, а не пытаться отрендерить. Пользовательские MIME-типы — такие как application/wasm wasm; для модулей WebAssembly или font/woff2 woff2; для веб-шрифтов — можно добавить непосредственно в файл mime.types или переопределить в блоке location через types { application/wasm wasm; }. Корректная настройка MIME-типов в Nginx важна для производительности веб-приложений, безопасности браузеров (предотвращение сниффинга MIME-типов с помощью X-Content-Type-Options: nosniff) и гарантии того, что ресурсы вроде сервис-воркеров и манифестов доставляются с типами контента, требуемыми спецификациями браузеров.
Как это работает
MIME-типы — одна из сильных сторон nginx: раздача файлов с диска быстрее почти любого другого варианта. Директивы: root /path (префикс ФС для URI), index index.html, try_files $uri $uri/ =404 (SPA fallback-паттерн), sendfile on, tcp_nopush on, tcp_nodelay on. Cache-заголовки через expires 1y; + add_header Cache-Control "public, immutable". gzip_static on — для раздачи pre-compressed файлов.
Когда применять
Nginx — для статики (HTML, JS, CSS, картинки, шрифты) и fall-through на backend для /api/*. Дальний Cache-Control — на hash-версионированные ассеты (/static/app.a3f4b.js). try_files — для SPA-роутинга: любой неизвестный путь возвращает index.html. Всегда gzip on + gzip_types text/plain text/css application/javascript application/json; рассмотрите Brotli (brotli on) для современных клиентов.
Типичные ошибки
Ловушки MIME-типы: огромные файлы без sendfile on (медленно + высокий CPU); нет Cache-Control (браузеры fetch на каждый запрос); раздача несжатого текста (5× bandwidth-штраф); неверные MIME-типы для шрифтов (браузеры отказывают); долго закешированный HTML указывает на версионированный JS, удалённый при деплое (белая страница). Atomic deploy + Cache-Control: no-store на HTML.