Introduzione con configurazione in IIS 7 e versioni successive

by Tobin Titus

Contenuto

Il sistema di configurazione in IIS 7 e versioni successive si basa su file XML distribuiti, clear-text e XML che contengono le impostazioni di configurazione per l'intera piattaforma server Web, tra cui IIS, ASP.NET e altri componenti e possono essere impostati facoltativamente nelle directory di contenuto insieme al contenuto Web. Diversi livelli della gerarchia di configurazione possono essere delegati dall'amministratore del computer ad altri utenti, ad esempio l'amministratore del sito o lo sviluppatore di applicazioni. Proteggere le impostazioni predefinite e il blocco out-of-box limitano l'accesso in scrittura alle impostazioni di configurazione solo all'amministratore del computer; Tuttavia, funzionalità di blocco sofisticate e granulari consentono di sbloccare e delegare la gestione di impostazioni di configurazione specifiche per più utenti, per l'ambito dello spazio dei nomi Web. Il sistema è compatibile con le versioni precedenti, a livello di API, con versioni precedenti di IIS e a livello XML, con le versioni precedenti di .NET Framework. Questo documento offre una panoramica generale del nuovo sistema di configurazione.

Introduzione

Il sistema di configurazione in IIS si basa su file XML distribuiti, clear-text, che contengono le impostazioni di configurazione per l'intera piattaforma server Web, inclusi IIS, ASP.NET e altri componenti e possono essere impostati facoltativamente nelle directory di contenuto insieme al contenuto Web. Diversi livelli della gerarchia di configurazione possono essere delegati dall'amministratore del computer ad altri utenti, ad esempio l'amministratore del sito o lo sviluppatore di applicazioni. Proteggere le impostazioni predefinite e il blocco out-of-box limitano l'accesso in scrittura alle impostazioni di configurazione solo all'amministratore del computer; Tuttavia, funzionalità di blocco sofisticate e granulari consentono di sbloccare e delegare la gestione di impostazioni di configurazione specifiche per più utenti, per l'ambito dello spazio dei nomi Web. Il sistema è compatibile con le versioni precedenti, a livello di API, con versioni precedenti di IIS e a livello XML, con le versioni precedenti di .NET Framework.

Il nuovo sistema di configurazione è progettato per essere:

  • Semplice: tutto lo stato è nei file; Non viene usato alcun archivio proprietario; Nessun database di configurazione in memoria che è il master reale dello stato di configurazione (a differenza del servizio IISADMIN in IIS 6.0); Lo schema è basato sui dati ed è dichiarativo e individuabile al 100%.

  • Low-TCO: la configurazione può essere copiata insieme al contenuto Web; L'amministrazione delegata facoltativa elimina il coinvolgimento dell'amministratore del computer in ogni modifica di configurazione; L'unificazione delle impostazioni di configurazione e del modello in IIS, ASP.NET e il resto della piattaforma server Web offre uno-stop-shop per la gestione del server usando lo stesso set di strumenti e API (ad esempio, web.config file possono contenere sia le impostazioni IIS che ASP.NET, ed è disponibile un'unica posizione per controllare le funzionalità, ad esempio l'autenticazione, l'autorizzazione, gli errori personalizzati); backup, ripristino, gestione della sicurezza (ACL) sono basati su strumenti e processi standard del file system.

  • Sicuro: quando IIS viene installato, lo stato di configurazione è in un file protetto solo per l'accesso all'amministratore del computer; Nessuna delega è abilitata per impostazione predefinita; Nessuna informazione sensibile (ad esempio password) viene archiviata per impostazione predefinita; Quando le informazioni riservate devono essere scritte nei file di configurazione, vengono crittografate automaticamente su disco; Per ogni configurazione dell'applicazione può essere incorporato e isolato in un file dedicato (protetto dall'ACL di file system) in modo che altre applicazioni non possano condividere né leggere le impostazioni.

  • Estendibile: l'aggiunta allo schema è semplicemente una questione di eliminazione di un file XML nella cartella schemi; Non è necessario chiamare API o eseguire strumenti per estendere lo schema; Le impostazioni sono organizzate in blocchi correlati logicamente denominati "sezioni" (esattamente come nella configurazione di .NET Framework) e l'aggiunta di nuove sezioni è semplice (non è necessario scrivere codice, a differenza della configurazione di .NET Framework); La lettura delle impostazioni della sezione personalizzata da un modulo server o un'applicazione è semplice e dritta.

  • Compatibile: le applicazioni IIS esistenti possono continuare a chiamare interfacce come Amministrazione Oggetti base (ABO), il provider IIS ADSI e il provider WMI IIS 6.0; Le applicazioni .NET Framework esistenti possono continuare a chiamare interfacce come System.Configuration e System.Web.Configuration; Gli utenti che hanno familiarità con il formato XML di machine.config e web.config continueranno a sperimentare lo stesso formato e sintassi in questi file, oltre a poter modificare manualmente le impostazioni IIS che seguono lo stesso formato e modello; Gli utenti che hanno familiarità con i nomi delle proprietà metabase IIS troveranno gli stessi nomi per le proprietà nei nuovi file di configurazione IIS 7.0 e versioni successive.

