3

HTTP_HOST および SERVER_NAME サーバー変数は、HTTP 要求からのホスト名を提供します (これは、要求が行われた方法に基づいて、IP アドレスまたは負荷分散された DNS になります)。実際のマシン名 (つまり、COMPUTERNAME 環境変数の値) を与えるサーバー変数が見つかりませんでした。

サーバー ファームでいくつかのリダイレクト ルールを設定しようとしていますが、現在のマシン名に基づいたいくつかのルールがあります (たとえば、内部マシンintの名前に含まれています)。マシンごとに個別のルールを作成するのではなく、現在のマシン名に基づいた条件付きロジックが必要です。マシン名を取得する方法が見つからないようです。

何か案は?

4

1 に答える 1

3

IIS7 では、コンピューター名は組み込みサーバー変数の 1 つではありません。ただし、すべてが失われるわけではありません。カスタム UrlRewrite プロバイダーを使用して少し作業すれば、書き換えルールでマシン名を表示できます。

Scott Forsyth は実際にこのようなものを既に作成しており、その使用法を説明するブログ投稿を書き、ソースとビルド済みのバイナリ + インストーラーを提供しています。

URLRewrite ServerNameVariable プロバイダー

その記事がここに消えた場合にこの情報を保持するために、大まかな手順は次のとおりです。

まず、Visual Studio で新しいクラス ライブラリ プロジェクトを作成します。これを行う手順は次のとおりです。

URL 書き換えモジュール (IIS.NET) 用のカスタム書き換えプロバイダーの開発

それらは本質的に次のとおりです(リンクが切れた場合):

  1. クラス ライブラリ プロジェクトを作成し、ServerNameProvider. プロジェクトが .NET 2.0 または 3.5 プロジェクトであることを確認する必要があります。IIS7.5 マネージ コードのサポートは、依然として 2.0 ランタイムを対象としています。

  2. デフォルトClass1.csファイルの名前を、プロバイダの目的を反映した名前に変更します。たとえば、次のServerName.csようにします。ソース内のクラス名にもこれが反映されていることを確認してください。

  3. への参照を追加: %ProgramFiles%\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Iis.Rewrite.dll

  4. プロジェクトのプロパティで、厳密な名前のキーを作成します (署名タブで)

  5. ビルド後のイベントを追加して、開発用 PC GAC にプロバイダー アセンブリをインストールします (テスト用のみ)。

    CALL "%VS90COMNTOOLS%\vsvars32.bat" > NULL 
    gacutil.exe /if "$(TargetPath)"
    

    Visual Studio 2010 を使用している場合は、環境変数%VS90COMNTOOLS%を に変更する必要があります%VS100COMNTOOLS%

  6. ファイルを開き、クラスがインターフェイスをServerName.cs実装していることを確認します。Microsoft.Web.Iis.Rewrite.IRewriteProvider

    using System.Collections.Generic;
    using Microsoft.Web.Iis.Rewrite;
    
    namespace ServerNameVariable
    {
      public class ServerName : IRewriteProvider
      {
        public void Initialize(IDictionary<string, string> settings, 
                           IRewriteContext rewriteContext)
        {
        }
    
        public string Rewrite(string value)
        {
          return  System.Environment.MachineName;
        }
      }
    }
    
  7. プロジェクトをビルドします。ローカル PC では、アセンブリが GAC にインストールされます。

  8. プロバイダーを IIS に登録します。

appcmd.exe set config -section:system.webServer/rewrite/providers /+"[name='ServerNameVariable',type='ServerNameVariable.ServerName, ServerNameVariable, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5854ff76fb5c07af']" /commit:apphost

PublicKeyToken上記のコマンド ラインの値が、アセンブリの公開キー トークンと一致していることを確認してください。を実行してその値を抽出できますsn.exe -T <assemblyfile.dll>。次に例を示します。

e:\AppDev\..bin\Debug> sn.exe -T ServerNameVariable.dll
Microsoft (R) .NET Framework ストロング ネーム ユーティリティ バージョン 4.0.30319.1
Copyright (c) Microsoft Corporation. 全著作権所有。

公開鍵トークンは 5854ff76fb5c07af です

次に行うことは、書き換えルールで新しいプロバイダーを使用することです。たとえば、Scott が示したアウトバウンド ルールの例を次に示します。

<outboundRules>
    <rule name="Set Custom Header" enabled="true">
        <match serverVariable="RESPONSE_X_Machine_Name" pattern=".*" />
         <action type="Rewrite" value="{ServerNameVariable:}" />
    </rule>
</outboundRules>

マシン名が の場合に google.com にリダイレクトする単純なインバウンド ルールを次に示しますBOB

<rewrite>
    <rules>
        <rule name="TestServerVariableProvider" 
              enabled="true" 
              stopProcessing="true">
            <match url=".*" />
            <conditions>
                <add input="{ServerNameVariable:}" pattern="BOB" />
            </conditions>
            <action type="Redirect" 
                    url="http://google.com" 
                    appendQueryString="false" 
                    redirectType="Found" />
        </rule>
    </rules>
</rewrite>
于 2012-08-05T00:52:07.050 に答える