Сегодня мы поговорим об очень крутом веб-сервере 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 привлек большое количество разработчиков и пользователей.
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
/etc/systemd/system/caddy.service
документ:[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
sudo systemctl daemon-reload
sudo systemctl enable --now caddy
sudo systemctl status caddy
Примечание. Если вы используете CentOS 7, поскольку его версия systemd слишком низкая (219), вам необходимо сначала обновить ее.
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 с помощью следующей команды:
docker run -d --name caddy \
-p 80:80 \
-v $PWD/Caddyfile:/etc/caddy/Caddyfile \
-v caddy_data:/data \
caddy
Использовать Caddy очень просто, вам просто нужно выполнить следующую команду:
caddy run
Вы также можете указать Caddyfile:
caddy run --config /path/to/Caddyfile
Если вам нужно запустить статический файловый сервер, вы можете использовать следующую команду:
caddy file-server --listen :2015 --root ~/mysite
Если вам нужно запустить файловый браузер, вы можете использовать следующую команду:
caddy file-server --browse
Если вам нужно запустить обратный прокси-сервер, вы можете использовать следующую команду:
caddy reverse-proxy --from :2080 --to :9000
Если вам нужно отформатировать Caddyfile, вы можете использовать следующую команду:
caddy fmt --overwrite
Caddy предоставляет интерфейс API, с помощью которого вы можете просматривать и изменять конфигурацию Caddy. Например, вы можете использовать следующую команду для просмотра текущей конфигурации:
curl localhost:2019/config/
Вы также можете добавить новую конфигурацию JSON:
curl localhost:2019/load \
-H "Content-Type: application/json" \
-d @caddy.json
Или обновите существующий Caddyfile:
curl localhost:2019/load \
-H "Content-Type: text/caddyfile" \
--data-binary @Caddyfile
Caddyfile — это файл конфигурации Caddy, который использует простой синтаксис для определения и настройки поведения Caddy. Вот некоторые основные конфигурации Caddyfile:
:2015
respond "Hello, world!"
localhost
root * /var/www/mysite
file_server
localhost
root * /var/www/mysite
file_server browse
:2080
reverse_proxy :9000
your_domain.com:8443
reverse_proxy :9000
your_ip:8443
reverse_proxy :9000
{
auto_https disable_redirects
}
your_domain.com:8443
reverse_proxy :9000
localhost:2015 {
respond "Hello, world!"
}
localhost:2016 {
respond "Goodbye, world!"
}
localhost
reverse_proxy /api/* 127.0.0.1:9005
example.com {
handle_path /foo/* {
# The path has the "/foo" prefix stripped
}
handle /bar/* {
# The path still retains "/bar"
}
}
Вот использование Caddy Функция прокси подпути для прокси n8n Сервис из Пример. Во-первых, нам нужно n8n Добавить N8N_PATH
Переменные среды:
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
Директива обрабатывает запросы подпутей и перезаписывает путь:
{
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. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте сообщение в области комментариев.