Schema pulito

Ecco un esempio che illustra lo schema per la configurazione.

Mostra come le impostazioni di autenticazione sono organizzate in IIS 6 e in IIS 7.0 e versioni successive.

Nota

I lettori che non hanno familiarità con i concetti di IIS 6.0 possono semplicemente ignorare il confronto con IIS 6.0 e leggere solo i concetti e i vantaggi di IIS 7.0 e versioni successive.

Verrà prima confrontato il modo in cui la configurazione viene mantenuta nel file e quindi si esaminerà la definizione dello schema.

Nel file di configurazione stesso:

//
// Snippet from IIS 6.0 Metabase.xml
//
<IIsWebService    Location ="/LM/W3SVC"
      ... many lines here ...
    AuthFlags="AuthAnonymous"
      ... many lines here ...
    >
</IIsWebService>
<IIsWebDirectory    Location ="/LM/W3SVC/1/ROOT/aspnet_webadmin/2_0_41016"
    AuthFlags="AuthAnonymous | AuthNTLM"
    >
</IIsWebDirectory>
<IIsWebVirtualDir    Location ="/LM/W3SVC/Info/Templates/Public Web Site/Root"
        AuthFlags="AuthAnonymous"
    >
</IIsWebVirtualDir>

//
// Snippet from IIS 7.0 applicationHost.config
//
<anonymousAuthentication enabled="true"  userName="…"  password="…" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<windowsAuthentication enabled="true" >
    <providers>
        <add value="Negotiate" />
        <add value="NTLM" />
    </providers>
</windowsAuthentication>

