数百の個別のWebアプリをホストするIISサーバーがあり、これらのアプリをホストする物理データベースサーバーは、メンテナンスのために短期間オフラインになります(所要時間は15分未満です)。
その期間中は、どのWebサイトについても、すべてのトラフィックを「現在メンテナンス中」のページにリダイレクトします。
すべてのWebアプリにアクセスし、そのアプリ内のすべてのリクエストに対してユーザーを別のページに送信するIIS書き換えルールを設定することで、これを実行できることがわかりました。しかし、それを行うには、データベースのメンテナンスを行うよりも時間がかかります!
私は3つのことを試しましたが、どれもうまくいきませんでした。
グローバルIIS書き換えルール
私はすべてのサイトにルールを一度に適用する簡単な方法を探していました。それから、同じように痛みのない手順でそのルールを「元に戻す」ことができます。これまでのところ、私の試みはどれもうまくいきませんでした。この書き換えルールをW:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.configにあるグローバルweb.configに入れてみました。
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="redirect all requests" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Redirect" url="http://www.somedomain.com/maintenance" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
これはうまくいきませんでした。IISでは64ビットの.NET 4.0を実行していますが、「念のため」に32ビットと2.0のグローバルweb.configファイルに同じものを配置しましたが、変更はありません。
App_Offline.htm "スペシャルファイル"
私が見たもう1つの提案はapp_offline.htmの「特別な」ファイルですが、このファイルをすべてのアプリのアプリルートにデプロイするのに実際にメンテナンスを行うよりも時間がかかるという同じ問題に戻ります。
IISの「オフライン」サイト
すべてのサイトは、単一のIPを使用してIISで設定されています。これは、すべてのアプリが単一のSSL証明書(UCC)を共有するため、SNAがなくても機能します。私に発生したことの1つは、IISで、使用しているIPへのすべてのトラフィックに一致するサイトをセットアップでき、ホストヘッダーの値を指定しなかったことです。より高い「優先順位」を与えることができ、他のサイトが一致する前に、開始時にすべてのトラフィックがそのIPに一致することが期待されました。リクエストURLに関係なく、すべてのリクエストに対して同じページを提供するようにそのサイトを設定できます。
メンテナンス中はそのサイトを開始し、終了したら停止します。
しかし、IISはHTTPリクエストをより具体的なサイトよりも具体的なサイトに一致させるように見えるため、これも機能させることができませんでした。したがって、この「オフラインであることをユーザーに伝える」サイトのホストヘッダー値を省略すると、リクエストに別のサイトと一致するホストヘッダー値がない場合を除いて、一致しませんでした。これにより、各Webアプリに手動でアクセスしてオフラインにするアクションを実行し、メンテナンスが完了したらオンラインに戻すという同じ問題に戻ることができます。
これを達成する簡単な方法はありますか?私たちがこの問題に遭遇するのは最初ではないようです。
-ジョシュ