provides software and services that enable enterprises
Live Chat 1-888-673-6564

Open Source Software Technical Articles

  • Home
  • Search
  • Contact Us
  • Products and Support
  • Services
  • Enterprise OSS Blog
  • Wazi Technical Blog
  • About Wazi
  • Attributions and Licensing
  • Supply Chain Compliance
  • How to Contribute
  • Contributors
  • Resources Library
  • Cloud Services
  • Partners
  • Customers
  • Community
  • Company
  • Careers
  • News and Events

Subscribe to Wazi by Email

Your email:


Enterprise Developer Support 24 x 7, Get a Support Quote Now!


click-here-to-chat-with-an-online-representative

download-oss-discovery

Latest Posts

  • Use Perl to enhance ModSecurity
  • The secret to great reporting with Drupal 7
  • A more colorful LibreOffice unveiled
  • Toward a more colorful LibreOffice
  • Flexible administration with Puppet's Facter and templates
  • Knock for OpenSSH
  • Get more out of phpMyAdmin
  • Image annotation in GIMP, Dia, and OpenOffice Draw
  • Solr, Drupal 7, and faceted search
  • Using FreeNAS' new full disk encryption for ZFS

Connect with Us!

Current Articles | RSS Feed RSS Feed

mod_php vs. FastCGI vs. PHP-FPM for Web Server Scripting

Posted by Riccardo Capecchi on Mon, Aug 27, 2012
  
Email This Email Article  
Tweet  
  

Most administrators know that PHP, the widely used scripting language, can be embedded in HTML and works with all major web servers. What's less widely known, however is that you can run PHP in different ways on your server. The most common option is the mod_php module that's runs by default in the Apache HTTP Server. If your primarily goal is performance, however, you should consider other options. PHP-FPM (FastCGI Process Manager) and PHP FastCGI each have pros and cons, but either can speed up the performance of your PHP.

mod_php

Let's start by looking at running Apache with mod_php. This package is present in just about every Linux distribution's repository, so installing it is easy, and so is configuring and managing the software. In fact, its ease of use may be the main reason to deploy mod_php.

PHP accelerators

Using a different PHP package isn't the only way to improve PHP performance. PHP accelerators, also called opcodes cachers, increase the performance of PHP applications by caching the compiled form of PHP scripts. A PHP accelerator typically reduces server load and increases the speed of your PHP scripts as much as 10 times depending on how many different pages and PHP scripts are used and cached. While you can find several PHP accelerators, my suggestion is to use APC (Alternative PHP Cache), an opcode cache maintained by the developer of PHP, who plans to integrate it into PHP starting in version 5.4.

To see how APC helps speed PHP, let's look at how a PHP program is run.

  1. The first step is reading the PHP code from the filesystem and put it into memory.
  2. In the lexing step, PHP code is converted into tokens or lexicons.
  3. In the parsing step, tokens are processed to derive meaningful expressions.
  4. The derived expressions are compiled into opcodes.
  5. Opcodes are executed to get the final result.

The goal of APC is bypass steps 1 to 4 for each call after the first one, instead caching in a shared memory segment the opcodes generated and then copying them into the execution process. APC is easy to install and configure, so I suggest using it in every PHP installation.

 

With mod_php the PHP interpreter is "embedded" inside the Apache process; Apache doesn't call any external PHP process, which means that Apache and PHP can communicate better. However, every single Apache child must load mod_php, which results in a bigger process than necessary being used for serving static resources such as image files, CSS, and JavaScript.

Another problem with this method is that it works only on Apache. This is not always an issue, as Apache is the most complete web server you can find, but websites that run on small virtual private servers (VPS), or big sites that have to serve million of pages a day, might want a different web server that can scale up or down better than Apache, and would therefore need a different way to run PHP too.

Pros:

  • Easy to install and update.
  • Easy to configure with Apache.

Cons:

  • Works only with Apache.
  • Forces every Apache child to use more memory.
  • Needs a restart of Apache to read an updated php.ini file.

 