Chiavi di asporto:

  • IIS 6.0 usa un elenco di proprietà molto lungo e "flat". Non esiste alcuna gerarchia o raggruppamento di proprietà. È difficile cercare le impostazioni di configurazione tra centinaia di impostazioni nello stesso elenco. IIS 7.0 e versioni successive usa una gerarchia di sezioni e gruppi di sezioni e sottoelementi all'interno delle sezioni. È facile cercare le impostazioni di autenticazione, cercandole nel gruppo di sezioni di autenticazione o in una sezione di autenticazione specifica.
  • IIS 6.0 usa flag per impostare schemi di autenticazione. IIS 7.0 e versioni successive usa una sezione per schema di autenticazione, con enabled="true|false" in ogni. Le impostazioni aggiuntive rilevanti solo per alcuni schemi di autenticazione possono essere impostate solo nelle sezioni pertinenti( ad esempio, nome utente e password possono essere impostate solo per l'autenticazione anonima).
  • IIS 6.0 usa i percorsi all'interno del file Metabase per specificare il livello di configurazione (servizio, directory virtuale, directory fisica). La configurazione per l'intero server è in un file. IIS 7.0 e versioni successive usa un file per impostazione predefinita, ma gli utenti possono sfruttare i file web.config distribuiti nelle directory del contenuto, che specificano le impostazioni di configurazione per l'ambito.
  • IIS 6.0 usa nomi di proprietà lunghi in un tentativo di descrizione automatica delle impostazioni di configurazione. Si sta tentando di migliorare la leggibilità del file e aiutare l'utente a comprendere cosa fa la proprietà. IIS 7.0 e versioni successive usa nomi brevi, ma sono sempre nel contesto di una sezione specifica o anche di un elemento secondario con nella sezione.
  • IIS 6.0 usa più sz (elementi delimitati da virgole in una proprietà stringa) e flag per gestire più valori di elemento, ad esempio NTAuthenticationProviders. IIS 7.0 e versioni successive usa raccolte, con semplici sintassi add/remove/clear, esattamente come la configurazione di .NET Framework. Ciò consente a livelli inferiori della gerarchia di aggiungere (o rimuovere) solo l'elemento necessario, anziché duplicare l'intero dati con (o senza) l'elemento detto. Offre anche una maggiore leggibilità del file ,che si traduce in errori meno umani quando lo modifica direttamente.

Nel file dello schema:

//
// Snippet from IIS 6.0 MBSchema.xml
//
<Property InternalName="AuthFlags" ID="6000" Type="DWORD" UserType="IIS_MD_UT_FILE" Attributes="INHERIT" >
    <Flag   InternalName="AuthAnonymous"   Value="1"   ID="6218"   />
    <Flag   InternalName="AuthBasic"             Value="2"   ID="6219"  />
    <Flag   InternalName="AuthNTLM"            Value="4"   ID="6220"  />
    <Flag   InternalName="AuthMD5"              Value="16"  ID="6221"  />
    <Flag   InternalName="AuthPassport"        Value="64"  ID="6299"  />
</Property>

//
// Snippet from IIS 7.0 IIS_Schema.xml
//
<sectionSchema name="system.webServer/security/authentication/basicAuthentication">
  <attribute name="enabled" type="bool" defaultValue="false" />
  <attribute name="realm" type="string" />
  <attribute name="defaultLogonDomain" type="string" />
  <attribute name="logonMethod" type="enum" defaultValue="ClearText">
    <enum name="Interactive" value="0" />
    <enum name="Batch" value="1" />
    <enum name="Network" value="2" />
    <enum name="ClearText" value="3" />
  </attribute>
</sectionSchema>

Chiavi di asporto:

  • IIS 6.0 usa ID (numeri) per identificare le impostazioni. IIS 7.0 e versioni successive usa stringhe descrittive per assegnare un nome alle impostazioni.
  • IIS 6.0 usa concetti non intuitivi, ad esempio UserType e terminologia, ad esempio InternalName. IIS 7.0 e versioni successive usa nomi descrittivi che hanno senso per i lettori umani e non solo le applicazioni.

Gerarchia file di configurazione

Lo stato "master" per la configurazione è sempre i file di configurazione (a differenza di IIS 6.0, dove era il database di configurazione in memoria, che è stato scaricato periodicamente sul disco).

A livello radice (o globale) sono presenti due file separati:

  • system32\inetsrv\config\applicationHost.config: contiene le impostazioni predefinite globali per le impostazioni del server Web (IIS).
  • \windows\microsoft.net\framework\v2.0.50727\config\machine.config: contiene le impostazioni predefinite globali per le impostazioni di .NET Framework, incluse alcune delle ASP.NET (le altre sono presenti nella web.config nella stessa cartella, a volte denominata radice web.config)

Il motivo per cui sono ancora presenti due file separati è dovuto al fatto che le due tecnologie sono in modo diverso (a livello di pianificazione e a livello di prodotto). IIS fa parte di Windows e .NET Framework può essere versione indipendentemente, come parte delle versioni di Visual Studio.

Nelle directory di contenuto Web possono essere presenti file facoltativi web.config che controllano il comportamento per il relativo livello della gerarchia e verso il basso. Potrebbero essere locali o remoti (se la directory del contenuto è in una condivisione UNC, ad esempio). Possono contenere IIS, ASP.NET o qualsiasi altra impostazione di configurazione di .NET Framework che può essere specificata a livello di. Per impostazione predefinita, non sono presenti file web.config.

In termini di gerarchia di ereditarietà, il file radice è machine.config, quindi web.config nella stessa directory (denominata radice web.config), quindi applicationHost.config, quindi i file facoltativi web.config lungo lo spazio dei nomi.

La configurazione include file

In alcuni casi è utile avere il file di web.config includere alcuni altri file di .config. Questa operazione può essere eseguita usando l'attributo configSource. Attualmente è limitato a puntare ai percorsi fisici relativi nelle sotto directory, per motivi di sicurezza (ad esempio, il file A può includere solo file B se B è in sottodirectory fisica di A). Ecco un esempio di base che illustra come usare configSource:

<!-- in inetsrv\applicationHost.config -->
<configuration>
  <system.webServer>
  
    <!-- mimemaps moved by the customer to a different file -->
    <!-- so that this file is shorter and more readable -->
    <staticContent configSource="staticContent.config"/>
  
    <!-- the rest of system.webServer sections are here… -->
  </system.webServer>
</configuration>
  
<!-- in inetsrv\staticContent.config -->
<configuration>
  <system.webServer>
    <staticContent>
      <!-- all the mimemap definitions are here -->
      <mimeMap ….. />
      <mimeMap ….. />
      <mimeMap ….. />
    </staticContent>
  </system.webServer>
</configuration>

In questo esempio, il cliente voleva spostare il contenuto della sezione staticContent in un file separato, per avere un file più breve, più leggibile, applicationHost.config.

Si noti che quando le impostazioni di configurazione cambiano in un file .config, il server rileverà automaticamente le modifiche e li agisce. Il cliente non deve preoccuparsi del riciclo di applicazioni o pool di applicazioni o dell'intero server ( il server stesso può riciclare i pool di applicazioni, ad esempio, a seconda delle impostazioni di configurazione modificate).

Organizzazione delle impostazioni

All'interno di un file di configurazione (ad esempio per un determinato livello della gerarchia), le impostazioni sono organizzate in modo strutturato e non come elenco flat. L'unità di base della distribuzione, della registrazione e dell'estendibilità è la sezione di configurazione. Una sezione è contenuta all'interno di un gruppo di sezioni, che può a sua volta essere contenuta in un gruppo di sezioni padre. Le sezioni stesse non sono annidate. I gruppi di sezioni sono.

Ecco un esempio di applicationHost.config:

<!-- section group for web server configuration -->
<system.webServer>
  
  <!-- section group for web server security configuration -->
  <security>
    <!-- section group for web server authentication configuration -->
    <authentication>
  
      <!-- three sections for authentication -->
  
      <basicAuthentcation ... />
      <windowsAutnentication ... />
      <anonymousAuthentication ... />
    </authentication>
  </security>
</system.webServer>

Le impostazioni di configurazione appartengono sempre a una sezione specifica.

I gruppi di sezioni esistono solo per una migliore strutturazione; non hanno impostazioni direttamente in esse, solo sezioni.

All'interno di una sezione, la struttura è la seguente:

  • Elemento di configurazione: contiene impostazioni di configurazione e potenzialmente altri elementi di configurazione. Rappresentato come elemento XML. Le sezioni sono anche elementi.
  • Raccolta di configurazione: un caso privato dell'elemento di configurazione, che contiene un elenco di elementi di configurazione, sotto forma di add/remove/clear (denominate direttive di raccolta). Rappresentato come elemento XML con <add>, <remove>, <clear> sub-elements.
  • Proprietà di configurazione: si tratta di un'impostazione di configurazione [foglia]. Rappresentato come attributo XML.

Ecco un esempio di applicationHost.config:

<!-- "windowsAuthentcation" is a section which is an element -->
<!-- "enabled" is a property -->
<windowsAuthentication enabled="true">
  
  <!-- "providers" is a collection which is an element -->
  <providers>
  
    <!-- the collection contains two elements -->
    <!-- "add" is the collection directive; "value" is the property -->
    <add value="Negotiate"/>
    <add value=""NTLM/>
  </providers>
</windowsAuthentication>

Per impostazione predefinita, applicationHost.config contiene due gruppi di sezioni principali: system.applicationHost e system.webServer. Contiene anche una sezione denominata <configSections>, che è in qualche modo speciale in quanto viene usata internamente dal sistema di configurazione per registrare tutte le altre sezioni.

Per impostazione predefinita, machine.config contiene diversi gruppi di sezioni. Le impostazioni di ASP.NET si trovano nel gruppo di sezioni system.web.

Tag percorso e file di configurazione

In molti casi è consigliabile evitare web.config file nelle directory di contenuto, ma hanno comunque una configurazione per URL che esegue l'override delle impostazioni predefinite globali. Ad esempio, l'amministratore vuole specificare che un sito specifico deve usare uno schema di autenticazione e gli amministratori del sito (e gli sviluppatori di applicazioni in tale sito) non devono essere in grado di disattivarlo.

Il modo più semplice per ottenere questo risultato consiste nell'usare i tag di posizione. Si tratta di un meccanismo per specificare la configurazione per un percorso specifico, senza avere un web.config nella cartella mappata al percorso virtuale.

In questo esempio viene illustrato come viene usato un tag di posizione all'interno di applicationHost.config:

<!-- the following will take effect on MyAdminSite -->
<location path="MyAdminSite">
  <system.webServer>
    <security>
      <authentication>
        <basicAuthentication enabled="false"/>
        <windowsAuthentication enabled="true"/>
        <anonymousAuthentication enabled="false"/>
      </authentication>
    </security>
  </system.webServer>
</location>

I tag di posizione possono essere usati per specificare la configurazione per il livello globale (path="."), per un sito o per un percorso specifico all'interno di un sito. In un file possono essere presenti più tag di percorso. I tag di posizione possono trovarsi in qualsiasi file di .config, non solo applicationHost.config o machine.config.

I tag di posizione possono essere usati anche per bloccare e sbloccare le sezioni. Per altre informazioni, vedere il lab di blocco della configurazione.

In alcuni casi, non esiste alcuna alternativa all'uso dei tag di posizione:

  • Due o più percorsi virtuali mappati alla stessa cartella fisica. Ovviamente, se i due percorsi virtuali hanno una configurazione diversa, non può essere specificato in un file di web.config perché è condiviso.
  • Configurazione specifica del file. Non esiste alcun file web.config per i file; solo per l'intera cartella.

Riepilogo

Questo documento ha fornito una panoramica iniziale, generale e generale del sistema di configurazione in IIS 7.0 e versioni successive. Ha evidenziato il formato dello schema più pulito; la natura distribuita del sistema di configurazione e il modo in cui consente la delega delle impostazioni di configurazione al proprietario del sito o allo sviluppatore di applicazioni; l'organizzazione strutturata delle impostazioni nei file di configurazione; e l'integrazione tra IIS e ASP.NET sistemi di configurazione.

Per altre informazioni, è consigliabile esaminare il resto dei documenti di configurazione e, in particolare, il documento Configurazioni intrinseche, che fornisce informazioni più di basso livello sul sistema, tra cui la progettazione e l'architettura.