Spec-Zone.ru › Caddy

Учебник по Caddyfile

Этот учебник научит вас основам HTTP Caddyfile, чтобы вы могли быстро и легко создавать хорошо оформленные и функциональные конфигурации сайта.

Цели:

  • 🔲 Первый сайт
  • 🔲 Сервер статических файлов
  • 🔲 Шаблоны
  • 🔲 Сжатие
  • 🔲 Несколько сайтов
  • 🔲 Маскарады
  • 🔲 Переменные окружения
  • 🔲 Комментарии

Предварительные требования:

  • Основные навыки работы с терминалом / командной строкой
  • Основные навыки работы с текстовым редактором
  • caddy в вашем PATH

Создайте новый текстовый файл с именем Caddyfile (без расширения).

Первым делом вы должны ввести адрес сайта:

localhost

Если порты HTTP и HTTPS (80 и 443 соответственно) являются привилегированными портами вашей ОС, вам потребуется либо запустить Caddy с повышенными привилегиями, либо использовать более высокий порт. Чтобы использовать более высокий порт, просто измените адрес на что-нибудь вроде localhost:2015 и измените порт HTTP, используя опцию Caddyfile http_port.

Затем нажмите Enter и введите, что вы хотите, чтобы он делал. Для этого учебника сделайте ваш Caddyfile следующим:

localhostrespond "Hello, world!"

Сохраните его и запустите Caddy (поскольку это учебник, мы будем использовать флаг --watch, чтобы изменения в нашем Caddyfile применялись автоматически):

caddy run --watch

Если вы получаете ошибки доступа, попробуйте использовать более высокий порт в вашем адресе (например, localhost:2015) и изменить порт HTTP или запустить с повышенными привилегиями.

В первый раз вас попросят ввести пароль. Это необходимо для того, чтобы Caddy мог предоставлять ваш сайт по протоколу HTTPS.

Caddy по умолчанию предоставляет все сайты по протоколу HTTPS, если адрес сайта содержит хост или IP-адрес. Автоматическое HTTPS можно отключить, добавив префикс к адресу http://.

Первый сайт

Откройте 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
Комментарии

Дополнительная информация

  • Концепции Caddyfile
  • Директивы
  • Общие шаблоны

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API