Веб-сервер · 9 min read · Oct 30, 2025
Как установить и настроить веб-сервер Caddy с PHP на Fedora 34 / CentOS 8

Caddy — это веб-сервер с открытым исходным кодом, написанный на языке Go. Он поддерживает HTTP/3, TLS v1.3, автоматическую настройку SSL с помощью Let’s Encrypt, обратный прокси и поддерживает множество плагинов для расширения своей функциональности. Его преимущество заключается в том, что вся его конфигурация обслуживается из одного файла, независимо от того, сколько сайтов вам нужно разместить.
Этот учебник охватывает установку и настройку Caddy и PHP на серверах на базе Fedora 34 и CentOS 8. Мы рассмотрим, как размещать один и несколько сайтов, а также как использовать обратный прокси вместе с несколькими другими функциями безопасности.
Предварительные требования
- Сервер на базе Fedora 34 или CentOS 8
- Непривилегированный пользователь с правами sudo
- Доменное имя, указывающее на IP-адрес сервера
- SELinux отключен.
shell $ sudo setenforce 0 - Убедитесь, что все обновлено.
shell $ sudo dnf update
Шаг 1 - Настройка брандмауэра
Первый шаг — настроить брандмауэр для открытия портов HTTP и HTTPS. Fedora и CentOS поставляются с предустановленным брандмауэром Firewalld.
Проверьте, работает ли брандмауэр.
$ sudo firewall-cmd --state
Вы должны получить следующий вывод.
running
Проверьте текущие разрешенные службы/порты.
$ sudo firewall-cmd --permanent --list-services
Он должен показать следующий вывод.
dhcpv6-client mdns ssh
Разрешите порты HTTP и HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Проверьте статус брандмауэра еще раз.
$ sudo firewall-cmd --permanent --list-services
Вы должны увидеть аналогичный вывод.
dhcpv6-client http https mdns ssh
Перезагрузите брандмауэр.
$ sudo systemctl reload firewalld
Шаг 2 - Установка Caddy
Первый шаг — установить сервер. Шаги установки остаются одинаковыми как для Fedora 34, так и для CentOS 8.
$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy
Вы можете проверить установку с помощью следующей команды.
$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=
Шаг 3 - Основы конфигурации Caddy
Caddy использует JSON в качестве основного формата для хранения или записи конфигурации. Это самый гибкий способ написания конфигурации и поддерживает все функции Caddy. Но если вы не знаете, как писать JSON-файлы, Caddy предлагает более простой способ в виде Caddyfile.
Пакет Fedora / CentOS включает Caddyfile по адресу /etc/caddy/Caddyfile. Он должен выглядеть следующим образом (игнорируя комментарии)
:80 {
root * /usr/share/caddy
file_server
}
Включите и запустите демон caddy.
$ sudo systemctl enable --now caddy
Вы можете открыть URL http://youripaddress, чтобы проверить. Вы должны увидеть следующую страницу приветствия.

Caddy предлагает множество функций и конфигураций, поэтому мы рассмотрим только важные, чтобы обслуживать наш веб-сайт. По умолчанию конфигурация обслуживается по HTTP, что указано как :80. Директива root говорит Caddy искать файлы для обслуживания в каталоге /usr/share/caddy.
Директива file_server говорит Caddy действовать как файловый сервер, что означает, что он будет обслуживать только статические файлы по умолчанию.
Настройка Caddy для простого HTML-сайта
Давайте создадим базовый файл конфигурации caddy для обслуживания статического веб-сайта.
Создайте каталог для размещения вашего веб-сайта и хранения ваших файлов журналов.
$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy
Установите владельца каталога на Caddy.
$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy
Создайте HTML-файл для тестирования и откройте его для редактирования.
$ sudo nano /var/www/example.com/html/index.html
Добавьте следующий код.
Привет от Caddy!
Привет, от Caddy!
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Откройте Caddyfile для редактирования.
$ sudo nano /etc/caddy/Caddyfile
Замените существующий код на следующий.
example.com {
root * /var/www/example.com/html
file_server
encode gzip
log {
output file /var/log/caddy/example.access.log
}
@static {
file
path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
}
header @static Cache-Control max-age=5184000
tls [email protected]
}
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Давайте пройдемся по всем директивам в файле. Директива encode gzip говорит Caddy сжимать файлы с помощью сжатия Gzip.
Директива log выводит журнал доступа для сайта в файл /var/log/caddy/example.access.log. По умолчанию Caddy вращает файлы журналов, когда они достигают 100 МБ. Повернутые файлы удаляются через 90 дней или когда их больше 10. Вы можете изменить параметры по умолчанию следующим образом.
log {
output file /var/log/caddy/example.access.log {
roll_size 10MB
roll_keep 5
roll_keep_for 240h
}
}
В приведенном выше коде повернутые файлы журналов ограничены 10 МБ и удаляются через 10 дней (240 часов) или когда их больше 5.
Caddy автоматически сгенерирует и установит SSL-сертификат без какого-либо вмешательства. Директива tls позволяет нам предоставить дополнительные параметры для настройки HTTPS, такие как адрес электронной почты, используемый для получения отчетов Let’s Encrypt.
Директива header включает Cache-control для всех статических файлов (изображений/javascript/CSS файлов). Вы можете добавить больше расширений файлов или скопировать код, чтобы установить разную продолжительность для различных форматов файлов. Вам нужно будет изменить значение static на что-то другое, потому что это именованная ссылка.
После завершения вы можете проверить свою конфигурацию с помощью следующей команды.
$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile
Мы должны использовать параметр --adapter caddyfile, потому что по умолчанию команда проверяет только конфигурации JSON.
Если вы получите следующее предупреждение, вы можете легко исправить это одной командой.
WARN input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}
Запустите следующую команду, чтобы исправить ошибку.
$ caddy fmt --overwrite /etc/caddy/Caddyfile
Вышеуказанная команда форматирует и перезаписывает Caddyfile.
Перезапустите Caddy, чтобы включить конфигурацию. Вам нужно будет перезапустить сервер каждый раз, когда вы вносите изменения в конфигурацию.
$ sudo systemctl restart caddy
Откройте в вашем браузере, и вы должны увидеть следующую страницу, что означает, что конфигурация работает.
Настройка нескольких сайтов в Caddy
Вы можете настроить несколько сайтов в одном файле caddy. Для этого создайте отдельные блоки для каждого сайта следующим образом.
example1.com {
root * /var/www/example1.com/html
...
}
example2.com {
root * /var/www/example2.com/html
...
}
Этот метод подходит для нескольких сайтов, но один может стать довольно большим и трудным для обслуживания, если вы размещаете несколько сайтов.
Создайте каталог /etc/caddy/caddyconf.
$ sudo mkdir /etc/caddy/caddyconf
Теперь вы можете импортировать файлы конфигурации из каталога в ваш /etc/caddy/Caddyfile в верхней части файла.
import caddyconf/*.conf
Последний шаг — создать отдельные файлы конфигурации для каждого сайта.
Настройка PHP-сайтов
До сих пор мы говорили только о размещении статических сайтов с помощью Caddy. Вы можете так же легко использовать Caddy для обслуживания динамических PHP-сайтов. Чтобы включить поддержку PHP, добавьте следующий код в блок вашего сайта.
example1.com {
root * /var/www/example1.com/html
...
php_fastcgi unix//run/php-fpm/www.sock
}
Вам также нужно будет установить PHP.
$ sudo dnf install php-fpm php-cli php-gd
Вы можете установить любые дополнительные модули PHP, которые вам нужны. Вам также нужно будет настроить файл /etc/php-fpm.d/www.conf. Откройте файл для редактирования.
$ sudo nano /etc/php-fpm.d/www.conf
Нам нужно установить Unix-пользователя/группу процессов PHP на caddy. Найдите строки user=apache и group=apache в файле и измените их на nginx.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...
Найдите строку listen.acl_users = apache,nginx и измените ее значение на следующее.
...
listen.acl_users = apache,nginx,caddy
...
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Запустите процесс PHP-fpm.
$ sudo systemctl start php-fpm
Чтобы протестировать вашу настройку PHP, создайте файл test.php в папке html.
$ sudo nano /var/www/example.com/html/test.php
Добавьте в него следующий контент и сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Запустите http://example.com/test.php в вашем веб-браузере, и вы должны увидеть следующее.

Настройка обратного прокси
Caddy также может использоваться как сервер обратного прокси. Чтобы настроить его, используйте следующий код.
example1.com {
...
reverse_proxy localhost:8000 {
header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
}
}
Шаг 4 - Глобальные параметры Caddy
Caddyfile позволяет вам устанавливать некоторые параметры, которые будут применяться глобально, т.е. они будут применяться ко всем вашим сайтам. Полезно определять глобальные параметры, чтобы вам не приходилось повторно объявлять их в каждом серверном блоке.
Вы должны включить глобальные параметры в самом верху вашего Caddyfile. Существует множество параметров, которые вы можете установить глобально. Мы рассмотрим только некоторые важные. Для остальных вам следует обратиться к документации Caddy.
Вот некоторые параметры по умолчанию, которые вы можете использовать в вашем Caddyfile.
{
#TLS Options
email [email protected]
servers :443 {
protocol {
experimental_http3
}
max_header_size 5mb
}
servers :80 {
protocol {
allow_h2c
}
max_header_size 5mb
}
}
В приведенном выше коде email указывает адрес электронной почты, используемый для регистрации SSL-сертификата в органе Let’s Encrypt. OCSP stapling улучшает производительность HTTPS-сайтов, предоставляя информацию о аннулировании сертификатов браузерам автоматически. Параметр max_header_size указывает размер заголовков HTTP-запросов клиента, которые будут анализироваться.
Мы также включили протокол HTTP/3 для HTTPS-сайтов и поддержку HTTP/2 для HTTP-сайтов. Это экспериментальные функции и, вероятно, будут удалены в конечном итоге, поэтому будьте осторожны перед их включением.
Шаг 5 - Повышение безопасности
Включение HTTP-аутентификации
Вы можете включить простую HTTP-аутентификацию для определенных каталогов. Сначала вам нужно создать учетные данные для аутентификации.
Caddy принимает только хэшированные пароли в конфигурации. Поэтому вам нужно сначала создать хэшированный пароль. Выполните следующую команду, чтобы сделать это.
$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
Как только у вас будет готов пароль, введите следующий код в ваш Caddyfile.
basicauth /secret/* {
John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}
Вышеуказанная команда защитит каталог /secret учетными данными, которые вы только что создали.
Укрепление безопасности сайта и включение HSTS
Существуют и другие параметры безопасности, которые вы можете добавить, чтобы защитить ваши сайты. Для этого мы создадим другой файл /etc/caddy/caddy_security.conf.
$ sudo nano /etc/caddy/caddy_security.conf
Добавьте в него следующий код.
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Xss-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Permissions-Policy "interest-cohort=()"
Content-Security-Policy "upgrade-insecure-requests"
Referrer-Policy "strict-origin-when-cross-origin"
Cache-Control "public, max-age=15, must-revalidate"
Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}
Вышеуказанный код включает/реализует следующее.
- Включает поддержку HSTS для сайта и всех его поддоменов.
- Включает фильтрацию XSS.
- Предотвращает анализ содержимого/MIME.
- Предотвращает загрузку вашего сайта внутри IFRAME.
- Предотвращает включение вашего сайта в испытания отслеживания FLOC.
- Добавляет политику безопасности содержимого о том, как пользовательские агенты обрабатывают небезопасные URL.
- Реализует политику реферера, чтобы только реферер отправлялся для кросс-доменных запросов, если протокол совпадает.
- Политика функций предоставляет механизм для включения и отключения определенных функций браузера.
Далее импортируйте файл в любой из блоков сайта, который вы хотите.
example.com {
...
import /etc/caddy/caddy_security.conf
}
Перезапустите сервер, чтобы применить изменения.
Заключение
Это завершает учебник по установке и настройке веб-сервера Caddy на серверах на базе Fedora 34 / CentOS 8. Если у вас есть какие-либо вопросы, оставляйте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.