PHP-FPM Configuration

Updated 19 Oct 2026 Published

PHP-FPM Configuration

VinzaPanel runs PHP through PHP-FPM, and every hosting account gets its own pool per PHP version. PHP code therefore runs as the site owner's Linux user, not as a shared www-data user — a compromised site cannot read other accounts' files. This works the same on Nginx, Apache2 and OpenLiteSpeed.

How the per-user pools work

ItemValue
Pool file/etc/php/<version>/fpm/pool.d/vinza-<user>.conf
Socket/run/php/php<version>-<user>.sock
Runs asThe site owner (user and group)
Process managerpm = ondemand — idle pools use almost no memory
Workerspm.max_children = the PHP Workers value of the owner's hosting plan (10 for accounts without a plan)
File accessopen_basedir limited to the owner's home, /tmp/, the PHP session store and /usr/share/php/
Disabled functionsexec, passthru, shell_exec, system, proc_open, popen

A pool is created automatically the first time an account gets a PHP site on that version. Changing a plan's PHP Workers updates the pools of every account on that plan.

Warning

The vinza-<user>.conf pools are regenerated by the panel — don't edit them by hand, your changes will be overwritten. To give an account more PHP workers, change its hosting plan.

Changing a website's PHP version

  1. Open Websites and click the domain.
  2. On the Overview or Advanced tab, click the PHP version (Change version).
  3. Pick the new version and click Apply. The web server configuration is updated and reloaded automatically.

Change PHP Version dialog for a website with the PHP version selector

Per-site PHP settings

On Apache2 and OpenLiteSpeed, values such as upload_max_filesize, post_max_size, memory_limit and max_execution_time can be set per website from Files & Logs → Web Rules on the website page. The panel writes them to the site's .user.ini, which PHP-FPM reads — no need to touch the server-wide php.ini.

On Nginx, Web Rules sets the maximum request body size (client_max_body_size); other PHP values come from the version's php.ini (see PHP Settings below), or you can place a .user.ini in the document root yourself.

Managing PHP versions (administrators)

Open Server → PHP-FPM (/apps/php-fpm/). PHP-FPM is a built-in app. Each installed version has its own status and start/stop/restart/reload buttons.

PHP-FPM page Overview tab listing the installed PHP versions with their status and actions

  • Install PHP Version — choose a version from the list of installable ones and click Start Installation. It installs PHP-FPM and common extensions (takes 1–5 minutes). On Ubuntu the ppa:ondrej/php repository is added, on Debian the Sury repository, when the version is not in the base repositories.
  • Uninstall PHP Version — removes all PHP packages of that version, including its pools and configuration files. Move websites to another version first.
  • Default — set which version is the system default.
  • Pools — view and edit pool files, or create a New Pool with its own user and socket. Changes reload PHP-FPM automatically.
  • PHP Settings — edit the commonly tuned php.ini values of a version and click Save & Reload.
  • Modules — see enabled and available extensions and toggle them per version.

Custom PHP backend

An application that needs a PHP version your OS does not ship can use Custom PHP Backend in the website's Edit form. It sends that site's PHP to a local FastCGI server (for example a php:8.3-fpm container) instead of the account's pool. Leave it empty to use the normal PHP version.

Troubleshooting

# Test the configuration of one PHP version
sudo php-fpm8.3 -t

# Status of a PHP-FPM version
sudo systemctl status php8.3-fpm

# Check that a user's pool socket exists
ls -l /run/php/php8.3-USER.sock

A 502 Bad Gateway on a PHP site usually means the owner's pool is missing or PHP-FPM for that version is stopped. Start the version on the PHP-FPM page, or save the website's Edit form, which recreates the pool. Sites of a suspended account have no pool on purpose; unsuspending the account brings it back.

On this page