Author |
|
jimski
Joined: 18 Jan 2014 Posts: 196 Location: USSA
|
Posted: Thu 23 Oct '14 7:36 Post subject: Final Working Solution for FastCGI on Apache on Windows |
|
|
After I stopped working with Apache and moved on to Linux and Nginx, I have accidentally came across of a reliable working solution for deploying FastCGI, Apache, PHP, on Windows. This solution is using mod_cgi but the release notes say FastCGI . Whatever it is the result is very good and reliable and it outperforms anything that I have tried on windows including mod_fastcgi and mod_fcgid. This solution performs better than Nginx on windows (I'm referring to serving php files only).
https://bitnami.com/stack/wapp/installer
WAPP Stack 5.3.29-0
This particular installer performed best in my tests and produced 0 failed requests
Other versions of WAPP installer were 10 to 20% faster but produced failed requests.
Here are test results. (See previous results in this thread for comparison: http://www.apachelounge.com/viewtopic.php?t=5789).
Test using mod_cgi Apache 2.4.10 php 5.3.29 ts
File: phpifo.php
Processes auto spawned by Apache
Time taken for tests: 3.31 sec.
Completed requests: 10000
Failed requests: 0
Requests per second: 3021
This is good enough solution for high traffic production website particularly if used with two or more web servers and a load balancer.
Additional performance improvement can be achieved by tuning windows tcp/ip stack and WIN-MPM. |
|
Back to top |
|
wm003
Joined: 24 Mar 2006 Posts: 88
|
Posted: Thu 23 Oct '14 12:21 Post subject: |
|
|
mmh, i tried it but php is just running via mod_php there.
So no mod_cgi is used for running php thus this wamp does not seem any special new configuration to me. |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
|
Back to top |
|
jimski
Joined: 18 Jan 2014 Posts: 196 Location: USSA
|
Posted: Thu 23 Oct '14 15:26 Post subject: |
|
|
wm003 wrote: | mmh, i tried it but php is just running via mod_php there. |
I will post the full config when I find a moment but in short here is what I did.
In httpd.comf make sure that the line is uncommented:
LoadModule cgi_module modules/mod_cgi.so
In httpd.comf comment out or remove these lines:
# LoadModule php5_module "E:/Serve /php/php5apache2_2.dll"
AddType application/x-httpd-php .php
In httpd.comf add php handler
AddHandler cgi-script .cgi .php
Configure the directory from which you want to run cgi files and move phpnfo.php to this directory. |
|
Back to top |
|
C0nw0nk
Joined: 07 Oct 2013 Posts: 241 Location: United Kingdom, London
|
Posted: Thu 23 Oct '14 15:34 Post subject: |
|
|
I thought you was using Nginx and PHP on windows now ?
I had to drop apache and use Nginx + PHP for this same reason the fcgi wrapper could not keep up with requests and i was stuck with a concurrent connection limit, But i keep a eye on apache and i use these builds here for the htpassword generator. |
|
Back to top |
|
gijs
Joined: 27 Apr 2012 Posts: 189 Location: The Netherlands
|
Posted: Thu 23 Oct '14 15:59 Post subject: |
|
|
are you using mod_cgi in combination with mod_php?
Doesn't that mean that we have to use thread safe PHP? |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Thu 23 Oct '14 16:11 Post subject: |
|
|
I wonder why plain cgi beats f(ast)cgi(d) since with cgi the process dies after every request. Any clue?
@gijs: Nope, the module is out commented. |
|
Back to top |
|
jimski
Joined: 18 Jan 2014 Posts: 196 Location: USSA
|
Posted: Thu 23 Oct '14 17:53 Post subject: |
|
|
C0nw0nk wrote: | I thought you was using Nginx and PHP on windows now ? |
I'm using Nginx and php on Linux but I had to do a job for a client who wants windows that's why I used Apache.
Since you have mentioned Nginx on windows, there is a new branch of Win Nginx that supports running multiple
workers on windows http://nginx-win.ecsds.eu/ .
James Blond wrote: | I wonder why plain cgi beats f(ast)cgi(d) since with cgi the process dies after every request. Any clue? |
I'm looking at my server and found leftovers of a previous mod_fastcgi installation that haven't been properly uninstalled. This makes me think that maybe I spoke too soon (like the inventors of cold fusion http://en.wikipedia.org/wiki/Cold_fusion ) I see about 40 php-cgi processes running but now I'm not sure if they come from the new config or are a leftovers from the old config. I will dig in it when I have time and let you know but the application runs great whether by accident or by design.
Deploying anything on the fricking windows makes my dog get unnecessary beating ...... just kidding...... this is not my dog. |
|
Back to top |
|
C0nw0nk
Joined: 07 Oct 2013 Posts: 241 Location: United Kingdom, London
|
Posted: Thu 23 Oct '14 19:03 Post subject: |
|
|
Yeah jimski thats the nginx builds i use with the PHP setup supplied there too.
Everytime nginx starts logging php request time outs i just create / add more php workers and it solves the problem currently i have 100.
But if i was to dedicate a machine to it i could easly have 1000 or more.
It did solve all my problems with apache php and limits.
And yes i do use it in a extremely heavy traffic enviorment. Top 20,000 sites in the world (Porn)
I will also have a storage capacity soon of 1/4 of a petabyte in total from all the servers. So for a very large scale enviorment it is why i had to drop apache. |
|
Back to top |
|
jimski
Joined: 18 Jan 2014 Posts: 196 Location: USSA
|
Posted: Fri 24 Oct '14 11:00 Post subject: |
|
|
.
1/4 of a petabyte that's a lot of data. I assume video storage consumes most of it.
Did you ever switch to Postgres or are you still using MySQL ? |
|
Back to top |
|
C0nw0nk
Joined: 07 Oct 2013 Posts: 241 Location: United Kingdom, London
|
Posted: Mon 27 Oct '14 4:06 Post subject: |
|
|
I still use MySQL but i have a single machine dedicated to it. And i use InnoDB not MyISAM. Converting images into multi scale formats (Mobile devices and different screen sizes.) And Converting videos into 360p, 480p, 720p and 1080p.
And with multiple storage machines you have to assign each storage machine to its own subdomain and deal with allot of load balancers.
The guy who made that custom Nginx build on windows also has a similar enviorment but i map my hard drives together he just proxies to them.
http://forum.nginx.org/read.php?2,254012,254103#msg-254103
Quote: | As for storage, here we use a Debian VM as storage concentrator, nginx talks to Debian on IP level and Debian manages/caches all kinds of storage units as one pool.
(mapping a drive is slow, use direct ip access) |
I have thought about maybe setting up for 4k/2k, 4320p and 2160p videos too but right now it is not worth it perhaps when i reach a stage like youtube and i let people upload videos of a scale of 128GB
Currently i allow 2GB uploads but i could scale upto more since i have the ram and I/O for it.
I do how ever host some videos that are over 10 hours long. And the best HTML5 format to be using is Webm not MP4 since Webm is smaller and higher quality. But currently i have to use Mp4 and Webm since Windows XP and Vista users and Linux are not all compatible with the same formats. So you have to have both or else users cant watch videos.
http://en.wikipedia.org/wiki/HTML5_video#Browser_support
But like i said for a High Traffic enviorment you have to consider dropping apache unless you are going to try and load balance with it because there is no way with all its current limits and CPU, Ram and I/O consumption compared to Nginx that you will ever be able to reach a large high traffic scale.
(I learnt that fast hand.) But i stick around with apache here because the builds come with usefull tools.
Depending on what you are hosting will depend how resource extensive your enviorment will be.
Here is one of the largest hosting enviorments on the web but keep in mind they are Linux based. (I do it with windows.)
http://www.extremetech.com/computing/123929-just-how-big-are-porn-sites/2
I recon you could load balance to multiple machines for apache on windows but you will always hit a php or a concurrent connection limit on apache with windows unless you go to nginx.
So you would have to setup apache on multiple machines and then redirect traffic / proxy to them all it will be a bit of a complicated setup. But thats the only way i could think of you ever achieving such a high amount of traffic with Windows Apache builds.
Here is a example of my setup you can do the same with apache you would have to mount your storage / apache block on a mapped hard drive Z:/ drive for example. The load balencer will redirect you to one of your servers but all your servers will have / share the same data thats why you put all data on the mapped hard drive Z:/ (Storage server).
I hope it helps you figure out and solve your high traffic issues for me to figure this out was a night mare took a while but finally got there. |
|
Back to top |
|
C0nw0nk
Joined: 07 Oct 2013 Posts: 241 Location: United Kingdom, London
|
Posted: Tue 28 Oct '14 12:36 Post subject: |
|
|
Also on your test machine what settings are you benchmarking with ?
Code: | ab.exe -kc 1000 -n 10000 http://localhost/index.php |
I will setup my Nginx and 1000 php processes on one of my dev servers to see what one single machine can output at max before load balencing.
I will do 2 different tests one with MySQL and one without just with phpinfo.
I recon it will be allot. |
|
Back to top |
|