Учебник по Caddyfile
Этот учебник научит вас основам HTTP Caddyfile, чтобы вы могли быстро и легко создавать хорошо оформленные и функциональные конфигурации сайта.
Цели:
- 🔲 Первый сайт
- 🔲 Сервер статических файлов
- 🔲 Шаблоны
- 🔲 Сжатие
- 🔲 Несколько сайтов
- 🔲 Маскарады
- 🔲 Переменные окружения
- 🔲 Комментарии
Предварительные требования:
- Основные навыки работы с терминалом / командной строкой
- Основные навыки работы с текстовым редактором
-
caddyв вашем PATH
Создайте новый текстовый файл с именем Caddyfile (без расширения).
Первым делом вы должны ввести адрес сайта:
localhost
Затем нажмите Enter и введите, что вы хотите, чтобы он делал. Для этого учебника сделайте ваш Caddyfile следующим:
localhostrespond "Hello, world!"
Сохраните его и запустите Caddy (поскольку это учебник, мы будем использовать флаг --watch, чтобы изменения в нашем Caddyfile применялись автоматически):
caddy run --watch В первый раз вас попросят ввести пароль. Это необходимо для того, чтобы Caddy мог предоставлять ваш сайт по протоколу HTTPS.
Откройте localhost в вашем браузере и увидите, как работает ваш веб-сервер, с поддержкой HTTPS!
Это не очень интересно, поэтому давайте изменим наш статический ответ на сервер статических файлов с включёнными списками каталогов:
localhostfile_server browse
Сохраните свой Caddyfile и обновите вкладку браузера. Вы должны увидеть либо список файлов, либо HTML-страницу, если в текущем каталоге есть файл index.
Добавление функциональности
Давайте сделаем что-то интересное с нашим сервером статических файлов: предоставим шаблонную страницу. Создайте новый файл и вставьте в него следующее:
<!DOCTYPE html>
<html>
<head>
<title>Caddy tutorial</title>
</head>
<body>
Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}
</body>
</html>
Сохраните этот файл как caddy.html в текущем каталоге и загрузите его в свой браузер: https://localhost/caddy.html
Вывод:
Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}
Подождите минутку. Мы должны увидеть сегодняшнюю дату. Почему не работает? Потому что сервер еще не настроен на обработку шаблонов! Исправить легко, просто добавьте строку в Caddyfile, чтобы он выглядел так:
localhosttemplates
file_server browse
Сохраните и перезагрузите вкладку браузера. Вы должны увидеть:
Page loaded at: Tue Mar 25 05:37:33 UTC 2025
С модулем шаблонов Caddy templates module вы можете делать много полезных вещей со статическими файлами, таких как включение других HTML-файлов, выполнение подзапросов, установка заголовков ответа, работа со структурами данных и многое другое!
Хорошей практикой является сжатие ответов с помощью быстрого и современного алгоритма сжатия. Давайте включим поддержку Gzip и Zstandard, используя директиву encode:
localhostencode
templates
file_server browse
Вот базовый процесс запуска полупродвинутого, готового к производству сайта!
Когда вы будете готовы включить автоматическое HTTPS, просто замените адрес сайта (localhost в нашем учебнике) на ваше доменное имя. Для получения дополнительной информации см. наш гид по быстрой настройке HTTPS.
Несколько сайтов
С нашим текущим Caddyfile у нас может быть только одна настройка сайта! Только первая строка может быть адресом(ами) сайта, а вся остальная часть файла должна содержать директивы для этого сайта.
Но легко сделать так, чтобы мы могли добавить больше сайтов!
Наш Caddyfile на данный момент:
localhostencode
templates
file_server browse
эквивалентен этому:
localhost {
encode
templates
file_server browse
}
кроме того, что второй вариант позволяет добавить больше сайтов.
Обернув блок сайта фигурными скобками { }, мы можем определять несколько различных сайтов в одном Caddyfile.
Например:
:8080 {
respond "I am 8080"
}
:8081 {
respond "I am 8081"
}
При обёртке блоков сайта в фигурные скобки, только адреса отображаются вне фигурных скобок, а только директивы - внутри.
Для нескольких сайтов, которые используют одну и ту же конфигурацию, можно добавить больше адресов, например:
:8080, :8081 {
...
}
Вы можете определить столько различных сайтов, сколько вам нужно, при условии, что каждый адрес уникален.
Маскарады
Возможно, нам потребуется применить некоторые директивы только к определённым запросам. Например, предположим, что мы хотим иметь и сервер статических файлов, и обратный прокси, но очевидно, что мы не можем сделать и то, и другое для каждого запроса! Либо сервер статических файлов запишет ответ со статическим файлом, либо обратный прокси перенаправит запрос на бэкенд и запишет ответ.
Эта конфигурация не будет работать так, как нам нужно (reverse_proxy будет иметь приоритет из-за порядка директивы):
localhostfile_server
reverse_proxy 127.0.0.1:9005
На практике мы можем использовать обратный прокси только для запросов API, т.е. для запросов с базовым путём /api/. Это легко сделать, добавив маркер маскарада:
localhostreverse_proxy /api/* 127.0.0.1:9005
file_server
Теперь обратный прокси будет иметь приоритет для всех запросов, начинающихся с /api/.
Часть /api/*, которую мы только что добавили, называется маркером маскарада. Вы можете определить это как маркер маскарада, потому что он начинается с обратной косой черты / и следует сразу за директивой (но вы всегда можете найти её в документации по директивам, чтобы быть уверенным).
Маскарады очень мощные. Вы можете объявлять именованные маскарады и использовать их, как @name, чтобы соответствовать не только пути запроса!
Переменные окружения
Адаптер Caddyfile позволяет подставлять переменные окружения перед разбором Caddyfile.
Сначала установите переменную окружения (в той же оболочке, где запущен Caddy):
export SITE_ADDRESS=localhost:9055 Затем вы можете использовать её в Caddyfile следующим образом:
{$SITE_ADDRESS}file_server
Перед разбором Caddyfile он будет расширен до:
localhost:9055file_server
Вы можете использовать переменные окружения в любом месте Caddyfile для любого количества маркеров.
Комментарии
Последняя вещь, которая вам будет очень полезна: если вы хотите что-либо отметить или примечать в своём Caddyfile, вы можете использовать комментарии, начинающиеся с #:
# this starts a comment
Дополнительная информация
© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/caddyfile-tutorial