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.
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.
I did a bit more research on this and found that Nginx will perform well with static resources and not with other dynamic content delivery such as php processing which needs to done with the help of external application such as php-fpm. So if your web application has a performance bottleneck on php processing then replacing Apache with Nginx will not be a solution.
Following article explains a details research done on comparing static contend delivery and php script result delivery using Apache + mod_php and Nginx + php-fpm.
http://blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm/
Following are the conclusion points described in the above article.
Conclusion or “should you switch from Apache to Nginx?”
Longer answers are here: