mysurik.ru

FastPanel изнутри: как на самом деле работает хостинг на nginx и Apache

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:

  1. systemctl status nginx — жив ли nginx
  2. systemctl status apache2 — жив ли Apache
  3. journalctl -u apache2 —no-pager -n 20 — что в логах
  4. Проверить конфиг сайта в папке Apache — не сломан ли
  5. ls -la /var/www/site/data/tmp/ — чисто ли во временной папке

В 90% случаев проблема либо в правах (забыли chown), либо Apache упал и не поднялся (часто из-за ошибки в .htaccess).

Итог

FastPanel — не идеал, но он честный. Он не прячет от тебя сложность, а просто настраивает всё за тебя. Если знать, как он работает изнутри, любая проблема решается за 5 минут. Надеюсь, кому-то этот разбор сэкономит пару часов гугления.

Комментарии

  • Полезная инфа. Пробовал через Docker? Про «FastPanel изнутри: как на самом деле работает хостинг на nginx и Apache» как раз думал.

  • А я адские танцы с FastPanel пережил, когда nginx конфиги правил вручную. После обновления панели они слетели. Теперь через админку всё делаю.

  • FastPanel штука удобная, но когда начинаешь копаться глубже — вылезают костыли. У меня, например, после обновления PHP перестали работать cron задачи. Пришлось лезть в systemd и править пути.

  • FastPanel vs aaPanel — что лучше? Я на aaPanel сижу, но думаю мигрировать. FastPanel выглядит свежее.

  • Спасибо за статью! Давно хотел разобраться, как FastPanel работает изнутри. Теперь понял, почему upload_tmp_dir так важен. У меня тоже были проблемы с загрузкой картинок, пока не поменял владельца папки.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *