Фреймворк Fresh построен на базе Deno и ориентирован на современную разработку веб-приложений с высокой производительностью и минимальными накладными расходами. Один из ключевых аспектов развёртывания приложений — корректная настройка доменов, чтобы сервер правильно обрабатывал запросы, маршрутизировал их и обеспечивал безопасное подключение.
Fresh позволяет обрабатывать несколько доменов через конфигурацию сервера. В отличие от классических Node.js-приложений, здесь нет необходимости использовать отдельный прокси вроде Nginx для маршрутизации базовых HTTP-запросов, если приложение развёртывается через стандартный Deno Deploy или на локальный сервер.
Для каждого домена можно задать индивидуальные настройки:
import { serve } from "https://deno.land/std@0.201.0/http/server.ts";
serve((req: Request) => {
const url = new URL(req.url);
switch (url.hostname) {
case "example.com":
return new Response("Главная страница example.com");
case "api.example.com":
return new Response("API example.com");
default:
return new Response("Домен не найден", { status: 404 });
}
});
Ключевые моменты:
url.hostname позволяет различать запросы по
домену.*.example.com с соответствующей проверкой
endsWith(".example.com").Fresh использует стандартные возможности Deno для работы с TLS. Настройка HTTPS особенно важна для production, чтобы обеспечить безопасность передачи данных. Основные методы:
deno run --allow-net --allow-read --cert=cert.pem --key=key.pem server.ts
Let’s Encrypt или внешние провайдеры для production:
--cert и --key или
через встроенный прокси, если используется Deno Deploy.Важно: при использовании Deno Deploy TLS настраивается автоматически, достаточно правильно указать домен в настройках проекта.
Для локального тестирования можно использовать файл
hosts, добавив строки:
127.0.0.1 example.com
127.0.0.1 api.example.com
Это позволяет обращаться к разным доменам на одном сервере. Для production требуется регистрация домена и настройка DNS-записей:
A-запись указывает на IP сервера.CNAME-записи используются для поддоменов, если они
направлены на основной домен.После этого можно использовать механизм обработки
hostname в Fresh для маршрутизации.
Fresh поддерживает динамическую маршрутизацию, что упрощает работу с поддоменами:
serve((req: Request) => {
const { hostname } = new URL(req.url);
if (hostname.endsWith(".example.com")) {
const subdomain = hostname.split(".")[0];
return new Response(`Поддомен: ${subdomain}`);
}
return new Response("Домен не поддерживается", { status: 404 });
});
Хотя Fresh способен обслуживать несколько доменов самостоятельно, для сложных конфигураций рекомендуется использовать обратный прокси:
Пример конфигурации Nginx:
server {
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
}
}
Преимущества:
Fresh позволяет комбинировать локальные и глобальные конфигурации:
Это обеспечивает гибкость и совместимость с разными средами: локальной, staging и production.
Настройка доменов во Fresh требует внимания к деталям DNS, SSL и маршрутизации. Корректная конфигурация позволяет создавать масштабируемые и безопасные веб-приложения без сложных внешних инструментов.