Introduction
The FastCGI support in IIS enables popular application frameworks that support FastCGI protocol to be hosted on the IIS web server in a high-performance and reliable way. FastCGI provides a high-performance alternative to the Common Gateway Interface (CGI), a standard way of interfacing external applications with Web servers that has been supported as part of the IIS feature-set since the very first release.
Microsoft IIS 7.0 for Windows Server® 2008 and Windows Vista SP1 now includes a built-in FastCGI component. This walkthrough leads you through the steps to use FastCGI module to host PHP applications on IIS7 in Windows Server 2008 and Windows Vista SP1.
IMPORTANT: This article provides instructions on how to install and use FastCGI component on Windows Server 2008 and Windows Vista SP1. There is no officially supported FastCGI component for Windows Vista (not SP1). It is strongly recommended to upgrade to Windows Vista SP1 if you need to use FastCGI component on Windows Vista Operating System.
Enable FastCGI support in IIS7.0
To enable FastCGI support on IIS7.0 in Windows Server 2008:
Add CGI role service by going to Server Manager -> Roles -> Add Role Services. This enables both CGI and FastCGI services
To enable FastCGI support on IIS7.0 in Windows Vista SP1:
Add CGI feature by going to Control Panel -> Programs and Features -> Turn Windows features on or off. This enables both CGI and FastCGI services.

IMPORTANT: Install the update for FastCGI module
The update for IIS 7.0 FastCGI module fixes several known compatibility issues with popular PHP application. Install the update from one of the following locations:
Install and Configure PHP
It is recommended to use a non-thread safe build of PHP with IIS 7.0 FastCGI. Non-thread safe build of PHP provides significant performance gains over the standard build by not doing any thread-safety checks, which are not necessary, since FastCGI ensures a single threaded execution environment.
Note: There is no installer package for non-thread safe build of PHP.
1. Download the latest non-thread safe binaries of PHP from http://www.php.net/downloads.php.
2. Unpack the files to a directory of your choice (e.g. C:\PHP). Rename the php.ini-recommended to php.ini.
3. Open php.ini file, then uncomment and modify settings as follows:
a. Set fastcgi.impersonate = 1. FastCGI under IIS supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under.
b. Set cgi.fix_pathinfo=1. cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's previous behavior was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not care what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting this to 1 will cause PHP CGI to fix it's paths to conform to the spec
c. Set cgi.force_redirect = 0.
d. Set open_basedir to point to a folder or network path where the content of the web site(s) is located.
4. To test if the PHP installation is successful, run the following from the command line prompt:
C:\PHP>php –info
If PHP was installed correctly and all its dependencies are available on the machine, then this command will output the current PHP configuration information.
Configure IIS 7.0 to Handle PHP Requests
In order for IIS 7.0 to host PHP applications, it is necessary to add a handler mapping that tells IIS to pass all requests for PHP files to PHP application framework via FastCGI protocol.
To add a handler mapping at a server level
1. Open IIS Manager and then select and open “Handler Mappings” at the server level:
2. Select “Add Module Mapping” action and specify the configurations settings as below:

3. Click OK. The dialog box appears asking if you want to create a FastCGI application for this executable. Click Yes.

4. Test that the handler mapping works correctly by creating a phpinfo.php file in the C:\inetpub\wwwroot folder that contains the following:
<?php phpinfo(); ?>.
5. Open a browser and navigate to http://localhost/phpinfo.php. If everything was setup correctly, then you will see the standard PHP information page.
Alternatively, the above mentioned steps can be completed by using command line tool appcmd.
1. To create the FastCGI application process pool, run the following command:
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\{php_folder}\php-cgi.exe']
2. After that, create the handler mapping:
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='c:\{php_folder}\php-cgi.exe',resourceType='Either']
Note: If you are using a PHP version 4.X, instead of php-cgi.exe, you can use php.exe.
Configure PHP and FastCGI Recycling Behavior
Make sure that FastCGI always recycles php-cgi.exe processes before the native PHP recycling kicks in. The FastCGI process recycling behavior is controlled by the configuration property instanceMaxRequests. This property specifies how many requests FastCGI process will process before recycling. PHP also has a similar process recycling functionality that is controlled by an environment variable PHP_FCGI_MAX_REQUESTS. By setting instanceMaxRequests to be smaller or equal to PHP_FCGI_MAX_REQUESTS, you can ensure that native PHP process recycling logic will never kick in.
To set these configuration properties use the following commands:
C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000
C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /+[fullPath='c:\{php_folder}\php-cgi.exe'].environmentVariables.[name=’PHP_FCGI_MAX_REQUESTS’, value='10000']
Note: If those parameters have not been set, then the following default settings are used: instanceMaxRequests = 200, PHP_FCGI_MAX_REQUESTS = 500 (on most PHP builds).
More Information
Popular PHP applications on Windows Server
PHP development community behefits from large set of open source web applications. Now, with FastCGI support in IIS, all those popular web applications can be hosted on Windows Server. To learn more about how to setup and use most popular PHP web applications refer to this set of articles:
http://learn.iis.net/page.aspx/271/php-applications-on-iis/
PHP on IIS7.0 in Shared Hosting Environment
There are few important configuration steps that hosting providers need to be aware of if they plan to provide PHP support on Windows. Refer to hosting guidance for more details regarding PHP configuration for shared hosting environment.
http://learn.iis.net/page.aspx/208/fastcgi-with-php/
Securing the PHP Application with Login Controls, and Forms Authentication
One of the important new features in IIS 7.0 is the integrated pipeline, which allows securing all of the web content using ASP.NET's Forms Authentication. If you want to secure the PHP application using Forms Authentication, follow these steps:
http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/
Increasing PHP Performance with IIS Kernel Mode Caching
Bill Staples put together an important blog entry on PHP in IIS 7.0 that contains a section with details on using IIS Kernel Mode caching with PHP applications, specifically QDIG. For more information, see Bill's blog at the following URL:
http://blogs.iis.net/bills/archive/2006/10/31/PHP-on-IIS.aspx
Related Content
Comments