• IIS 7.5 (Windows Server 2008 R2) 以降のアーキテクチャについて

    こんにちは。
    日本マイクロソフト、CSS デベロッパー ツールズ DSI の牧です。

    Windows 2000 時代の IIS 5.0 は inetinfo.exe というプロセスが一つでほぼすべてを取り仕切っていました。Windows Server 2003 の IIS 6.0 では HTTP 通信部分が http.sys、アプリケーションワーカープロセスは w3wp.exe と役割分担がされました。これによってパフォーマンスやセキュリティが向上しましたが、他方、問題が発生した際にいったいどの部分でエラーとなっているかが、分かりにくくなっている事は否めません。

    本トピックでは、IIS 7.5(Windows Server 2008 R2)以降、IIS を構成するコンポーネントを説明し、それらコンポーネントがどの様に処理を行うかを解説したうえで、本題の IIS が行うエラー制御処理についてどこでエラーが起きたらどのように観測されるのか、といった点を簡単に解説します。

    IIS を構成するコンポーネントについて

    まず、IIS のコアコンポーネントをご紹介したいと思います。

    • HTTP プロトコルスタック (HTTP.sys)
      HTTP.sys は、端的に言うと HTTP/HTTPS 用の通信ドライバです。HTTP コネクションの管理、HTTP ヘッダー解析、URL/URI/IRI の解析、HTTP リクエストのログ機能、キャッシュ機能、および、SSL 機能等、多くの機能が HTTP.sys に搭載されています。
    • Windows プロセスアクティブ化サービス (Windows Process Activation Service : WAS)
      WAS は、ワーカープロセスを管理するサービスです。実行中のワーカープロセスの健常性を監視しています。また、WASは、構成情報の読み取りなども行います。
    • World Wide Web 発行サービス (World Wide Web Publishing Service : W3SVC)
      W3SVCは、HTTP.sys 及び WAS と通信を行い、HTTP.sys に構成情報を提供します。また、W3SVC は、Web サイトのパフォーマンス監視も行います。
    • 構成ストア
      構成ストアは、XML 形式の設定ファイル群を表す仮想的なストアです。IIS 全体の構成情報は、 IIS のサーバーレベルの構成ファイルである、applicationHost.config に格納されています。この中には IIS の構成が含まれます。また、アプリケーションの構成は、ご存じの通り、各アプリケーションの web.config に含まれています。
    • ワーカープロセス
      ワーカープロセスは、要求の処理と応答の生成を行うプロセスです。ワーカープロセス には、”.NET 統合モード” と “クラシックモード” の 2 種類の動作モードがありますが、本稿では .NET 統合モードについてのみ解説します。

    IIS がリクエストを処理する流れについて

    それでは、クライアントからの要求がどのようにコンポーネントを通って処理され、応答が返るのかを簡単に説明します。



    1. HTTP要求がクライアントブラウザからサーバーへ到着します。HTTP.sys が要求を受け取ります。
    2. HTTP.sys が要求の送信先アプリケーションの構成情報が登録されているか確認をし、登録されていなかった場合は、HTTP.sys は W3SVC に問い合わせを行います。
    3. W3SVC は、WAS へ要求を渡します。
    4. WASは、IIS のサーバーレベルの構成情報である、applicationHost.config を構成ストアから取得します。
    5. WASは、要求されたアプリケーションプール内のワーカープロセスを確認します。ワーカープロセスが存在しない場合は、そのアプリケーションプール用のワーカープロセスを起動します。
    6. WASより、アプリケーションプールの情報や構成情報を W3SVC に渡します。
    7. W3SVC は、WASから受け取った構成情報に基づき、HTTP.sys へ設定および更新の通知をします。
    8. HTTP.sysは、その通知を基に、アプリケーション用のキューを作成してから、適切なワーカープロセスに要求を転送します。
    9. 要求を受け取ったワーカープロセスは、要求処理を開始します。
    10. 要求処理パイプラインのそれぞれの処理を行い、ワーカープロセスは、要求の処理結果を HTTP.sys へ返します。
    11. HTTP.sys がクライアントに応答を送信します。

    IIS が不正なリクエストを処理する際に起こるエラーについて

    このように多くのコンポーネントがリクエスト処理に関わるため、リクエストに問題がある場合、その各所でエラーが生じる可能性があります。

    特に注意する必要がある箇所としては、各コンポーネントが行うエラー制御処理は独立しており、相互に干渉することが出来ないという点にあります。結果、例えば http.sys がクライアントへ応答するエラーはカスタマイズできないといった動作上の制限が生じます。

    以下に、不正なリクエストがどのコンポーネントで弾かれる可能性があるか、またその場合、エラーがどのように見えるかを記載しました。

    http.sys

    RFC に反するような HTTP リクエストの多くは、http.sys で弾かれます。

    例えば、ヘッダーに不正な文字列が設定されていたり、ヘッダーとして不正な場合、RFC 3987(私用領域の文字を使用している)等に違反するリクエストの場合などには、HTTP の要求を最初に受け付ける http.sys によって 400 Bad Request が返されます。この事は http.sys のエラーログにも記録されます。

    HTTP API でのエラー ログ
    http://support.microsoft.com/kb/820729/ja

    なお、この場合、http.sys でリクエストを弾いているため、該当の要求は IIS や IIS 上で動作するアプリケーションまで到達しません。また、http.sys 側で HTTP エラー 400 に対して任意のエラー ページを返すような設定は用意されていないため、http.sys が返すエラー (HTTP エラー 400 / 503 等) が発生した際に、カスタムのエラーページを表示する方法はありません。

    Configuring HTTP Error Responses in IIS 7
    http://technet.microsoft.com/en-us/library/cc731570(v=WS.10).aspx 

    w3wp.exe(IIS 部分)

    IIS には、以前 URLScan というアドオンで提供されていた要求をフィルタリングする機能が、requestFiltering として製品に組み込まれました。

    要求のフィルタリング <requestFiltering>
    http://technet.microsoft.com/ja-jp/library/ee431637.aspx

    例えば、requestLimits 要素には、要求データ長を制限する maxAllowedContentLength 属性、要求クエリ長を制限する maxQueryString 属性、要求 URL 長を制限する maxUr属性があり、denyUrlSequences 要素では URL 中の特定文字列を拒否できます

    要求制限 <requestLimits>
    http://technet.microsoft.com/ja-jp/library/ee431638.aspx

     URL シーケンスの拒否 <denyUrlSequences>
    http://technet.microsoft.com/ja-jp/library/ee431583.aspx

    これら IIS の要求制限については httpErros 要素によってエラーページが表示されます。なお、existingResponse 属性によって後述の ASP.NET によるエラーの動作に影響が生じる場合があります。

    HTTP エラー <httpErrors>
    http://technet.microsoft.com/ja-jp/library/ee431601.aspx

    w3wp.exe(ASP.NET 部分

    ASP.NET には要求検証機能があります。特に代表的なものとして、スクリプトのインジェクションとみなされるリクエストにはエラーが表示されます。

    How To: ASP.NET でインジェクション攻撃から保護する方法
    http://msdn.microsoft.com/ja-jp/library/ff647397.aspx

    スクリプトによる攻略の概要
    http://msdn.microsoft.com/ja-jp/library/w1sw53ds(v=vs.110).aspx

    ASP.NET の検証機能は httpRuntime 要素にて設定可能です。例えば、要求データ長を制限する maxRequestLength 属性、要求 URL 長を制限する maxUrlLength 属性、要求ファイル名検証に関わる relaxedUrlToFileSystemMapping 属性、さらに前述の XSS 検証に関わる requestValidationMode 属性、requestValidationType 属性、requestPathInvalidCharacters 属性などがあります。

    httpRuntime 要素 (ASP.NET 設定スキーマ)
    http://msdn.microsoft.com/ja-jp/library/e1f13641(v=vs.110).aspx

    ASP.NET のこれらの検証機能によってエラーとなった場合、基本的にはカスタムエラー設定に従った動作をします(問題によっては強制的に接続を切断する場合もあります)。しかし、customErrors 要素の redirectMode 属性が redirect であり、かつリダイレクト先のエラーページを表示する事にも支障がある場合、ランタイムエラーとなる場合があります。

    customErrors 要素 (ASP.NET 設定スキーマ)
    http://msdn.microsoft.com/ja-jp/library/vstudio/h0hfz6fc(v=vs.100).aspx

    また、ASP.NET で構築されている部分、例えばASP.NET のモジュール(ビルトインの ASP.NET FileAuthorizationModule や URL 解釈機能を含みます)やハンドラで、リクエスト処理に支障があった場合も ASP.NET のカスタムエラーが動作します。エラーコードは発生する問題によって異なる場合があります。

    FileAuthorizationModule クラス
    http://msdn.microsoft.com/ja-jp/library/System.Web.Security.FileAuthorizationModule(v=vs.110).aspx

    エラーの追及方法について

    上記のようにやや複雑の構成となっていますが、該当のリクエストがどのコンポーネントで拒否されたかを知る事で、適切な対処が選択できます。

    そのことを知るためには、IIS 7.0 以降に搭載された「失敗した要求トレース」が非常に有用です。以下にその設定方法と使い方に関するドキュメントがあります。

    失敗した要求トレース <traceFailedRequests>
    http://technet.microsoft.com/ja-jp/library/ee431657.aspx

    失敗した要求トレースを使用して Classic ASP エラーをトラブルシューティングする
    http://technet.microsoft.com/ja-jp/library/ee155452.aspx

    エラーはどこで起きたのか、という点に注目してトレースを見て頂くと、それに応じて、どのコンポーネントの検証機能によってエラーとなったのか、が分かるかと思います。

  • [ご注意ください] 12月10日に Windows Update で配信された Visual Studio 2012 対象の更新プログラム KB3002339 をインストールするとシステムのハングアップなどの問題が発生する

    ※ 本件は、Visual Studio サポート チームのブログの転載となります。
    2014 年 12 月 10 日に公開され、Windows Update で配信された Visual Studio 2012 対象の KB3002339 の更新プログラムをインストールすると、Windows Update が完了しない、システム再起動時に更新が完了せずシステムがハングアップしてしまうという現象が発生することを確認いたしました。

    KB3002339
    https://support.microsoft.com/kb/3002339/

    本問題の報告を受け、Windows Update の配信は既に停止いたしましたが、Windows Server Update Services (WSUS) を使用して更新プログラムを配信されているお客様におかれましては、本更新プログラムの配信を停止していただけますようお願い申し上げます。

    既に本更新プログラムを適用し、ハングアップなどの現象が発生している環境での復旧方法につきましては、現在調査中です。進展があり次第、Visual Studio チーム記事にて情報公開させていただきます。最新の内容は下記 Visual Studio チームブログをご覧ください。

    Visual Studio サポートチームブログ
    [ご注意ください] 12 月 10 日に Windows Update で配信された Visual Studio 2012 対象の更新プログラム KB3002339 をインストールするとシステムのハングアップなどの問題が発生する
    http://blogs.msdn.com/b/jpvsblog/archive/2014/12/10/12-10-windows-update-visual-studio-2012-kb3002339.aspx

    お客様には多大なご迷惑をおかけしておりますこと、深くお詫び申し上げます。

  • Windows Server 2008/IIS 7.0 以後におけるパスワード変更機能について

    こんにちは。
    日本マイクロソフト、デベロッパー サポート DSI の澤田です。

    Windows Server 2003/IIS 6.0 まで Web アプリケーション経由でユーザーのパスワードの有効期限切れ事前通知機能、および、パスワード変更機能として IISADMPWD を提供していました。しかし、IISADMPWD は Windows Server 2008/IIS 7.0 以降のバージョンの IIS ではインストールされません。今回は Windows Server 2008/IIS 7.0 以降のバージョンのIIS における Web アプリケーション経由でユーザーのパスワードの有効期限切れ事前通知、パスワード変更確認機能、および、パスワード変更機能に関する情報を紹介します。

    Windows Server 2008/IIS 7.0 以後における IISADMPWD について

    Windows Server 2008/IIS 7.0 以後のバージョンの IIS では、IISADMPWD はサポートしておらず、動作しません。

     IISADMPWD には、IIS 6.0 のメタベースに登録された PasswordExpirePreNotifyDaysプロパティ、PasswordChangeFlagsプロパティなどの値に基づいて動作する以下の主要な 3 つの機能があります。

    1. パスワードの有効期限切れ事前通知機能
      基本認証や NTLM 認証 (※) などの認証を要求する Web アプリケーションにユーザーがアクセスした際、そのユーザーのパスワード有効期限日が、PasswordExpirePreNotifyDays メタベース プロパティ値に設定した日より短くなると、IISADMPWD のパスワード変更期限が近づいているためにパスワード変更を実行するかどうかを確認するページ (anot.asp または anot3.aso) を表示します。
      ※Windows Server 2003/IIS 6.0 での統合 Windows 認証には、NTLM 認証と Kerberos 認証があります。1. の機能は Kerberos 認証の認証の特性上、利用できません。
    2. パスワード変更確認機能
      基本認証や統合 Windows 認証を要求する Web アプリケーションにユーザーがアクセスした際、そのユーザーがパスワード有効期限が切れているために、IIS の認証が通らなかった場合、PasswordChangeFlags プロパティ値に 4 (hex 0x00000004) のビットマスクが設定されていないと、IISADMPWD のパスワード変更ページ (aexp.asp または aexp3.asp) を表示します。
    3. パスワード変更機能
      1. や 2. の機能により、実際にパスワード変更作業を行うためのページ (aexp2.asp、aexp2b.asp、aexp4.asp、または aexp4b.asp) を表示します。このページで、ユーザーは古いパスワード、新しいパスワードを入力し、パスワードを変更します。

     Windows Server 2003/IIS 6.0 までの IIS には、IIS 自体に 1. および 2. の機能が動作するような実装が組み込まれています。具体的には、Windows Server 2003/IIS 6.0 までの IIS には、1. および 2. の機能に必要な PasswordExpirePreNotifyDays プロパティや PasswordChangeFlags プロパティ、これらの機能に基づいて表示する ASP ページを指定するための AuthNotifyPwdExpURL プロパティなどが実装されています。しかし、Windows Server 2008/IIS 7.0以降のバージョンの IIS には、このような機能の実装自体がありません。

     このため、たとえ、Windows Server 2003/IIS 6.0 IISADMPWD Windows Server 2008/IIS 7.0 以後の IIS にコピーし、IISADMPWD に含まれる iispwchg.dll をレジストリ登録し、更に、IISADMPWDに必要なメタベース プロパティ値を登録したとしても、Windows Server 2008/IIS 7.0 以後の IIS 1. 2. の機能を実現することはできません。メタベースプロパティの設定自体はエラーとはなりませんが、Windows Server 2008/IIS 7.0 以降のバージョンの IIS にはそれらの設定値をハンドルする実装がありません。マイクロソフトでは、Windows Server 2008/IIS 7.0以降のバージョンの IIS において IISADMPWD はサポートしていないのみならず、IISADMPWD の上述のような機能は提供していません。

    IISADMPWD の代替案について

    IISADMPWD の利点は、ユーザーが IISADMPWD のページに直接アクセスすることなく、つまり、IIS 上で動作する基本認証や統合 Windows 認証を要求する Web アプリケーションにアクセスしたタイミングで、1. や 2. の機能によって自動的にパスワード変更画面にリダイレクトされることです。このような IISADMPWD の機能を Windows Server 2008/IIS 7.0 以後の IIS で実現するためには、ユーザーの認証 “後”、かつ、ユーザーがアクセスした Web アプリケーションの実行 “前” に機能するような ISAPI フィルタや HTTP モジュールの開発が必要です。

    これについて、マイクロソフトが提供している既存のサンプル等はありませんが、以下のような HTTP モジュールのサンプルが CodePlex から提供されていますので参考にしてみてください。

    IISADMPWD ASP.NET HTTP Module
    http://iisadmpwdhttpmodule.codeplex.com/

    また、IISADMPWD の 3 つ目の機能であるパスワード変更機能は、iispwchg.dll 内で NetUserChangePassword API にて実現しています。「Web 経由でパスワード変更をする方法」、すなわち、IISADMPWD の 3. の機能だけを利用したいという場合には、IADsUser::ChangePassword メソッドを使うことで容易に実現できます。サポートを提供していない IISADMPWD を利用する代わりに、以下のように IADsUser::ChangePassword メソッドを使ってパスワード変更する Classic ASP の独自実装をご検討ください。以下は、IADsUser::ChangePassword メソッドを使用し、ユーザーのパスワードを変更する Classic ASP のサンプル コードです。パスワードの変更は domain\testuser アカウントで実行し、パスワードの変更対象のユーザーは LDAP の CN に指定している User1 です。

    <%@ LANGUAGE="VBSCRIPT" %>
    <%
     Dim objDSO,objUser, strUser, strPwd

     'Password 変更の実行権限を持つユーザー
     strUser = "domain\testuser "
     strPass = "testuserpassowd"

     'Password 変更対象者の古いパスワード、新しいパスワード
     oldPass = "oldpassword"
     newPass = "newpassword"

     Set objDSO = GetObject("LDAP:")
     Set objUser = objDSO.OpenDSObject(LDAP://test.contoso.com/CN=User1,OU=UserAccounts,DC=test,DC=contoso,DC=com, strUser, strPass, 1)

     If err.number <> 0 Then
         Response.Write "GetObject is failed: " & err.number & "</BR>"
     End If

     objUser.ChangePassword oldPass, newPass

     If err.number <> 0 Then
         Response.Write "ChangePassword is failed: " & err.number & "</BR>"
     Else
         Response.Write "Password has changed successfully."
     End If
    %>

    <html>
    <title>PASSWORD CHANGE SAMPLE</title>
    </html>

    CodePlex のサンプル、および、passchange.asp はマイクロソフトでサポートを提供するものではありませんが、IISADMPWD の代替ソリューションを検討する上での参考情報としていただけると幸いです。

  • Windows Server 2008 または Windows Server 2008 R2 上で IIS (WWW サービスと FTP サービス) をクラスタリング構成する方法について

    はじめまして。
    日本マイクロソフト、デベロッパー サポート DSI の澤田です。

    今回は、お問い合わせの多い、IIS (WWW サービスと FTP サービス) のクラスタリング (フェールオーバークラスタリング) についてお知らせしたいと思います。これから Windows Server上で IIS のクラスター環境の構築をされる方、あるいは、既にクラスター環境で IIS を使用し、フェールーオーバーする障害が発生している方は、是非そのまま最後まで目を通してください。

    Windows Server 2008 または Windows Server 2008 R2 上で IIS をクラスタリングするための技術文書

    Windows Server 2008 または Windows Server 2008 R2 上では IIS のクラスタリングがサポートされています。環境構築手順は以下の技術文書にあります。

    文書番号: 970759
    タイトル: Microsoft Windows Server 2008 フェールオーバー クラスターで IIS 7.0 World Wide Web 発行サービスを構成する
    http://support.microsoft.com/kb/970759/ja-jp

    文書番号: 974603
    タイトル: Windows Server 2008 フェールオーバー クラスターで FTP 7.5 を構成する方法
    http://support.microsoft.com/kb/974603/ja-jp

    また、以下の修正プログラムの適用を強くお勧めします。

    // Windows Server 2008 環境の場合
    文書番号: 2163398
    タイトル: A memory leak occurs in the Rhs.exe process when you configure IIS 7.0 World Wide Web Publishing Service in a Windows Server 2008 failover cluster
    http://support.microsoft.com/kb/2163398/en-us

    // Windows Server 2008 R2 SP1 環境の場合
    文書番号: 2618982 
    タイトル: FIX: Memory leak in Rhs.exe after you configure the IIS 7.5 W3SVC service in a Windows Server 2008 R2 SP1 failover cluster
    http://support.microsoft.com/kb/2618982/en-us

    Windows Server での IIS のクラスタリングとは

    技術文書には、IIS をクラスタリングする際の環境構築手順として、大きく以下の 2 つの要素があります。

    •  共有構成を有効化し、オフライン ファイル機能を有効する。
    •  汎用スクリプト リソースをクラスター リソースとして追加する。

    しかし、クラスターの仮想サーバー名を利用して IIS にアクセスするためには、実は、このどちらの設定も不要です。IIS 7.x および FTP 7.x 以後の IIS では、クラスター固有の機能は提供していません。つまり、クラスター環境で動作しているかどうかに IIS は関与しないのです。各要素の目的は以下の通りです。

    共有構成を有効化し、オフライン ファイル機能を有効する。

    クラスター環境を始めとする負荷分散をしている IIS は全てのノードを同じ構成にして利用することが推奨されます。IIS の構成情報は既定で %systemdrive%\system32\inetsrv\config フォルダ以下の applicationHost.config に保存されており、各ノードがローカルに構成情報を保持することになります。各ノードで構成情報を容易に統一する方法として、共有構成の機能があります。

    これにより、IIS の構成情報である applicationHost.config は 1 つの共有フォルダ上で一元管理されるようになります。サーバー管理者は、どれか 1 台の Web サーバーまたは FTP サーバーで、インターネット インフォメーション サービス マネージャーや appcmd.exe を使用して IIS の構成を変更すると、全てのノードで自動的にその変更が反映されます。

    汎用スクリプト リソースをクラスター リソースとして追加する。

    IIS はクラスター環境で動作しているかどうかは関与しないため、それらにおいて障害が発生しても自動的に別のノードにフェール オーバーすることはありません。

    IIS において障害が発生した時に、自動的に別のノードにフェール オーバーさせる機能は、クラスターの汎用スクリプト リソースによって実現しています。技術文書にあるサンプルのスクリプトでは、Web サイトやアプリケーション プールが開始状態にあるかどうか、また、FTP サービスが “RUNNING” の状態にあるかどうかをチェックしています。

    このスクリプトをクラスターの汎用スクリプト リソースに登録することにより、クラスターの機能にて定期的に IsAlive/LooksAlive メソッドが呼ばれ、各メソッド内で実装している Web サイト、アプリケーション プール、または、FTP サービスの状態をチェックする処理が行われます。

    クラスタリング環境でのフェールオーバーの原因

    技術文書にあるサンプル スクリプトを利用した場合、Web サイトやアプリケーション プールが開始状態にない、または、FTP サービスが “RUNNING” の状態にないと、「障害」が発生したと検知され、フェールオーバーします。

    例えば、ワーカープロセスが短期間に異常終了を繰り返し、ラピッドフェール保護機能が働いてアプリケーション プールが停止した場合や CPU 監視機能を有効化しており、設定した期間内、ワーカープロセスがCPU を占有したために、CPU 監視機能が働いてアプリケーション プールが停止した場合などは、汎用スクリプト リソースに登録したスクリプトによって「障害」が検知されフェールオーバーします。このような場合は、一般的に、ラピッドフェール保護機能が働いたことや CPU 監視機能が働いたことがイベント ログから確認できます。

    また、W3SVC サービスや FTPSVC サービスが停止した場合も、同様に、汎用スクリプト リソースに登録したスクリプトによって「障害」が検知されフェールオーバーします。

    しかし、このような機能によりアプリケーション プールが停止したことや、あるいは、W3SVC サービス、 FTPSVC サービスが停止したことをイベント ログから確認することができず、代わりに、以下のようなエラーが記録され、その直後にフェールオーバーしている場合があります。また、フェールオーバーのタイミングで以下のようなエラーが記録され、フェールオーバーが繰り返される (フェールバックする) 場合もあります。

    上記イベントは、共有構成を有効にしている IIS および FTP が共有フォルダ上にある構成情報 applicationHost.config を読み取れなかったことを意味します。これは、多くの場合、IIS の構成情報を配置している共有フォルダを、同じクラスター環境上にあるクラスター ディスクに作成している場合に発生します。以下に主な理由と対策を説明します。

    理由: 共有フォルダに対して、オフライン ファイルの機能を有効化していない。

    共有フォルダがあるクラスター ディスクを保持するクラスター リソースがフェールオーバーするタイミングで、一時的に共有フォルダへのアクセスができない状態が発生します。この時、オフライン ファイルの機能を有効化していないと、Windows Process Activation サービス (以下 WAS) や FTP サービスは構成情報を読み取ることができず、サービスを開始することはできません。

    対策: 共有構成を有効にする場合は、必ず、オフライン ファイルの機能を有効にする必要があります。

    理由:構成情報を配置している共有フォルダがあるクラスター ディスクが自身のノードで Active になるタイミングとそのサーバーの WAS や FTP の起動タイミングが重複している。

    共有フォルダがあるクラスター ディスクのディスク リソースと WAS や FTP のサービスには依存関係はありません。例えば、全てのクラスター ノードの OS がシャットダウンしている状態で、ある単一のクラスター ノードの OS を起動することを想定します。この時、ディスク リソースのオンライン化より WAS や FTP のサービス開始の方が先に行われる可能性があり、このタイミングでは共有フォルダへのアクセスができません。

    この場合、オフライン ファイルの機能を有効にしていても、共有フォルダ \\FileServer\ConfigShare のディスクはローカル ディスクであるため、オフライン ファイルが利用されることがありません。

    対策: 構成情報を配置している共有フォルダを同じクラスター環境上のクラスター ディスクではなく、スタンドアロン サーバーや、別のクラスター環境上のクラスター ディスクに配置します。これにより、WAS や FTP サービスが構成情報を読み取るタイミングで、確実に共有フォルダへのアクセスができる、または、アクセスできなくてもオフライン ファイルが利用できるようになります。構成情報を配置している共有フォルダを同じクラスター環境上のクラスター ディスクに配置する場合は、クラスター ディスクのディスク リソースがオンラインになってから、WAS や FTP のサービスを再起動します。

    Windows Server 2012 でのクラスタリングのサポート・環境構築の変更点について

    Windows Server 2012 上で IIS 8.0 および FTP 8.0 のクラスタリング構成はサポートされます。
    *ただし、Microsoft では高可用性を目的とした Web サーバー、FTP サーバー環境は Microsoft Failover Cluster (MSFC) を利用するのではなく、Network Load Balancing (NLB) を利用することを推奨しています。

     Windows Server 2012 上で IIS をクラスタリング構成する手順は上述の技術文書から以下の 2 点が変更されています。

    •  オフライン ファイルの有効化
    •  フェールオーバー クラスター マネージャーでのリソースの追加

    オフライン ファイルの有効化

    オフライン ファイルを利用するためには、デスクトップ エクスペリエンスをインストールする必要があります。Windows Server 2012 ではサーバー マネージャーの [機能] - [ユーザー インターフェイスとインフラストラクチャー] を展開すると、デスクトップ エクスペリエンスがあります。

     

    Windows Server 2012 ではオフライン ファイルと同期センターが統合されています。デスクトップ エクスペリエンスをインストール後、コントロール パネルからオフライン ファイルを有効化するためには、同期センターを開き、左ペインのオフライン ファイルの管理リンクをクリックします。

     

    フェールオーバー クラスター マネージャーでのリソースの追加

    Windows Server で IIS をクラスタリング構成する際は、技術文書のサンプルのような Web サイト、アプリケーション プール、FTP サービスの状態を監視するスクリプト (clusweb7.vbs や clusftp7.vbs) を汎用スクリプト リソースとして追加します。
    *汎用サービスと間違い易いので注意してください。汎用サービスに W3SVC サービスや FTP サービスを登録することはサポートされていません

    Windows Server 2012 ではフェールオーバー クラスター マネージャーのユーザー インターフェイスが変更されています。汎用スクリプト リソースを追加する時は、フェールオーバー クラスター マネージャーを起動し、[ロール] を右クリックして、[ロールの構成] メニューを選択します。

     



    それでは、またの機会に。

     

  • Windows 認証の Web サイトで、突然認証ダイアログが出るようになる問題について

    はじめまして。
    日本マイクロソフト、デベロッパーサポート DSI の平井です。入社以来、主に IIS、MSMQ、BizTalk Server などのサーバー系製品を担当してきました。

    今日は、ワールドワイドでのお問い合わせが多く、かつインパクトの大きい現象についてお知らせしたいと思います。以下の条件にすべて合致する環境を運用されている方は、是非そのまま最後まで目を通してください。

    条件

    1. IIS 7.5 が動作している
      具体的には、以下の OS で IIS をインストールしている環境となります。

      ・Windows 7
      ・Windows 7 SP1
      ・Windows Server 2008 R2
      ・Windows Server 2008 R2 SP1
    2. IIS の設定で Windows 認証を有効にしている
      Windows 認証は NTLM 認証と Kerberos 認証の 2 種類がありますが、Kerberos 認証が対象となります。両者の違いについてはここでは割愛します。
    3. アプリケーションプールの実行アカウントが ApplicationPoolIdentity となっている。

    上記条件をすべて満たした環境では、以下の技術文書に記載された問題が発生する可能性があります。

    文書番号: 2545850
    タイトル: Users cannot access an IIS-hosted website after the computer password for the server is changed in Windows 7 or in Windows Server 2008 R2
    http://support.microsoft.com/kb/2545850/en-us
    *機械翻訳
    http://support.microsoft.com/kb/2545850/ja-jp

    現象

    技術文書 2545850 の問題が発生すると、ブラウザーで該当の Web サイトにアクセスすると認証ダイアログが表示されるようになりますが、以下のような特徴があります。

    •  昨日まで問題なかったのに、今日になって突然認証ダイアログが表示されるようになった
    • 表示された認証ダイアログに、正しいアカウント情報を入力しても認証が通らない
    • アプリケーションプールのリサイクルや、IIS の再起動をしても現象が回避できない
    • IISのマシンの再起動を行うことで現象を回避することができたが、しばらくするとまた同じ状況になる

    もし、上記の条件に合致する環境や、上記の特徴の現象に遭遇したことがあれば、早急に以下の回避方法を検討してください。

    回避方法

    一時的な回避方法

    IIS のマシンを再起動することで、一時的に本現象を回避することができます。しかし、再度この現象が発生する可能性があります。

    恒久的な回避方法

    技術文書 2545850 から、修正プログラムを入手し適用します。(マシンの再起動が必要です)

    もし修正プログラムの適用がすぐにできない場合は、アプリケーションプールの実行アカウントを既定の ApplicationPoolIdentity から Network Service に変更することでも、本現象を恒久的に回避することができます。 この方法の場合、マシンや IIS の再起動を行わずに現象を回避することができます。ただし、アプリケーションプールのリサイクルが発生します。

    なお、ApplicationPoolIdentity から Network Service に変更したことによる影響は、ApplicationPoolIdentityのアカウントに対して何か設定をしていない限り、低いものと考えられます。

    再現方法

    この問題を意図的に発生させて、上記の回避方法の有効性を確認することができます。

    *検証環境で確認するようにしてください。

    事前確認

    • Windows 認証のみ有効にし、該当のアプリケーションプールの実行アカウントが ApplicationPoolIdentity であることを確認します
    • クライアントからIIS 上のファイルにアクセスし、認証ダイアログが表示されることなく Kerberos 認証が行われていることを確認します

    *以下の技術文書に記載の ASP ファイルを実行することで、Kerberos 認証が行われたかどうか確認できます。ただし、この ASP ファイルを実行するためには IIS 役割サービスの [ASP] がインストールされている必要があります。

    文書番号: 241835
    タイトル: [IIS]IIS 5.0 における認証方法の選び方
    http://support.microsoft.com/kb/241835/ja-jp

     再現手順

    1. IIS のマシン上で、コマンドプロンプトを [管理者として実行] から起動します。
    2. 以下のコマンドを実行し、、マシンアカウントのパスワードを変更します。

      > nltest.exe /sc_change_pwd:ドメイン(FQDN)名

      例: 該当のマシンが、WebServer01.contoso.local の場合は、nltest.exe /sc_change_pwd:contoso.local になります。
    3. 続いて、以下のコマンドを実行し、IIS を再起動します。

      > iisreset
    4. クライアントから IIS 上のファイルにアクセスします。認証ダイアログが表示されれば、技術文書 2545850 の問題が発生しています。

    確認手順

    以下の手順で、マシンアカウントのパスワードが更新された日時を確認することができます。

    *IIS のマシンを WebServer01.contoso.local と仮定します。

    1. ドメインコントローラー上で、コマンドプロンプトを [管理者として実行] から起動します。
    2. 以下のコマンドを実行し、IIS のマシンの DN (識別名) を取得します。

      > dsquery computer -name WebServer01

      "CN=WebServer01,CN=Computers,DC=contoso,DC=local"
    3. 手順 2 で取得した DN を利用して、最後にパスワードを変更した日時を取得します。

      > dsquery * "CN=WebServer01,CN=Computers,DC=contoso,DC=local" -attr pwdlastset

      pwdlastset
      129823886587114188
    4. 手順 3 で取得した日時を変換します。以下の例では 2012/05/25 12:04:18 にパスワードが更新されています。

      > w32tm /ntte 129823886587114188

      150259 03:04:18.7114188 - 2012/05/25 12:04:18

     


    それでは、またの機会に。