PHP-FPM (FastCGI Process Manager) + Wordpress

Isaias

New Member
Hi,
Someone is using php-fpm with Wordpress? What can you tell me about? This feature is already available in the VPS?

What did you think about?
 

Dion

Member
I have now used a variant of the cphstack script to enable php-fpm on my KH VPS, as well as on those of two clients (one on KH and one, um, not). Everything seems stable, and every site is freakishly fast.

If the results I've seen are any indication, getting php-fpm installed are well is well worth the (minor) hassle. Some quick comments...you need Apache 2.4 with MPM/Event, and preferably PHP 5.5 with OPcache. The fpm socket problems in PHP 5.4 were apparently solved in 5.5, and OPcache seems to be optimized for php-fpm as it works much better with php-fpm than it does with the FastCGI or DSO handlers.

The "ondemand" FPM pool option works incredibly well on sites that get fewer than a couple page hits/second. I'm still tweaking the "dynamic" option on a large site, but even without optimized settings, the site is noticeably faster than it was with DSO/APC, the memory usage is almost identical, and FINALLY, Apache is running PHP as the cPanel user and not as nobody!

Having said all this, I do not recommend using this script unless you take a good look at it first to determine if it will damage your server. The script blindly creates files and directories without first checking whether they exist. For example, I use a custom vhost.local EasyApache script on my VPS. Had I allowed the cphstack script to run, it would have wiped out my custom virtual host configuration.

The best course of action would be to download all the necessary files yourself, create/copy the files and directories manually, and then run the necessary programs. Or, hopefully, have the good techs at KnownHost customize the script for their internal use when a customer asks if php-fpm can be installed. ;)
 

WebEndev

Member
Or, hopefully, have the good techs at KnownHost customize the script for their internal use when a customer asks if php-fpm can be installed. ;)
THAT would be seriously awesome!
Is it a possibility?
 

Dion

Member
I've found a real problem using php-fpm with Apache -- environment variables aren't passed properly. This is causing some Apache modules to not work as they should. For example, mod_deflate will not compress .php files, and variables set with "SetEnvIf" are ignored.

Apparently this is a bug in the ProxyPassMatch directive in mod_proxy. One hopes it is fixed soon, because the performance of php-fpm is really amazing. In the meantime I am going to disable php-fpm because I really need to use SetEnvIf and would prefer to serve GZipped .php files.
 

Dion

Member
Well, I finally got PHP-FPM working with no bugs...and it's both stable and FAST. I used the following in pre_virtualhost_global.conf:

Code:
<Directory "/home/username/public_html">
	<FilesMatch \.php$>
		SetHandler proxy:unix:/var/run/php-fpm/username.sock|fcgi://localhost/
	</FilesMatch>

	<RequireAll>
		Require all granted
	</RequireAll>
</Directory>
Lo and behold, PHP-FPM worked perfectly. All the problems I described above were gone, and the speed...WOW.

You MUST use "Require all granted" -- the Apache 2.2 allow/deny rules will not work, even though mod_access_compat is installed. Substitute "username" for the cPanel user of your choice.

The SetHandler method to enable PHP-FPM requires Apache 2.4.9 (or later) and PHP 5.5.18 (or later). While MPM-Event is not required, it should be used for performance reasons. In addition, Zend OPCache works incredibly well with PHP-FPM and should be used in favor of APC, XCache, or EAccelerator. (If you desire an object cache, use APCu.)

I hope this is of help to folks here.
 

Dion

Member
Quick edit...leave off the forward slash after localhost, as follows:

Code:
SetHandler proxy:unix:/var/run/php-fpm/username.sock|fcgi://localhost
Otherwise Apache will set an incorrect value for SERVER['SCRIPT_FILENAME'].
 

KH-Jonathan

Director of Managed Services
Staff member
Well, I finally got PHP-FPM working with no bugs...and it's both stable and FAST. I used the following in pre_virtualhost_global.conf:

Code:
<Directory "/home/username/public_html">
    <FilesMatch \.php$>
        SetHandler proxy:unix:/var/run/php-fpm/username.sock|fcgi://localhost/
    </FilesMatch>

    <RequireAll>
        Require all granted
    </RequireAll>
</Directory>
Lo and behold, PHP-FPM worked perfectly. All the problems I described above were gone, and the speed...WOW.

You MUST use "Require all granted" -- the Apache 2.2 allow/deny rules will not work, even though mod_access_compat is installed. Substitute "username" for the cPanel user of your choice.

The SetHandler method to enable PHP-FPM requires Apache 2.4.9 (or later) and PHP 5.5.18 (or later). While MPM-Event is not required, it should be used for performance reasons. In addition, Zend OPCache works incredibly well with PHP-FPM and should be used in favor of APC, XCache, or EAccelerator. (If you desire an object cache, use APCu.)

I hope this is of help to folks here.
Great work Dion!!