FastCGI

FastCGI is a generic protocol for interfacing interactive programs with a web server. It's a variation on the earlier Common Gateway Interface (CGI) that reduces the overhead associated with interfacing the web server and CGI programs, allowing a server to handle more page requests at once.

Apache can use FastCGI in the form of mod_fcgid, and other popular webservers, such as lighttpd, nginx, Cherokee, and even Microsoft IIS, can use FastCGI as well.

With FastCGI you can set up multiple versions of PHP. This is particular useful when you have old websites made for, say, PHP 5.1 that are not compatible with the latest version of PHP. With FastCGI you can serve old PHP to the old website while using the latest version for all the others, something that is not possible with mod_php.

FastCGI also utilizes suexec to support different users with their own instances of PHP. This feature is particularly important for improving security in a shared environment, where you could have different users each managing their own websites. FastCGI reduces the memory footprint of your web server, but still gives you the speed and power of the entire PHP language.

Pros:

  • Compatible with many web servers.
  • Smaller memory footprint than mod_php.
  • More configuration options, including multiple PHP and suexec.

Cons:

  • Requires more configuration than mod_php.
  • Not widely known in the IT community.

PHP-FPM

PHP-FPM, the newest way to use PHP with a webserver, is an alternative PHP FastCGI implementation with some additional features that can be useful for websites that run on both small VPSes and multiple servers. It can be used with any web server that is compatible with FastCGI.

PHP-FPM gives administrators the ability to gracefully stop and start PHP worker processes without losing any queries. This allows you to gradually update the configuration and binary without losing any queries. You can start workers with different uid, gid, and chroot environments and different php.ini options. You can also run an emergency restart on all the processes in the event of any accidental destruction of the shared memory opcodes cache, if you're using an accelerator.

Pros:

  • Compatible with many web servers.
  • Smaller memory footprint than mod_php.
  • More configuration options than FastCGI.

Cons:

  • Requires more configuration than mod_php.
  • Not widely known in the IT community.
  • Project is still relatively young.

Conclusions

I can think of no general rule or guideline to tell you what's the right method for you or your company to use to speed up PHP. Personally, I use mod_php on most servers for its stability and the fact it is so well-known. I use PHP-FPM on small VPSes where saving memory while keeping fast performance is a must. The important thing to keep in mind is the variety of different solutions available; knowing about all of them is fundamental when planning your project.

 

e21cef24-2786-4d03-b349-a36ab27f5913
Follow @openlogic
Follow @OSCloudServices

This work is licensed under a Creative Commons Attribution 3.0 Unported License
Creative Commons License.
Tags: Comparison, Apache, PHP, Technical

Comments

Do you know of any benchmarks that support these claims. Running a test with apache bench on a machine with both mod_php and php-fpm installed, mod_php was 20% faster.
Posted @ Thursday, November 01, 2012 4:20 PM by Derak
I agree that mod_php is faster than php-fpm but I use php-fpm because I need security in shared hosting environment.
Posted @ Sunday, March 31, 2013 3:53 AM by Crane
Post Comment
Name
 *
Email
 *
Website (optional)
Comment
 *

Allowed tags: <a> link, <b> bold, <i> italics

Loading...
Error sending email
Email sent successfully

Email article
Email To : 
Your name : 
Message : (maximum 200 characters)
Home | Search | Contact Us | Products and Support | Services | Enterprise OSS Blog | Wazi Technical Blog | Resources Library | Cloud Services | Partners | Customers | Community | Company | Careers | News and Events
Products
OpenLogic Exchange (OLEX)
License Compliance Module
OSS Discovery
OSS Deep Discovery
OpenUpdate
Services
Open Source Support
CentOS Support
Scanning & Compliance
Open Source Training
Professional Services
Solutions
Support & Indemnification
Open Source Governance
Open Source Scanning
Open Source Provisioning
Consulting & Training
Contact Us
1-888-673-6564


© 2013 OpenLogic, Inc. All rights reserved.
Site Map  |  Privacy Policy