Caddy: Руководство по установке, использованию и настройке
Caddy: Руководство по установке, использованию и настройке

Сегодня мы поговорим об очень крутом веб-сервере HTTP/2 с открытым исходным кодом — Caddy. Caddy написан на языке Go. Его файл конфигурации краток, понятен и мощный, что упрощает развертывание HTTP-сервисов. Лучшая особенность Caddy — то, что HTTPS включен по умолчанию. В этой статье я покажу вам, как установить и использовать Caddy, а также как настроить Caddy через Caddyfile и API.

Знакомство с Кэдди

Caddy — это веб-сервер HTTP/2 с открытым исходным кодом, созданный с использованием языка программирования Go. Его основные функции включают автоматический HTTPS, HTTP/2, IPv6, Markdown, WebSockets, FastCGI, шаблоны и многое другое. История Caddy берет свое начало в 2015 году, когда ее впервые предложил Мэтт Холт в своей магистерской диссертации. Его целью было создать веб-сервер, который мог бы автоматически получать и обновлять сертификаты TLS, упрощая развертывание защищенных веб-сайтов. Идея получила широкое признание, и вскоре Caddy привлек большое количество разработчиков и пользователей.

Установка Кэдди

Бинарная установка

  1. Сначала нам нужно скачать Caddy из двоичного файла,Вы можете скачать его здесь:https://caddyserver.com/download
  2. После завершения загрузки нам нужно выполнить следующую команду:
Язык кода:sh
копировать
sudo mv caddy /usr/bin/
sudo mkdir /etc/caddy
sudo cp Caddyfile /etc/caddy/Caddyfile
sudo groupadd --system caddy
sudo useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy web server" \
    caddy
  1. Далее нам нужно написать следующее /etc/systemd/system/caddy.service документ:
Язык кода:plain
копировать
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target
  1. Наконец, запускаем Caddy:
Язык кода:sh
копировать
sudo systemctl daemon-reload
sudo systemctl enable --now caddy
sudo systemctl status caddy

Примечание. Если вы используете CentOS 7, поскольку его версия systemd слишком низкая (219), вам необходимо сначала обновить ее.

Язык кода:sh
копировать
wget https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/repo/epel-7/jsynacek-systemd-backports-for-centos-7-epel-7.repo -O /etc/yum.repos.d/jsynacek-systemd-centos-7.repo
sudo yum update systemd -y

Установка докера

Если вы предпочитаете использовать Докер, ты можешь Docker Hub Найдено на Caddy из Официальное изображение:https://hub.docker.com/_/caddy

Вы можете запустить контейнер Caddy с помощью следующей команды:

Язык кода:sh
копировать
docker run -d --name caddy \
  -p 80:80 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data \
  caddy

Кэдди использует

Использовать Caddy очень просто, вам просто нужно выполнить следующую команду:

Язык кода:sh
копировать
caddy run

Вы также можете указать Caddyfile:

Язык кода:sh
копировать
caddy run --config /path/to/Caddyfile

Если вам нужно запустить статический файловый сервер, вы можете использовать следующую команду:

Язык кода:sh
копировать
caddy file-server --listen :2015 --root ~/mysite

Если вам нужно запустить файловый браузер, вы можете использовать следующую команду:

Язык кода:sh
копировать
caddy file-server --browse

Если вам нужно запустить обратный прокси-сервер, вы можете использовать следующую команду:

Язык кода:sh
копировать
caddy reverse-proxy --from :2080 --to :9000

Если вам нужно отформатировать Caddyfile, вы можете использовать следующую команду:

Язык кода:sh
копировать
caddy fmt --overwrite

Caddy API

Caddy предоставляет интерфейс API, с помощью которого вы можете просматривать и изменять конфигурацию Caddy. Например, вы можете использовать следующую команду для просмотра текущей конфигурации:

Язык кода:sh
копировать
curl localhost:2019/config/

Вы также можете добавить новую конфигурацию JSON:

Язык кода:sh
копировать
curl localhost:2019/load \
  -H "Content-Type: application/json" \
  -d @caddy.json

Или обновите существующий Caddyfile:

Язык кода:sh
копировать
curl localhost:2019/load \
	-H "Content-Type: text/caddyfile" \
	--data-binary @Caddyfile

Caddyfile

Caddyfile — это файл конфигурации Caddy, который использует простой синтаксис для определения и настройки поведения Caddy. Вот некоторые основные конфигурации Caddyfile:

  • Простой ответ:
Язык кода:plain
копировать
:2015

respond "Hello, world!"
  • Файловый сервер:
Язык кода:plain
копировать
localhost

root * /var/www/mysite
file_server
  • Браузер файлов:
Язык кода:plain
копировать
localhost

root * /var/www/mysite
file_server browse
  • обратный прокси:
Язык кода:plain
копировать
:2080

reverse_proxy :9000
  • Автоматический HTTPS:
Язык кода:plain
копировать
your_domain.com:8443

reverse_proxy :9000
  • HTTPS с использованием IP:
Язык кода:plain
копировать
your_ip:8443

reverse_proxy :9000
  • Отключите перенаправление HTTP на HTTPS:
Язык кода:plain
копировать
{
    auto_https disable_redirects
}

your_domain.com:8443

reverse_proxy :9000
  • Несколько сайтов:
Язык кода:plain
копировать
localhost:2015 {
	respond "Hello, world!"
}

localhost:2016 {
	respond "Goodbye, world!"
}
  • Токен сопоставления: Подпути только для прокси:
Язык кода:plain
копировать
localhost

reverse_proxy /api/* 127.0.0.1:9005
  • Путь обработки:
Язык кода:plain
копировать
example.com {
	handle_path /foo/* {
		# The path has the "/foo" prefix stripped
	}

	handle /bar/* {
		# The path still retains "/bar"
	}
}

Пример

Вот использование Caddy Функция прокси подпути для прокси n8n Сервис из Пример. Во-первых, нам нужно n8n Добавить N8N_PATH Переменные среды:

Язык кода:sh
копировать
docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e TZ="Asia/Shanghai" \
  -e N8N_PATH=/n8n/ \
  -e N8N_SECURE_COOKIE=false \
  docker.n8n.io/n8nio/n8n

Тогда мы сможем Caddy проходить handle_path Директива обрабатывает запросы подпутей и перезаписывает путь:

Язык кода:plain
копировать
{
   auto_https disable_redirects
}

9.135.143.173:8443 {
    handle_path /n8n/* {
        reverse_proxy localhost:5678
    }
    handle {
        reverse_proxy localhost:8080
    }
}

Таким образом, все сообщения, отправленные на /n8n/* Все запросы будут пересылаться на localhost:5678,другойиз Запрос будет проксированприезжать localhost:8080

Подвести итог

Выше представлено мое введение в Caddy, включая его установку, использование, API и Caddyfile. Я надеюсь, что эта статья поможет вам лучше понять и использовать Caddy. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте сообщение в области комментариев.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose