Caddy: различия между версиями

Материал из Slipenko.Wiki
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 143: Строка 143:
==== Адаптер конфигурации ====
==== Адаптер конфигурации ====


Адаптер конфигурации в Caddy - это плагин, который позволяет использовать различные форматы конфигурационных файлов для определения параметров сервера Caddy. Адаптеры конфигурации обеспечивают гибкость и удобство в выборе и использовании конфигурационных форматов, которые наиболее соответствуют вашим потребностям.
Адаптер конфигурации в Caddy это плагин, который позволяет использовать различные форматы конфигурационных файлов для определения параметров сервера Caddy. Адаптеры конфигурации обеспечивают гибкость и удобство в выборе и использовании конфигурационных форматов, которые наиболее соответствуют вашим потребностям.


Caddy поддерживает несколько встроенных адаптеров конфигурации, а также предоставляет возможность создавать собственные адаптеры. Вот некоторые из встроенных адаптеров конфигурации, доступных в Caddy:
Caddy поддерживает несколько встроенных адаптеров конфигурации, а также предоставляет возможность создавать собственные адаптеры. Вот некоторые из встроенных адаптеров конфигурации, доступных в Caddy:

Версия от 11:29, 25 июня 2023

Web-сервер caddy

Что такое caddy?

Caddy — это веб-сервер с открытым исходным кодом с автоматическим HTTPS из коробки.

Среди основных особенностей можно выделить:

  • Простота настройки;
  • Автоматическое обновление сертификатов TLS;
  • Поддержка мультиядерности/мультипроцессорности;
  • Поддержка HTTP/1.1, HTTP/2, и HTTP/3 по умолчанию;
  • Возможность изменения конфигурации через API.

Установка caddy в ОС Альт

Предпочтительным способом установки является установка пакета caddy из репозитория:

$ su -
# apt-get update && apt-get install caddy

Управление службой

С использованием systemd

Пакет caddy в ОС Альт предоставляет две systemd службы:

  • caddy.service — если вы настроите Caddy с Caddyfile. Если вы предпочитаете использовать другой адаптер конфигурации или файл конфигурации JSON, вы можете переопределить команды ExecStart и ExecReload.
  • caddy-api.service — если вы настраиваете Caddy исключительно через его API. Эта служба использует параметр --resume, который запускает Caddy с использованием файла autosave.json, который сохраняется по умолчанию.

Управление данными службами возможно через стандартные команды systemctl.

Например, чтобы добавить caddy в автозагрузку и запустить прямо сейчас можно воспользоваться данной командой:

# systemctl enable --now caddy

Если вам нужно переключаться между службами, вам следует отключить и остановить предыдущую, прежде чем включать и запускать другую. Например, чтобы переключиться с сервиса caddy на сервис caddy-api:

# systemctl disable --now caddy
# systemctl enable --now caddy-api

По умолчанию, логи пишутся в journald. Чтобы их посмотреть можно воспользоваться данной командой:

# journalctl -eu caddy.service
  • -e - немедленно перейдите к концу журнал
  • -u - показывать логи только выбранного юнита

Без использования systemd

Также возможно использование caddy без systemd.

Для запуска сервера воспользуйтесь командой caddy run. Для запуска с стандартной конфигурацией, предоставляемой пакетом caddy добавьте --сonfig /etc/caddy/Caddyfile:

# caddy run --config /etc/caddy/Caddyfile

Данная команда запустит сервер в текущем терминале. Если необходимо запустить в фоне, можно воспользоваться командой caddy start.

Для выключения сервера воспользуйтесь командой caddy stop.

По остальным командам можно почитать в:

Настройка caddy

В ОС Альт конфигурация caddy расположена в /etc/caddy/Caddyfile.

По умолчанию главный файл конфигурации содержит строку import Caddyfile.d/*.caddyfile. Эта строка указывает на то, что caddy импортирует все файлы с расширением .caddyfile из директории /etc/caddy/Caddyfile.d/. Данная функциональность позволяет разделять конфигурации на отдельные файлы и упрощает организацию и поддержку конфигурации сервера.

Статический файловый сервер

Для создания статического файлового сервера необходимо использовать директиву file_server.

Пример минимальной конфигурации:

example.com {
    root * /var/www/html
    file_server
}

При этом будут обслуживаться все файлы в корневом каталоге. Если не используется index файл, то для просмотра списка файлов потребуется указать file_server browse.

Если необходимо скрыть какие-то файлы, то можно воспользоваться директивой hide:

example.com {
    root * /var/www/html
    file_server {
        hide .git
    }
}

Данная конфигурация скрывает все папки .git и их содержимое.

Если необходимо скрыть какие-то файлы конкретные файлы, то можно использовать переменную http.vars.root:

example.com {
   root * /var/www/html
   file_server {
      hide {http.vars.root}/file
   }
}

Данная конфигурация скрывает файл /var/www/html/file.

Reverse proxy

Для создания обратного прокси-сервера (reverse proxy) необходимо использовать директиву reverse_proxy.

Пример минимальной конфигурации:

example.com {
    reverse_proxy localhost:5000
}

Пример конфигурации, которая проксирует запросы, начинающиеся с /api/, и обеспечивает обслуживание статических файлов:

example.com {
    root * /var/www/html
    reverse_proxy /api/* localhost:5000
    file_server
}

Редирект с www. субдомена

Для редиректа в сервере caddy используется директива redir.

Пример конфигурации для редиректа с www. субдомена:

www.example.com {
    redir https://example.com{uri}
}

example.com {
}

Если необходимо сделать редирект для нескольких доменов, то можно воспользоваться переменными {labels.*}:

www.example-one.com, www.example-two.com {
    redir https://{labels.1}.{labels.0}{uri}
}

example-one.com, example-two.com {
}

Массив labels хранит части имени хоста, индексируемые с 0 с права (0=com, 1=example-one, 2=www).

Адаптер конфигурации

Адаптер конфигурации в Caddy — это плагин, который позволяет использовать различные форматы конфигурационных файлов для определения параметров сервера Caddy. Адаптеры конфигурации обеспечивают гибкость и удобство в выборе и использовании конфигурационных форматов, которые наиболее соответствуют вашим потребностям.

Caddy поддерживает несколько встроенных адаптеров конфигурации, а также предоставляет возможность создавать собственные адаптеры. Вот некоторые из встроенных адаптеров конфигурации, доступных в Caddy:

  1. Caddyfile: Это стандартный формат конфигурации Caddy. Он основан на простом текстовом формате и позволяет определить веб-сервер и его параметры в удобном для чтения виде. Пример Caddyfile:
    example.com {
        root /var/www
        gzip
        log /var/log/access.log
    }
    
  2. JSON: Caddy также поддерживает конфигурацию в формате JSON. Это может быть полезно, если вы предпочитаете работать с JSON-файлами или если ваши инструменты автоматизации используют JSON-формат. Пример JSON-конфигурации:
    {
        "apps": {
            "http": {
                "servers": {
                    "example": {
                        "listen": [":80"],
                        "routes": [
                            {
                                "handle": [{
                                    "handler": "file_server",
                                    "root": "/var/www"
                                }],
                                "match": [{
                                    "host": ["example.com"]
                                }]
                            }
                        ],
                        "logs": {
                            "default_logger_name": {
                                "writer": {
                                    "filename": "/var/log/access.log"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
  3. YAML: Caddy также поддерживает конфигурацию в формате YAML. YAML-файлы обычно более читаемы и удобны в использовании, особенно для людей, знакомых с YAML-синтаксисом. Пример YAML-конфигурации:
    http:
      servers:
        example:
          listen:
            - :80
          routes:
            - match:
                host:
                  - example.com
              handle:
                - handler: file_server
                  root: /var/www
          logs:
            default_logger_name:
              writer:
                filename: /var/log/access.log
    

Решение типовых проблем

listen tcp 127.0.0.1:2019: bind: address already in use

Пример сообщения об ошибке:

 starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: address already in use

Ошибка означает, что адрес 127.0.0.1:2019 (порт 2019) уже занят.

Для того, чтобы определить, какое приложение использует данный порт можно воспользоваться утилитой lsof:

 # lsof -i :2019
 COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 ahttpd  38108 _ahttpd   16u  IPv6  64156      0t0  TCP *:2019 (LISTEN)
  • -i - позволяет вывести сведения о файлах, интернет-адреса которых соответствуют заданному адресу;
  • :2019 - необходимый порт.

В данном случае, необходимо остановить службу ahttpd:

 # systemctl stop ahttpd.service

Дополнительно

Список использованных источников