I'm having a PHP based web application running on Apache server which has considerable amount of php processing in back end. Since the overall performance is low I worked on improving the performance of the application. First I followed techniques such as client side caching, gzip enabling, js-css minifying which improved the performance upto a good extend.
In order to further improve the performance I wanted to try out server level improvement. So I tried to compare the application performance by hosting it on Apache and Nginx servers.
- Nginx version - 1.0.15;
- Apache version - 2.2.15;
- php version - 5.4.38;
In Apache I user Apache + mod-php and in Nginx I used Nginx + php-fpm for this comparison. As most of the tutorials explained I configured the number of Nginx workers equal to the number of cores in my processor. I used jmeter to do the stress testing and following are the graphs I could generate out of it.
In all these graphs x-axis is each request I sent and y-axis is milliseconds for getting response for each request.
Access the login page
Submit the login page
Access home page
I could only perform the testing upto 100 concurrent users logged in within 1 second because it started dropping requests after then in both server setups.
There was a little improvement on performance in Nginx than Apache but it was not a major difference where it's worth to change all my server architecture from Apache to Nginx. And when I observe the server resource utilization also I didn't find much of difference between Nginx and Apache
When I went through other comparisons people have done, I found that they claim Nginx is much more faster in concurrent accesses such as following graph shows.
http://www.eschrade.com/wp-content/uploads/2014/01/event-mpm-nginx.gif
But I was unable to observe any major difference of performance in Nginx over Apache even with 100 concurrent access within 1 second.
Following are my questions.
- Is Nginx + php-fpm is suppose to do server operations much faster than Apache + mod-php due to efficient usage of memory and other resources ?
- Is Nginx only recommended to server static contend and not for heavy server operation sites ?
- Is there any better way of configuring Nginx to gain more performance improvement ?