IISでのFastCGI設定

iis-fastcgiのアイキャッチ画像 Windows

IISの構築方法はこちらのページをご覧下さい。

同ページの「 Webサイト・CGIの構築 > 6. CGIの設定 」を以下のように書き換えて実行します。
(その他はすべて同じです)

Set-Variable CGI_NAME "<任意のCGI名(e.g. cgi-bin)>"  # ※①
Set-Variable CGI_ROOT "<任意のCGI名が指す絶対パス(e.g. C:\hoge\cgi-bin)>"  # この場所をCGIルートとする ※②
Set-Variable CGI_TYPE "<CGIファイルの拡張子(e.g. *.php)>"
Set-Variable CGI_FULL_PATH "<CGIモジュールのフルパス(e.g. C:\hoge\php\php-cgi.exe)>"
Set-Variable WEBSITE_DEFAULT_CGI "<Webサイト名>/$script:CGI_NAME"  # 当該Webサイト用のCGIを指す
Set-Variable WEBSITE_DEFAULT_CGI_PATH "IIS:\Sites\$script:Site\$script:CGI_NAME"

New-WebApplication -Name $script:CGI_NAME -Site $script:WEBSITE_DEFAULT -PhysicalPath $CGI_ROOT -ApplicationPool $script:APPPOOL_NAME
& $Env:WinDir\system32\inetsrv\appcmd.exe unlock config $script:WEBSITE_DEFAULT_CGI -section:handlers /commitpath:apphost  # ロック解除が必要
& $Env:WinDir\system32\inetsrv\appcmd.exe set config $script:WEBSITE_DEFAULT_CGI -section:system.webServer/security/authentication/anonymousAuthentication /enabled:"True" /userName: /commit:apphost
& $Env:WinDir\system32\inetsrv\appcmd.exe set config $script:WEBSITE_DEFAULT_CGI -section:system.webServer/handlers /accessPolicy:"Script,Execute"
& $Env:WinDir\system32\inetsrv\appcmd.exe set config $script:WEBSITE_DEFAULT_CGI -section:system.webServer/cgi /createProcessAsUser:"False" /commit:apphost
& $Env:WinDir\system32\inetsrv\appcmd.exe set config $script:WEBSITE_DEFAULT_CGI -section:system.webServer/cgi /timeout:"00:15:00" /commit:apphost

$fastCGIPath = Get-WebConfiguration "/system.Webserver/fastcgi/application" | Where-Object { $_.fullPath -eq $CGI_FULL_PATH }
if(!$fastCGIPath){
    Add-WebConfiguration "/system.Webserver/fastcgi" -Value @{fullpath=$CGI_FULL_PATH}
    Set-WebConfigurationProperty "/system.Webserver/fastcgi/application[@fullpath='$CGI_FULL_PATH']" -Name maxInstances -Value $script:WEBSITE_FASTCGI_MAX_INST

    # タイムアウト値は任意の値を設定(ここでは全て900で設定)
    Set-WebConfigurationProperty "/system.Webserver/fastcgi/application[@fullpath='$CGI_FULL_PATH']" -Name idleTimeout -Value 900
    Set-WebConfigurationProperty "/system.Webserver/fastcgi/application[@fullpath='$CGI_FULL_PATH']" -Name activityTimeout -Value 900
    Set-WebConfigurationProperty "/system.Webserver/fastcgi/application[@fullpath='$CGI_FULL_PATH']" -Name requestTimeout -Value 900
}

New-WebHandler -PSPath $script:WEBSITE_DEFAULT_CGI_PATH -Name $script:CGI_NAME -Path $script:CGI_TYPE -Verb 'HEAD,GET,POST,PUT,PATCH,DELETE' -Modules "FastCgiModule" -ScriptProcessor $script:CGI_FULL_PATH

IISマネージャー > 当該Webサイト > cgi-bin > ハンドラー マッピングで以下のようになっていればOKです。

FastCGI設定を行うと、以下のようにPHPプロセス(php-cgi.php)が起動したままになります。
クライアントからHTTPリクエストがあるたびにPHPプロセスが起動・終了するCGI設定に比べ、PHPプロセスの起動時間が短縮されます。

コメント

タイトルとURLをコピーしました