Internet Information Services

Windowsに標準搭載されているWebサーバ。Windows Serverと一部のWindows Clientで利用出来る。
IISではHTTP/HTTPS以外にもSMTP機能を同梱しているのと、.NETアプリと親和性の高い点が特長。
以前、Code Red・Nimdaなどのウイルスから狙われ、大規模障害を起こした事がある。

メモ

  • Windows Client版のIISは、Webサイト作成数・TCPコネクション数などに機能制限がかかっている。
  • PHP、ASP等を利用する場合は追加ソフトをインストールする必要がある。
  • IIS用プラグインインストーラとして、Microsoft Web Platform Installerが用意されている。

インストール

0. 前提条件

  • 構築環境
    [VM]:   Hyper-V ver6.3.9600
    [OS]:   WindowsServer2012R2 64bit
    [MEM]:  4GB
    [HDD]:  C:50GB / D:50GB
    [IIS]:  IIS 8.5.9600



1. インストール作業
IISは「役割と機能の追加ウィザード」から簡単にインストールする事が出来る。
今回はPHPも動かすので、CGI機能を有効化しておく。

[サーバーマネージャー] -> [役割と機能追加] -> [サーバーの役割]
---
■ Webサーバー (IIS)
├■ Webサーバー
│├■ HTTP 共通機能
││├■ HTTP エラー
││├■ ディレクトリの参照
││├■ 規定のドキュメント
││├■ HTTPエラー
││├■ 静的なコンテンツ
││├□ HTTP リダイレクト
││└□ WebDAV 発行
││
│├■ セキュリティ
││├■ 要求フィルター
││├□ IIS クライアント証明書マッピング認証
││├□ IP およびドメインの制御
││├□ SSL 証明書の集中サポート
││├□ URL 承認
││├□ Windows 認証
││├□ クライアント証明書マッピング認証
││├■ ダイジェスト認証
││└□ 基本認証
││
│├■ パフォーマンス
││├■ 静的なコンテンツの圧縮
││└□ 動的なコンテンツの圧縮
││
│├■ 状態と診断
││├■ HTTP ログ
││├□ ODBC ログ
││├□ カスタムログ
││├□ トレース
││├□ ログ ツール
││└□ 要求の監視
││
│└■ アプリケーション開発
│  ├□ .NET 拡張機能 3.5
│  ├□ .NET 拡張機能 4.5
│  ├□ Application Initialization
│  ├□ ASP
│  ├□ ASP.NET 3.5
│  ├□ ASP.NET 4.5
│  ├■ CGI
│  ├□ ISAPIフィルター
│  ├□ ISAPI拡張
│  ├□ WebSocketプロトコル
│  └□ サーバー側インクルード
│
├□ FTP サーバー
│├□ FTP サービス
│└□ FTP 拡張
│
└■ 管理ツール
  ├■ IIS 管理コンソール
  ├□ IIS 6 管理互換
  │├□ IIS 6 メタベース互換
  │├□ IIS 6 WMI互換
  │├□ IIS 6 スクリプトツール
  │└□ IIS 6 管理コンソール
  │
  ├□ IIS 管理スクリプトおよびツール
  └□ 管理サービス



2. PHP連携
事前にPHP.NETから、Windows用のPHPバイナリをダウンロードしておく。
PHPにはThread SafeとNon Thread Safeの二種類があるが、特別な事情が無い限りThread Safeを使う。
 
PHPのバイナリ保存先については、PHPのディレクトリ名にバージョン番号を付け、
シンボリックリンクでポインタを張ると、バージョンアップ・バージョンダウンのメンテナンスをやりやすくなる。

筆者がよくやるディレクトリ構成例
---
[リンク]     - C:\php
[実ファイル] - C:\php-7.0.10
[実ファイル] - C:\php-7.0.00
[実ファイル] - C:\php-5.6.25
---
cmd> dir
  <SYMLINKD>     php [php-7.0.10]
  <DIR>          php-7.0.10
  <DIR>          php-7.0.00
  <DIR>          php-5.6.25

 
上記の状態を作るには、下記コマンドを実行する。
Linuxのlnコマンドと書式が逆になる点に注意する。

コマンドオプション
---
cmd> mklink [[/D] | [/H] | [/J]] リンク ターゲット
---
cmd> mklink /D php php-7.0.10

 
IISからPHPを利用するには、ハンドラーマッピングにPHPを追加する必要がある。
この時、IISの「アプリケーション開発 - CGI」を利用する。

[IISマネージャー] -> [Webサイト] -> [ハンドラーマッピング]
---
┌────────┬─────────┐
│要求パス        │*.php             │
├────────┼─────────┤
│モジュール      │FastCgiModule     │
├────────┼─────────┤
│実行可能ファイル│C:\php\php-cgi.exe│
├────────┼─────────┤
│名前            │IIS-PHP-Module    │
└────────┴─────────┘


SQL Server接続

PHPからSQL Serverへ接続してDB操作を行うには、
MicrosoftのPHPドライバを追加インストールし、PHPエクステンションとしてロードする必要がある。
今回使うPHPドライバは下記Developer Networkから入手する。

 
PHPドライバはexe形式になっている為、exeを実行してドライバを展開(インストール)する。
ドライバはOSのビット数と、PHPの動作モード毎に数種類がインストールされる為、
自環境に合ったPHPドライバを "C:\php\ext" に移動させる。

  • "SQLSRV40.EXE"ドライバのファイル例
    OSのビット数Thread SafeNon Thread Safe
    32bitphp_sqlsrv_7_ts_x86.dllphp_sqlsrv_7_nts_x86.dll
    php_pdo_sqlsrv_7_ts_x86.dllphp_pdo_sqlsrv_7_nts_x86.dll
    64bitphp_sqlsrv_7_ts_x64.dllphp_sqlsrv_7_nts_x64.dll
    php_pdo_sqlsrv_7_ts_x64.dllphp_pdo_sqlsrv_7_nts_x64.dll

 
PHPドライバをインストールした後はphp.iniを編集し、PHPドライバをエクステンションとして読み込ませる。
PHPエクステンションを "C:\php\ext" にインストールしている場合、
下記設定をphp.iniの[PHP]ディレクティブに追記する。
ODBCのエクステンションは読み込まなくても大丈夫な筈だが、エラー抑制の為追加しておく。

[PHP]

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "ext"

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=php_pdo_odbc.dll

; Extension DLL for access to Microsoft SQL Server.
; See "Microsoft SQL Server PHP Deirver"
;     "https://msdn.microsoft.com/ja-jp/library/mt683517(v=sql.105).aspx"
extension=php_pdo_sqlsrv_7_ts_x64.dll
extension=php_sqlsrv_7_ts_x64.dll

 
PHPエクステンションの設定が完了したら、管理ツールからIISを再起動させ、
Webブラウザからphpinfoを開いてドライバ読込み状況を確認する。
今回追加したPHPドライバを正常に読み込んでいる場合、下記ステータスがphpinfoに表示される。
phpinfo_pdo.png


添付ファイル: filephpinfo_pdo.png 713件 [詳細]