ASP.NET 2.0/3.5 共有ホスティング構成

ウォルター・オリバー

はじめに

IIS には、動的コンテンツ (特に ASP.NET) の機能強化が用意されています。 IIS 7 以降では、ASP.NET ランタイム拡張モデルがコア サーバーに統合されています。 これにより、開発者は下位レベルの C++ API を使用する代わりに、ASP.NET 2.0 以降の豊富な機能と .NET Framework を使用して IIS を完全に拡張できます。 既存の ASP.NET アプリケーションは、フォーム認証、ロール、出力キャッシュなどの既存の機能を、.aspx ページだけでなく、あらゆる種類のコンテンツに使用できるため、より緊密な統合のメリットを得られます。

IIS との統合の主な機能と利点 ASP.NET 詳細については、「 コア Web サーバーの概要」を参照してください。 .NET Framework 3.5 の詳細とインストール方法については、 https://www.microsoft.com/net/ または ASP.NET 参照してください。

次の設定は、ホスティング ガイダンスの「共有ホスティング アーキテクチャの計画」の記事で説明されている共有ホスティング アーキテクチャの一部として、Web サーバーで使用されました。 これらの設定が推奨される理由と構成方法の詳細については、をダウンロードしてください。

信頼レベルの構成

信頼レベルを使用すると、ASP.NET のセキュリティ規則を定義できます。 ディスクからの読み取りやレジストリへのアクセスなど、アプリケーションで実行できる操作の種類を定義します。 推奨される信頼レベルは Medium で、多くの一般的な操作を許可しますが、危険なアプリケーションの多くを制限します。 中信頼よりも多くの操作を許可する必要がある場合は、カスタム信頼レベルを作成する必要があります。

カスタム信頼レベルを構成し、追加のアクセス許可を構成するには

  1. %windir%\Microsoft.NET\Framework \{version}\ CONFIG ディレクトリに移動します。

  2. [中信頼ポリシー] ファイル web_mediumtrust.configコピーして、同じディレクトリ %windir%\Microsoft.NET\Framework\{version}\ CONFIG\に新しいポリシー ファイルを作成します。

  3. web_CustomTrust.configなど、カスタム信頼レベルであることを示すようにファイルの名前を変更します。

  4. 新しいファイルを開き、web_CustomTrust.configし、 WebPermission セクションを見つけます。

    ...

    <IPermission class="WebPermission"
    
    version="1"
                   <ConnectAccess>
                       <URI uri="$OriginHost$" />
                   </ConnectAccess>
         </IPermission>
    

    ...

  5. ConnectAccess 要素が削除され、Unrestricted が true に設定されるように WebPermission を編集します

    ...

    <IPermission class="WebPermission"
    
    version="1" 
                      Unrestricted="true"/>
    

    ...

  6. 共有ホスティング環境に必要であることがわかっていない限り、 PrintingPermissionEnvironmentPermission をコメント アウトします。

  7. 次に示すように、Web.config ファイルの <trustLevel> セクションに新しい<securityPolicy>要素を追加します。

    <location allowOverride="true">
    
        <system.web>
          <securityPolicy>
           <trustLevel name="Full" policyFile="internal" />
           <trustLevel name="High" policyFile="web_hightrust.config" />
           <trustLevel name="Medium" policyFile="web_mediumtrust.config" />
           <trustLevel name="Low" policyFile="web_lowtrust.config" />
           <trustLevel name="Minimal" 
                       policyFile="web_minimaltrust.config" />
           <trustLevel name="Custom" policyFile="web_CustomTrust.config" />
          </securityPolicy>
          <trust level="Custom" originUrl="" />
         </system.web>
    </location>
    
  8. 場所 allowOverride 要素を false に設定して、サーバー上のアプリケーションで変更できないように信頼レベルをロック します

    <location allowOverride="false">
        <system.web>
          <securityPolicy>
           <trustLevel name="Full" policyFile="internal" />
           <trustLevel name="High" policyFile="web_hightrust.config" />
           <trustLevel name="Medium" policyFile="web_mediumtrust.config" />
           <trustLevel name="Low" policyFile="web_lowtrust.config" />
           <trustLevel name="Minimal" 
                       policyFile="web_minimaltrust.config" />
           <trustLevel name="Custom" policyFile="web_CustomTrust.config" />
          </securityPolicy>
          <trust level="Custom" originUrl="" />
         </system.web>
    </location>
    

リモート ファイル サーバーから提供されるコンテンツの構成

