Free tools Windows power users keep installed
One-click scans. No signup required.
Run one PHP-FPM service for each PHP version, give every service its own pool and Unix socket (or TCP port), then route each Apache virtual host to the endpoint it needs. Apache makes the per-site decision; PHP-FPM only executes the FastCGI request it receives.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
This arrangement lets one Apache instance serve, for example, one application on PHP 8.2 and another on PHP 8.3 without changing the system-wide command-line PHP version. The exact package names and supported branches depend on your operating-system release, so treat version numbers below as examples and verify that your distribution supplies them.
As an Amazon Associate I earn from qualifying purchases.
What the architecture looks like
There are three separate pieces:
- Apache HTTP Server accepts the browser request, selects a virtual host, and forwards PHP requests.
- One PHP-FPM service per PHP version runs the corresponding PHP binaries and loads that version’s
php.iniand extensions. - A distinct FastCGI endpoint per service identifies where Apache should send the request. The endpoint is normally a Unix-domain socket under
/run/php, but it can be a localhost TCP port.
PHP-FPM is a process manager and FastCGI backend. It does not know which Apache virtual host, alias, or document root originated a request. Apache must therefore provide the script path and select the correct endpoint inside each site’s <VirtualHost> block.
For instance, example-a.test can send index.php to /run/php/php8.2-fpm.sock, while example-b.test sends its scripts to /run/php/php8.3-fpm.sock. Both sites remain on the same Apache process and listen address.
#1 Best Overall
- BLUE LIGHT BLOCKING GLASSES: Our blue light glasses for women boast UV400 protection, blocking harmful blue rays from computer screens. With these bluelight glasses women, you can enjoy gaming, reading, or watching TV with no worries of eye strain.
- EYE RELIEF: Our blue light glasses are engineered to reduce blurry vision or strain caused by prolonged screen time. These womens blue light glasses aid in better sleep by preventing blue light from disrupting your natural sleep cycle, helping you fall asleep faster and enjoy a more restful night's sleep, making them the perfect christmas present.
- COMFORTABLE: Crafted from durable material, our trendy blue light glasses for woman or blue light glasses men ensure long-lasting comfort. The high-transmittance lenses accessories, gamer gifts for men, help keep your eyes relaxed. Perfect stocking stuffers, gifts for gamers men, christmas gifts for men, halloween costumes.
- LIGHTWEIGHT: These clear blue light glasses feature a lightweight frame, meaning they’ll stay comfy for long-term wear. Perfect as blue blockers glasses for women or mens blue light glasses, these non-prescription fake glasses for men can be worn throughout the day. The blue light blocking glasses women feature polycarbonate HD lenses, which are anti-reflective and restore true color.
- WORRY-FREE PURCHASE: If you experience any issues, our support team is ready to assist you quickly. These are the perfect costume glasses for cosplay dressing up.
Plan versions, pools, and endpoints before installing
Choose versions that your operating system actually packages
PHP branches and package names change between Ubuntu, Debian, and their releases. The practical tutorials commonly used for this pattern target Ubuntu 20.04 and Debian 10, but those releases do not define what a newer operating system provides. Check your distribution’s package index and security-support policy first. Do not assume that an unmaintained branch is available, patched, or suitable for a public site.
Keep the version in every service, socket, pool filename, and monitoring rule. A naming scheme such as php8.2-fpm, php8.3-fpm, /run/php/php8.2-fpm.sock, and /run/php/php8.3-fpm.sock makes accidental cross-routing easier to spot.
Recommended Free Tools
Decide whether each version needs one pool or several
A separate service is the boundary that selects the PHP version. Within that service you may use one shared pool or multiple pools. Use separate pools when applications need different Unix users, filesystem permissions, environment settings, or worker limits. A pool can run under a site-specific user and group, while the socket is owned by that account and Apache’s runtime group.
Multiple pools increase the number of processes and settings you must monitor. Start with one pool per version unless you need a stronger per-site security boundary, then split pools deliberately.
Unix socket or TCP listener?
| Choice | How Apache addresses it | Best fit | Operational requirements |
|---|---|---|---|
| Unix-domain socket | proxy:unix:/run/php/phpX.Y-fpm.sock|fcgi://localhost/ |
Services on the same host | Socket path must exist after startup; Apache must have permission to connect. |
| TCP listener | A local address such as 127.0.0.1:90XY in a FastCGI proxy rule |
Containers, network namespaces, or an intentional service boundary | The port must be unique, reachable, and protected from unintended remote access. |
Unix sockets avoid a network listener and are the natural same-host default. TCP is useful when the FPM service is isolated from Apache, but keep it bound locally unless remote FastCGI is an explicit design. In either case, verify reachability as the Apache service user, not only as root.
Install and start each PHP-FPM service
Install the PHP runtime and matching FPM package for every branch you intend to serve. On Debian-family systems, package names often follow the pattern shown below; the exact names and available versions vary by release.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →sudo apt update
sudo apt install php8.2-fpm php8.2-cli php8.2-common
sudo apt install php8.3-fpm php8.3-cli php8.3-common
Install the extensions required by each application for that version as well. An extension enabled for PHP 8.2 is not automatically enabled for PHP 8.3: each FPM service reads its own configuration tree.
Start and enable the services independently:
sudo systemctl enable --now php8.2-fpm
sudo systemctl enable --now php8.3-fpm
sudo systemctl status php8.2-fpm
sudo systemctl status php8.3-fpm
Use the service names supplied by your distribution if they differ. A successful systemctl result only proves that the manager started; it does not prove that the intended pool is listening on the intended endpoint.
Rank #2
- WINDEX GAMING WIPES: effortlessly clean all your gaming gear and gaming electronics in one easy step with our new Windex Gaming Wipes
- AMMONIA FREE: our ammonia-free formula is safe to use on all of your favorite gaming equipment like consoles, headsets, controllers, screens, keyboards, and more
- PRE-MOISTENED WIPES: each wipe instantly removes dust, dirt, and stubborn smudges and fingerprints leaving a streak-free shine
- ANTI-STATIC: great for cleaning and wiping down your gaming gear and electronics leaving behind no visible residue
- COMPACT RESEALABLE PACKAGE: store your pack of Windex Gaming Wipes anywhere in your home for whenever a quick and easy wipedown is needed
Give every pool a unique listener
Open the pool configuration for each service. Distribution layouts differ, but a pool commonly contains a listen directive. Set one unique socket or port per version:
listen = /run/php/php8.2-fpm.sock
listen = /run/php/php8.3-fpm.sock
If you use TCP instead, assign different local ports, such as 127.0.0.1:9082 and 127.0.0.1:9083. Never point two versions at the same socket or port; the second service will fail to bind or Apache will reach whichever process won the race.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
After changing a pool, restart only the affected service and check its logs:
sudo systemctl restart php8.2-fpm
sudo systemctl restart php8.3-fpm
sudo ss -lx | grep /run/php
sudo ss -ltnp | grep 908
The socket listing should show the versioned paths, or the TCP listing should show the expected local ports. If a socket is missing, inspect the service status and FPM error log before changing Apache.
Set socket ownership and pool limits
Apache needs permission to open a Unix socket. Pool configuration normally exposes directives for socket owner, group, and mode. Set them so the Apache runtime user (or its group) can connect, while unrelated users cannot submit FastCGI requests. Confirm the actual runtime user for your distribution instead of assuming it is named www-data.
Pool capacity also belongs here. FPM’s prefork workers process one connection at a time. Set pm.max_children, spare-worker settings, and request limits for the application’s memory and traffic profile, then revisit them after observing logs and resource use. A larger number is not automatically faster: every active child consumes memory.
Enable Apache’s FastCGI proxy modules
Apache needs the proxy core, the FastCGI adapter, and the environment support used by common PHP-FPM configurations. On Debian-family systems, the usual module command is:
sudo a2enmod proxy proxy_fcgi setenvif
sudo apachectl configtest
Other distributions enable modules through package configuration or load files directly. Confirm that mod_proxy_fcgi is loaded before troubleshooting a handler. The Apache integration point is mod_proxy_fcgi; loading a different PHP module globally is not a substitute for per-site FPM routing.
Rank #3
- Ergonomic & Adjustable Design: Fight "text neck" and improve your posture. Designed for comfort, it offers an adjustable height (7.1in-8.5in) (1.4in adjustable range) and angle (5°-85°) Please note: cell phone stand is only 9 inches tall—the length of a standard pencil
- Without blocking subtitles Perfect for office desk Tiktok Face Time Zoom video—this is the ultimate kitchen desk essential for phones! Perfect viewing experience while reducing neck back strain, A must-have for gamers streamers desk, and anyone who values both style and support!
- Sleek & Stable Design fits Otterbox Case: Say goodbye to bent cables, tangles, and tip-overs! LISEN’s stylish adjustable desk phone holder features a built-in charging hole and smart cable management, keeping your phone secure and your workspace clutter-free cool gadgets for men
- ANTI-SLIP DESIGN free hands: The under 10.00 items easy gadgets back and the bottom of this kitchen essentials for women are fully covered by anti-skid silicone, which LISEN stand up desk decor can provide maximum protection device from any scratches and slides
- Your Perfect Viewing Companion:If your product arrives damaged or breaks within 365 days, reach out to LISEN for a quick and hassle-free solution. Struggling with assembly, like tightening the screw? We’ve got your back! Your experience matters to us. (Product including: phone Holder stand*1, screw*1, hexagon screwdriver*1, specification*1)
Remove or neutralize a global PHP handler
A distribution-wide FPM configuration or an old mod_php rule can capture requests before your virtual-host rule does. Search the enabled Apache configuration for global SetHandler, ProxyPassMatch, or PHP module directives. Disable the rule that forces every site to one backend, then keep the deliberate handler inside each site’s virtual host.
Do not leave a second PHP handler active “just in case.” Two competing handlers make the effective route dependent on configuration order and can produce a site that appears to ignore its own block.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchMap each virtual host to its PHP version
Unix-socket configuration with SetHandler
Place the handler in the virtual host that owns the application. The following example sends one site’s PHP files to PHP 8.2:
<VirtualHost *:80>
ServerName example-a.test
DocumentRoot /var/www/example-a/public
<Directory /var/www/example-a/public>
Require all granted
DirectoryIndex index.php index.html
</Directory>
<FilesMatch ".php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/example-a-error.log
CustomLog ${APACHE_LOG_DIR}/example-a-access.log combined
</VirtualHost>
A second virtual host can select PHP 8.3 simply by changing the endpoint:
<VirtualHost *:80>
ServerName example-b.test
DocumentRoot /var/www/example-b/public
<Directory /var/www/example-b/public>
Require all granted
DirectoryIndex index.php index.html
</Directory>
<FilesMatch ".php$">
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/example-b-error.log
CustomLog ${APACHE_LOG_DIR}/example-b-access.log combined
</VirtualHost>
The fcgi://localhost/ suffix is part of Apache’s Unix-socket proxy syntax. The socket path before the pipe selects the FPM service; the FastCGI URI supplies the backend context.
Using ProxyPassMatch instead
Apache also supports a regular-expression proxy rule. A Unix-socket form is:
ProxyPassMatch "^/(.*.php(/.*)?)$" "unix:/run/php/php8.2-fpm.sock|fcgi://localhost/var/www/example-a/public/$1"
Use the exact path semantics documented for your Apache version and configuration layout. The rule must produce the correct script filename, including the virtual host’s document root. If the path is wrong, FPM may report a missing script or Apache may expose the PHP source instead of executing it. Do not combine a broad ProxyPassMatch with a conflicting SetHandler unless you have a specific reason and have tested the resulting precedence.
TCP example
For a pool listening on a local TCP port, the handler can target that port instead of a socket:
Rank #4
- Easy Installation: Our gaming lights have been designed to enhance your entertainment experience. Simply position the led light bar next to your TV or game console to create a game room environment with ease. They come with USB power and a 60 inch cord for direct mounting and mobility
- Audio Syncing & Extensive Mode: The built-in high-sensitivity music sensor allows you to sync the TV led lights to your favorite music. Lights react and move to the beat of music, film and game audio, creating an incredible immersive sound and light experience – and all without the need for an additional hub. You can choose from 64+ patterns, including strobe, illusion, jump, energy, gradient, running, chasing, fluttering mode etc. Each mode can be applied to different scenes
- 64+ Chasing IC+RGB & W Effect: The independent control design of IC+RGB and white all-in-one multifunctional rgbw led bar lights monitor backlight allows you to easily switch the led lights for desk between IC+RGB and white to enjoy a variety of lighting effects, you can choose white lighting mode with high brightness for better illumination when working, etc. Choose IC+RGB lighting mode when you need to create an entertaining atmosphere for the light show, 16 million colours of Color changing rgb light bar let you dance to the beat and create a dynamic party atmosphere
- Dynamic and Dimmable Lights: 1%-full brightness free brightness adjustment gives you the flexibility to adjust dimmable led light bar for room decorations or a variety of occasions
- USB Powered: USB light bars for room can be powered by powernank, usb charger, TV, Monitor, laptop PC mainframe, making behind TV led lighting bar easy to install in any location.TV led lights are powered by the TV usb interface / PC mainframe, can be turned on/off synchronously with TV / PC
<FilesMatch ".php$">
SetHandler "proxy:fcgi://127.0.0.1:9082"
</FilesMatch>
Use the matching port for the selected version in each virtual host. Keep the listener on loopback unless a remote FastCGI connection is intentionally secured and monitored.
Enable the sites, reload Apache, and verify the result
- Create one site configuration per application and place the correct handler inside each
<VirtualHost>. - Enable the site using your distribution’s normal mechanism, such as
a2ensite example-a.confanda2ensite example-b.confon Debian-family systems. - Run a syntax check before touching the running server:
sudo apachectl configtest. Continue only when it reports a successful result. - Reload Apache so existing connections are handled gracefully:
sudo systemctl reload apache2. Use the service name supplied by your distribution. - Temporarily create a diagnostic endpoint in each document root. A minimal file can contain
<?php phpinfo();. Restrict access to your administrator’s address or a private test hostname. - Request each hostname and inspect the page’s PHP version, “Server API” value, loaded configuration file, and extensions. The expected SAPI is FPM/FastCGI, and the version must match the socket named in that virtual host.
- Delete the diagnostic file immediately after verification. A public
phpinfo()page reveals paths, modules, and environment details useful to attackers.
Test with the real hostname, not only an IP address. Apache chooses a virtual host from the request’s host header, so an IP-only request can land on a default site and falsely suggest that routing is broken. A command-line check can make the host selection explicit:
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →curl -H 'Host: example-a.test' http://127.0.0.1/version.php
curl -H 'Host: example-b.test' http://127.0.0.1/version.php
Use a deliberately small version endpoint rather than exposing a full diagnostic page in routine monitoring.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Why one site can still end up on the wrong version
A global handler overrides the virtual host
If every site reports the same version, inspect enabled Apache files for a global FPM include, SetHandler, or legacy PHP module. Remove the all-sites rule and leave the version-specific mapping in each virtual host. Also check that the request is reaching the intended virtual host name rather than the default host.
The socket name is not the service you think it is
Package upgrades can change default pool filenames or recreate a socket after a service restart. Compare the literal path in Apache with the active listen directive and the socket shown by ss. A path that looks versioned is not proof of the binary version behind it; verify the FPM service and diagnostic endpoint together.
Apache cannot access the socket
A 503 response, “connection refused,” or a permission error usually means the service is stopped, the socket path is wrong, or its owner and mode exclude Apache. Check the FPM unit status, then inspect Apache’s error log and the FPM log at the same timestamp. Correct ownership or group membership rather than making the socket world-writable.
The script is downloaded or the path is wrong
If PHP source downloads, Apache is serving the file as static content and the FastCGI handler is not active for that request. Confirm that mod_proxy_fcgi is loaded and that the FilesMatch pattern matches the requested filename. If FPM says the script does not exist, inspect the document-root path supplied by the handler or ProxyPassMatch. Apache’s FastCGI path and SCRIPT_FILENAME behavior must identify the file on disk, including applications installed in subdirectories or using front controllers.
The version is correct but an extension is missing
Each FPM version has its own extension set and configuration files. Install the required extension for the FPM branch that serves the site, restart that branch, and check the diagnostic output again. Installing an extension only for the command-line PHP binary does not guarantee that FPM loads it.
Best Value
- Compatible with Wide Screens - To ensure compatibility with the dual monitor mount, your each monitor must meet three conditions at the same time: First, computer screens size range: 13 to 32 inches. Second, screen weight range: 4.4 to 19.8 lbs. Third, the back of the monitor screen must have VESA mounting holes with a pitch of 75x75mm or 100x100mm.
- Regarding the compatibility with desks - Your desk must meet three conditions at the same time: First, desk material: Only wooden desks are recommended, plastic or glass desks cannot be used. Second, desk thickness range: 0.59" - 3.54". Third, the bottom of the desk should not have any cross beams or panels, as this will interfere with installation. We recommend carefully checking that your desk and monitors meets all above conditions before purchasing.
- Dual C-Clamp Hold - Worried your dual monitors might wobble or slip? Our upgraded base uses a larger platform plus a dual C-clamp structure to lock the dual monitor arm firmly to your desk. Each arm safely keeps your screens steady while you type, click and game—no shaking, no sliding, just a clean and secure setup you can trust every day. It also provides Grommet Mounting installation choice, both options ensure stable and secure fixation for your 0.59" - 3.54" desk.
- Full-Motion Adjustment For Comfortable View - Pull the screen closer when you’re deep in a spreadsheet, push it back to watch videos, or rotate to portrait for coding — moving everything smoothly with just one hand. The monitor stand offers +85°/-50° tilt, ±90° swivel and 360° rotation. Raise your monitor up to 15.75″ to support a healthy sitting posture. Whether you’re working from home, gaming through the night, or switching between video calls and documents, getting the screens to your natural line of sight helps relieve neck, shoulder and back strain so you can stay focused longer with less fatigue.
- Keep Your Desk Organized: By lifting both screens off the desktop, this dual monitor stand opens up valuable space for your keyboard, notebook, docking station or a simple, clutter-free work area. Built-in cable management guides wires along the arms, keeping cords out of sight and out of the way. Enjoy a tidy, modern workstation that looks as good as it feels to use.
Size Apache and FPM together
Apache’s connection behavior can expose a capacity problem that is not visible on a quiet server. With a threaded Apache MPM and connection reuse, proxy connection pools can grow toward the number of Apache workers. PHP-FPM uses a prefork model in which each worker handles one connection at a time. If all FPM workers are occupied by persistent idle connections, new requests can wait and eventually time out.
Treat Apache worker limits, proxy connection reuse, and FPM worker counts as one capacity plan:
- Estimate concurrent PHP work and the memory available to each version.
- Set
pm.max_childrenso a busy pool cannot exhaust system memory. - Check Apache’s worker and connection limits so it cannot create a backlog far larger than FPM can process.
- Observe Apache and FPM error logs under representative load, looking for connection timeouts, “server reached” messages, and exhausted child pools.
- Give high-traffic versions their own pool limits instead of allowing one application to consume every child of a shared pool.
Persistent proxy connections are not automatically harmful, but they must be included in the worker calculation. A configuration that works with one PHP version can fail after adding a second if total Apache workers and all FPM pools compete for the same memory and CPU.
Security and isolation decisions
Different PHP versions are not, by themselves, a security boundary between applications. Use separate pools and Unix users when one site must not read another site’s files. Set each site’s document-root ownership, pool user, socket group, and writable directories deliberately. Avoid granting a pool access to the entire server simply to make a permission error disappear.
For TCP, bind listeners to loopback or the private interface required by the deployment, restrict access with the host firewall where appropriate, and do not expose an unauthenticated FastCGI port to the public internet. For Unix sockets, protect the containing directory and socket mode.
Keep the PHP branches and their extensions patched according to the operating system’s security process. A site pinned to an older branch for compatibility should be treated as a migration project, not as a reason to disable updates for every other site.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsOperational maintenance with several PHP branches
Update one branch without changing another
Package updates, pool restarts, and extension changes are per service. Restarting php8.2-fpm should not be necessary merely because an unrelated site uses PHP 8.3, although a shared host reboot affects all services. Record which virtual hosts depend on each branch before scheduling maintenance.
Monitor the endpoint, not only the web page
Check that every expected FPM service is enabled, running, and listening. A web check can pass through a fallback virtual host while the intended socket is down. Monitor service status, socket existence, Apache error rates, FPM child utilization, and request latency per site.
Document the mapping
Keep a short inventory containing each hostname, document root, PHP version, pool name, socket or port, pool user, required extensions, and maintenance owner. This prevents a future administrator from changing a socket in one file and leaving the corresponding virtual host pointed at the old endpoint.
Choosing an approach for your deployment
| Decision axis | Unix socket on one host | TCP or isolated service |
|---|---|---|
| Transport | Local filesystem socket selected in the Apache handler. | Local or isolated network listener selected by address and port. |
| Isolation | All services share the host kernel, filesystem, and resource pool. | Useful with containers or network namespaces; isolation depends on the platform configuration. |
| Package lifecycle | Usually follows the host distribution’s PHP packages and service units. | Can follow a separately managed image or service, but adds another lifecycle to patch. |
| Per-site boundary | Separate pools, users, socket ownership, and filesystem permissions provide the boundary. | Can add a process or namespace boundary, while still requiring correct pool and network permissions. |
| Operational cost | Fewer moving parts, but every service and pool must still be monitored. | More endpoints, networking, and deployment configuration to operate. |
For ordinary sites on one machine, versioned Unix sockets and explicit per-virtual-host handlers are the simplest design. Choose TCP or stronger isolation when your deployment already separates services or when a site requires an independent lifecycle.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Quick Recap
Final implementation checklist
- Every required PHP branch is supported by the target operating-system release.
- Each branch has its own FPM service and at least one pool.
- Every pool listens on a unique socket or TCP port.
- Apache has
proxyandproxy_fcgienabled, plus the environment support required by the configuration. - No global PHP handler overrides the virtual-host rules.
- Each
<VirtualHost>maps.phprequests to the intended endpoint and supplies the correct script path. - Apache passes
apachectl configtestbefore every reload. - Version and FPM SAPI have been verified per hostname, then diagnostic files removed.
- Socket permissions, pool users, extensions, worker limits, and logs are documented per site.
- Apache connection limits and every FPM pool’s
pm.max_childrenhave been considered together.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




