FastPanel изнутри: как на самом деле работает хостинг на nginx и Apache
Первое, что видит человек после установки FastPanel — красивая админка, кнопка «добавить сайт», и вроде всё работает. Но стоит копнуть глубже, и начинается самое интересное. Решил рассказать, как это хозяйство устроено изнутри.
Миф: FastPanel — это nginx
Формально да. На портах 80 и 443 висит nginx, он отдаёт статику и проксирует динамику. Но если вы думаете, что ваш PHP обрабатывается через nginx + php-fpm — вы ошибаетесь.
FastPanel использует связку: nginx → Apache → PHP (mod_php).
То есть: nginx принимает запрос, смотрит — если статика (картинка, CSS, JS), отдаёт сам. Если PHP — проксирует на Apache, который висит на локальном порту. Apache уже грузит mod_php и выполняет скрипт.
Звучит как костыль? Возможно. Но работает. И вот почему.
mpm_itk и AssignUserId
Apache стоит не с обычным worker или prefork, а с mpm_itk. Это такой модуль, который позволяет каждому виртуальному хосту Apache работать от своего системного пользователя.
То есть у меня на сервере: каждый сайт выполняется от своего отдельного пользователя. mpm_itk перед обработкой запроса делает setuid() и setgid() на нужного пользователя. Это значит, что даже если на соседнем сайте дыра, до моих файлов он не доберётся — прав не хватит.
Конфиг выглядит так:
<VirtualHost 127.0.0.1:81>
AssignUserId siteuser siteuser
DocumentRoot /var/www/site/data/www/example.com
</VirtualHost>
Всё гениально и просто.
Грабли с upload_tmp_dir
Самая популярная проблема, с которой приходят ко мне в комментарии: «Не загружается изображение в WordPress, пишет ошибку». И начинается танец с бубном — права, chmod, chown.
А дело вот в чём. PHP по умолчанию складывает временные файлы при загрузке в системный /tmp. Но /tmp на серверах часто доступен только для чтения всем. Или туда пишет www-data, а у нас пользователь сайта.
Решение прописано в конфиге Apache для сайта:
php_admin_value upload_tmp_dir /var/www/site/data/tmp
php_admin_value upload_max_filesize 100M
php_admin_value post_max_size 100M
Важный момент: upload_tmp_dir должен принадлежать тому же пользователю, от которого работает Apache. Если забыть — WordPress скажет «не удалось переместить загруженный файл», хотя проблема не в wp-content/uploads, а во временной папке.
Я на эту граблю наступал раза три, пока не запомнил.
nginx: статика и прокси
nginx в этой схеме выступает умным балансировщиком. Его конфиги лежат отдельно для каждого сайта. Он:
- Отдаёт статические файлы напрямую (images, css, js) — это быстро
- Проксирует PHP на локальный Apache
- Добавляет headers для кэширования статики
- Работает с SSL (Let’s Encrypt через панель)
Если в логах nginx ошибка 502 — значит Apache упал. Если 504 — PHP завис.
FastPanel свой PHP
Отдельная песня — /opt/fphp/bin/php. Это сборка PHP от разработчиков FastPanel, которая лежит отдельно от системного. Используется для внутренних скриптов панели.
Почему это всё не меняют?
Связка nginx → Apache выглядит архаично. Все современные панели типа CyberPanel, Hestia, aaPanel используют nginx + php-fpm напрямую. Но FastPanel — консерваторы.
У этого подхода есть плюс: mod_php работает предсказуемо. Он не падает с ошибками пула php-fpm, не теряет соединения с БД, не требует танцев с pm.max_children. Просто берёт и работает годами.
Минус — он жрёт память. Apache с mod_php под каждый запрос резервирует память процесса. На слабых серверах (1-2GB RAM) это чувствуется.
Что починить, если сайт лежит
Быстрая диагностика для FastPanel:
- systemctl status nginx — жив ли nginx
- systemctl status apache2 — жив ли Apache
- journalctl -u apache2 —no-pager -n 20 — что в логах
- Проверить конфиг сайта в папке Apache — не сломан ли
- ls -la /var/www/site/data/tmp/ — чисто ли во временной папке
В 90% случаев проблема либо в правах (забыли chown), либо Apache упал и не поднялся (часто из-за ошибки в .htaccess).
Итог
FastPanel — не идеал, но он честный. Он не прячет от тебя сложность, а просто настраивает всё за тебя. Если знать, как он работает изнутри, любая проблема решается за 5 минут. Надеюсь, кому-то этот разбор сэкономит пару часов гугления.
А как часто надо это делать? Раз в месяц?
В закладки навечно.
А если сервер на Debian, а не Ubuntu?
Полезная инфа. Пробовал через Docker? Про «FastPanel изнутри: как на самом деле работает хостинг на nginx и Apache» как раз думал.
Отличный гайд! Какой бюджет на сервер?
А я адские танцы с FastPanel пережил, когда nginx конфиги правил вручную. После обновления панели они слетели. Теперь через админку всё делаю.
FastPanel штука удобная, но когда начинаешь копаться глубже — вылезают костыли. У меня, например, после обновления PHP перестали работать cron задачи. Пришлось лезть в systemd и править пути.
жаль что раньше не видел эту статью. От души
FastPanel vs aaPanel — что лучше? Я на aaPanel сижу, но думаю мигрировать. FastPanel выглядит свежее.
целый вечер убил на то же самое. Золотые слова
Спасибо за статью! Давно хотел разобраться, как FastPanel работает изнутри. Теперь понял, почему upload_tmp_dir так важен. У меня тоже были проблемы с загрузкой картинок, пока не поменял владельца папки.