nginx и Astro (кухня и зал ресторана)
Это не соперники и не соседи по одной цепочке — это работники из разных цехов: один готовит, другой раздаёт. Обычно нужны оба.
На пальцах
Представь ресторан. На кухне стоит шеф-повар (Astro): он берёт рецепт и продукты и собирает блюдо — страницу сайта. В зале работает официант (nginx): он принимает заказ от гостя, относит на кухню, забирает готовое и несёт к столику. Сам он не готовит — зато знает, к какому столику нести, и умеет подать так, чтобы всё выглядело прилично. Гость видит только официанта, но без повара тому нечего нести.
Что делает каждый
Astro — это инструмент, с помощью которого разработчик собирает сайт: страницы, стили, картинки, островки интерактива. На выходе Astro выдаёт готовый набор файлов: HTML, CSS, JavaScript. В режиме статической генерации эти файлы собираются один раз при сборке проекта. В режиме серверного рендеринга (SSR) страницы собираются на лету для каждого запроса — на сервере, под управлением Node.js, Deno или другого адаптера.
nginx — программа, которая стоит на «входной двери» сервера и отдаёт готовые файлы браузерам, шифрует соединение по HTTPS, распределяет запросы между сервисами и кеширует ответы. Сам он ничего не создаёт — он раздаёт то, что сделал кто-то другой.
В чём разница
| nginx | Astro | |
|---|---|---|
| Что делает | Отдаёт готовый сайт посетителю | Создаёт сайт из кода разработчика |
| Кому нужен | Серверу, на котором крутится сайт | Разработчику, который этот сайт пишет |
| Когда работает | Каждый раз, когда кто-то открывает страницу | Один раз при сборке (SSG) или на каждый запрос (SSR) |
| Может ли один обойтись без другого | Да — может раздавать что угодно, не только Astro-сайт | Да — в режиме разработки Astro сам поднимает сервер для просмотра |
| Где «живёт» в готовом проекте | На боевом сервере, в Docker или на хостинге | В коде проекта и в папке dist/ после сборки |
Что из этого следует
Astro без nginx — нормально на этапе разработки: разработчик запускает astro dev и смотрит сайт через встроенный сервер. Но отдавать готовый сайт посетителям через тот же сервер не стоит — он для этого не предназначен и не выдержит нагрузки. nginx подключают, когда сайт нужно показать пользователям: он быстрее раздаёт статику, умеет сжимать ответы, вешает HTTPS-сертификат и справляется с большим потоком запросов. Поэтому в типичном проекте оба: Astro собирает, nginx раздаёт.