I'm a huge fan of PHP-FPM and APC and a lot of our internal stuff uses it but for an upgrade being worked on for one of our systems I've been toying with PHP 5.6 and Zend Opcache and I must say, the numbers are impressive. I see about a 20-30% decrease in page generation time with 5.6+Opcache over 5.4+APC.

Wish I could find some sort of status page for Opcache like APC has. I've always found that to be a nifty feature of APC.
 

Dion

Member
After using for a while now, I am convinced that OPCache was designed for use with PHP-FPM. It's amazing how much better it now seems to work.

One thing I forgot to mention above. If the PHP configuration is changed, you must restart PHP-FPM in addition to Apache, or the changes will only be reflected in the CLI version of PHP.

If the contents of the proxypassphp.include file in cphstack were replaced with the following:
Code:
	<Directory "[% vhost.documentroot %]">
		<FilesMatch \.php$>
			SetHandler proxy:unix:/var/run/php-fpm/[% vhost.user %].sock|fcgi://localhost
		</FilesMatch>

		<RequireAll>
			Require all granted
		</RequireAll>
	</Directory>
it should be pretty easy to convert the script (and accessory files) to be used on a KH VPS.

I just installed this on a client's KH VPS-2, and the site went from sluggish to fairly responsive. I thought the client needed a larger VPS. I was wrong. ;)
 

Pie

New Member
Seems like you guys know what you're talking about! Very honored to be in your company. :)

I'm about to move a WordPress blog (simple text and images, no memberships) to KH. It gets about 10-20k pageviews/day, but the challenge is coping with the simultaneous traffic it gets when I plug links on social media. Usually, that'll bring in a few hundreds of simultaneous visitors (which breaks the site on Siteground, who tried to upsell me a dedicated server as a solution), but I would like the site to be able to handle even 1000-2000 simultaneous visitors, just in case something goes viral. I don't mind the site being a bit slower, you know, just as long as it doesn't go blank on the new traffic.

I'm on KH's SSD-2 plan (I know I might have to upgrade with that kind of traffic, but just testing the waters) and I've had them install Varnish, nginx and mod_pagespeed. Is that a good combo, or should I go the PHP-FPM and APC route as suggested above?

I'm not technical at all, so any tips, configurations, etc. are very much appreciated!
 

KH-DavidL

Abuse & Documentation Specialist
Staff member
Seems like you guys know what you're talking about! Very honored to be in your company. :)

[...]

I'm not technical at all, so any tips, configurations, etc. are very much appreciated!
We're honored to have you as part of the family!

Also websites are different and there are plenty of options out there. Currently, I'm running FastCGI with mod_pagespeed and I'm pleased with the results.
 

WebEndev

Member
I've had them install Varnish, nginx and mod_pagespeed.
Hi Pie,

How does that setup work for you? Any issues? Have you run your WordPress site on it yet?

I had KH install Nginx via the http://www.nginxcp.com/ plugin and it works great. Is this what you are using?

I was thinking of adding mod_pagespeed, but I did not know if it would work with the Nginx plugin?

How did the install Varnish for you?

Any input by KH staff is very welcome :p

Thanks.
 

Pie

New Member

WebEndev

Member
I'm planning to transfer on a slow traffic day next week, so I'm not hosting anything over here yet.

I did a few hours of research, and this article sums up my findings quite well (except I won't need Pound):

http://wptavern.com/speed-up-your-wordpress-site-with-pound-varnish-nginx-and-mod_pagespeed

Yes, that's indeed the Nginx plugin KH installed for me.

Varnish was installed according to http://www.syntaxheaven.com/installing-varnish-on-centos/

Hope this helps!
I'll be curious to see how your WordPress site runs, and if you have any issues with that set up. Thanks for the info!
 

Pie

New Member
Will do. I'm also going to do some load testing first with blitz.io, loadimpact.com and/or blazemeter.com.

Meanwhile, any WordPress cache wizards around? Please apply within :)
 

Franky

New Member
Is PHP-FPM applicable for high traffic sites with lots of images? Moving from VPS to dedicated server now. I'm not really a techie person but can you also install PHP-FPM on dedicated server besides VPS?
 

KH-Jonathan

Director of Managed Services
Staff member
PHP-FPM is best for high-traffic sites actually. It's not supported by cPanel but as you can see here people have managed to get it working.

The stuff internally of ours I referred to running it doesn't run on top of cPanel obviously. I've found Nginx+PHP-FPM+ZendOpcache to be a pretty mean combination, but again, this was all setup manually without cPanel.
 

Pie

New Member
PHP-FPM is best for high-traffic sites actually. It's not supported by cPanel but as you can see here people have managed to get it working.

I've found Nginx+PHP-FPM+ZendOpcache to be a pretty mean combination, but again, this was all setup manually without cPanel.
Want! Hey Jonathan, my support guy (#493187) is recommending to go back to DSO PHP but that doesn't feel right. Would you mind taking over and setting up that mean combination of yours, please?
 
Top