リモート ファイル サーバーに格納されているコンテンツを操作するように ASP.NET を構成する場合は、いくつかの追加の手順が必要です。

IIS は、リモート ファイル サーバーからコンテンツを受信すると、認証されたユーザーを偽装します。 これは、仮想ディレクトリ ユーザーとして具体的に設定されたユーザーか、指定されていない場合は匿名ユーザーのいずれかです。 IIS ガイダンスでは、アプリケーション プール ユーザーを匿名ユーザーとして使用する必要があることを示しているため、この場合、偽装された ID はアプリケーション プール ID です。 すべてのアクセス (匿名、アプリケーション プール、仮想ディレクトリ) に 1 つの ID を使用すると、デプロイが大幅に簡略化されます。

リモート ファイル サーバーから一部の ASP.NET アプリケーションを実行するには、偽装されたユーザーが Windows の一時ディレクトリと一時コンパイル ディレクトリにアクセスできる必要があります。

ファイル サーバー共有から ASP.NET コンテンツを提供するには

  1. フォルダーの ACL を編集して、すべてのアプリケーション プール ID のアクセス許可を %windir%\Temp ディレクトリに付与します。

  2. コード アクセス セキュリティ (CAS) ポリシーを追加して、ASP.NET がファイル サーバー共有に適切にアクセスできるようにします。 これを行うには、コマンド プロンプトを開き、次のコマンドを実行します。

    %windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag 1.  -url "file://\\remotefileserver\content$\*" FullTrust
    

ガベージコレクターの設定

.NET フレームワークでは、自動ガベージ コレクションを使用して、すべてのアプリケーションのメモリを管理します。 ガベージ コレクター (GC) は、十分なガベージが蓄積され、効率的であると判断した場合、メモリを解放するためのコレクションを実行します。 このプロセスは完全に自動ですが、プロセスの効率を高めることができる設定があります。

GC の詳細については、「第 5 章 - マネージド コードのパフォーマンスの向上」を参照し、「」セクションを参照してください。

ワークステーション ガベージ コレクターの有効化

既定では、速度と CPU 負荷を最適化するために、.NET Framework によってサーバー GC が使用されます。 共有ホスティングでは、メモリが多くのアクティブ なサイトの制約である場合は、ワークステーション GC を使用する必要があります。 ワークステーション GC はメモリを最適化します。

この設定の詳細については、「 Windows Server 2003 を実行しているコンピューターで ASP.NET を使用する Web アプリケーションをホストするときに、エラー メッセージが表示されたり、コンピューターが応答を停止したりする可能性がある」 (https://support.microsoft.com/kb/911716) を参照してください。

並行ガベージコレクターの無効化

GC には、サーバー、同時実行が有効なワークステーション、同時に無効になっているワークステーションの 3 つのバージョンがあります。 同時ワークステーション GC は、クライアント シナリオを対象としています。 サーバー GC がメモリ コストでスループットとスケーラビリティに優先順位を付けるのと同様に、同時ワークステーション GC はメモリ コストで応答性に優先順位を付けます。 メモリを最適化するには、ワークステーション GC を使用するときに同時実行ガベージ コレクションを無効にします。

gcTrimCommitOnLowMemory 設定の有効化

GC は将来の割り当てのためにメモリを保持するため、コミットされた領域は厳密に必要な領域を超える可能性があります。 この領域は、システム メモリに負荷が大きい状況に対応するために削減できます。 この設定を有効にすると、GC はシステム メモリの負荷を評価し、負荷が 90%に達するとトリミング モードに入ります。 これは、負荷が85%の下に低下するまでトリミングモードを維持します。 条件が許可されると、GC は設定がアプリケーションに役立たないと判断し、無視することができます。

GC 設定を構成するには

  1. %windir%\Microsoft.NET\Framework\{version} ディレクトリに移動します。

  2. aspnet.config ファイルを開き、 <gcServer> 要素を見つけます。 要素が存在しない場合は、手順 3 を使用してエントリを作成します。

    ...

    <configuration> 
    <runtime> 
    <gcServer enabled="true"/> 
    </runtime> 
    </configuration>
    ...
    
  3. <runtime> セクション内に次の 3 つの要素を追加します。

    ...

    <configuration> 
    <runtime> 
    <gcServer enabled="false" />
    
    <gcConcurrent enabled="false" />
    <gcTrimCommitOnLowMemory enabled="true" />
    </runtime> 
    </configuration>
    ...
    
  4. ファイルを保存して閉じます。