Elaborare le impostazioni del modello per un processo del pool <di applicazioniModel>
Panoramica
Usando l'elemento <processModel>
, è possibile configurare molte delle funzionalità di sicurezza, prestazioni, integrità e affidabilità dei pool di applicazioni in IIS 7 e versioni successive. Queste includono le funzionalità seguenti:
- Identità del pool di applicazioni, ovvero il nome del servizio o dell'account utente in cui viene eseguito il processo di lavoro del pool di applicazioni. Questo valore viene definito dall'attributo identityType . Per impostazione predefinita, a partire da IIS 7.5 un pool di applicazioni viene eseguito con l'account ApplicationPoolIdentity predefinito, creato dinamicamente dal servizio di attivazione dei processi di Windows (WAS). In IIS 7.0 l'identità predefinita è l'account NetworkService . È possibile modificare il valore dell'attributo identityType impostando l'account NetworkService predefinito, l'account LocalService , l'account LocalSystem predefinito o un account personalizzato creato. Se si sceglie un account personalizzato, definire le credenziali dell'account usando gli attributi userName e password . Tenere presente, tuttavia, che gli account NetworkService, LocalService e LocalSystem hanno più diritti utente rispetto all'account ApplicationPoolIdentity . Avviso: si tratta di un grave rischio per la sicurezza per l'esecuzione di un pool di applicazioni usando diritti utente di alto livello. È anche possibile usare l'attributo logonType per specificare se l'identità del processo deve accedere come utente o servizio batch. Per altre informazioni sui tipi di accesso, vedere l'articolo Relativo alla funzione LogonUser .
- Web gardening e uso dell'hardware NUMA (Non-Uniform Memory Access), che è possibile configurare impostando l'attributo maxProcesses . Per il giardinaggio Web, vedere maxProcesses su un valore maggiore di uno. Per l'uso dell'hardware NUMA, impostare maxProcesses su un valore pari a "0" per specificare che IIS esegue lo stesso numero di processi di lavoro in cui sono presenti nodi NUMA.
- Impostazioni di timeout di inattività che consentono di impostare per quanto tempo un processo di lavoro rimane inattivo prima dell'arresto. Modificare l'attributo idleTimeout per configurare questa impostazione.
- Monitoraggio dell'integrità abilitando i ping sul processo di lavoro, il tempo massimo consentito a un processo di lavoro per rispondere a un ping e la frequenza di ping inviati a un processo di lavoro per monitorarne l'integrità. Modificare gli attributi pingingEnabled, pingInterval e pingResponseTime per configurare queste impostazioni.
- Limiti di tempo di arresto e avvio del processo di lavoro. Il primo limite viene impostato dall'attributo shutdownTimeLimit e determina l'intervallo che IIS 7 e versioni successive assegna a un processo di lavoro di completare tutte le richieste prima che il servizio WWW termini il processo di lavoro. Il secondo limite viene impostato dall'attributo startupTimeLimit e specifica la quantità di tempo in cui IIS 7 e versioni successive consente l'avvio di un pool di applicazioni.
Compatibilità
Versione | Note |
---|---|
IIS 10.0 | L'elemento <processModel> non è stato modificato in IIS 10.0. |
IIS 8,5 | L'attributo idleTimeoutAction è stato aggiunto consentendo a un processo di lavoro inattivo per la durata dell'attributo idleTimeout di essere terminato o sospeso, non solo terminato. |
IIS 8,0 | L'attributo setProfileEnvironment è stato aggiunto consentendo di impostare l'ambiente in base al profilo utente per un nuovo processo. Sono stati aggiunti valori per l'attributo, incluso il maxProcesses supporto per L'accesso alla memoria non uniforme (NUMA). L'attributo logEventOnProcessModel è stato aggiunto per specificare l'azione eseguita nel processo viene registrata. |
IIS 7,5 | L'elemento <processModel> dell'elemento <add> è stato aggiornato in IIS 7.5 per includere le impostazioni che consentono di eseguire applicazioni usando il nuovo ApplicationPoolIdentity e di specificare il tipo di accesso per l'identità del processo. |
IIS 7.0 | L'elemento <processModel> è stato introdotto in IIS 7.0. |
IIS 6.0 | L'elemento <processModel> sostituisce alcune delle impostazioni nell'oggetto metabase IIS 6.0 IIsApplicationPools . |
Configurazione
La <applicationPools>
raccolta è inclusa nell'installazione predefinita di IIS 7 e versioni successive.
Procedure
Come modificare le impostazioni di configurazione del modello di processo
Aprire Gestione Internet Information Services (IIS):
Se si usano Windows Server 2012 o Windows Server 2012 R2:
- Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
Se si usano Windows 8 o Windows 8.1:
- Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
- Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
Se si usa Windows Server 2008 o Windows Server 2008 R2:
- Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
Se si usa Windows Vista o Windows 7:
- Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
- Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
Nel riquadro Connessioni espandere il nome del server, fare clic su Pool di applicazioni e fare clic sul pool di applicazioni che si desidera modificare.
Nel riquadro Azioni fare clic su Impostazioni avanzate...
Nella finestra di dialogo Impostazioni avanzate fare clic sulla proprietà del modello di processo che si desidera modificare, quindi modificarla nella sezione valore proprietà della finestra di dialogo, quindi fare clic su OK. Ad esempio, modificare il limite di tempo di arresto (secondi) e i limiti di tempo di avvio (secondi) su 30.
Come configurare IIS per l'uso con hardware NUMA (Non-Uniform Memory Access)
Aprire Gestione Internet Information Services (IIS):
Se si usa Windows Server 2012 o versione successiva:
- Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
Se si usano Windows 8 o versioni successive:
- Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
- Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
Nel riquadro Connessioni espandere il nome del server e quindi fare clic su Pool di applicazioni.
Nel riquadro Pool di applicazioni selezionare il pool da configurare per NUMA.
Nel riquadro Azioni selezionare Impostazioni avanzate.
Nel riquadro Modello di processo impostare Numero massimo processi di lavoro su
0
.
Come configurare l'azione di timeout di inattività
Aprire Gestione Internet Information Services (IIS):
Se si usa Windows Server 2012 R2:
- Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
Se si usa Windows 8.1:
- Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
- Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
Nel riquadro Connessioni fare doppio clic sul nome del server, fare doppio clic su Pool di applicazioni e quindi selezionare il pool di applicazioni da configurare.
Nel riquadro Azioni fare clic su Impostazioni avanzate.
Nella sezione Modello di elaborazione della finestra di dialogo Impostazioni avanzate , per idleTimeoutAction, selezionare Termina o Sospendi.
Fare clic su OK.
Configurazione
L'elemento viene <processModel>
configurato a livello di server nel file ApplicationHost.config.
Attributi
Attributo | Descrizione | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
identityType |
Attributo di enumerazione facoltativo. Specifica l'identità dell'account in cui viene eseguito il pool di applicazioni. Nota: A partire da IIS 7.5 il valore predefinito è ApplicationPoolIdentity. (In IIS 7.0 il valore predefinito è . NetworkService )L'attributo identityType può essere uno dei valori possibili seguenti; il valore predefinito è NetworkService .
|
||||||||||||
idleTimeout |
Attributo timeSpan facoltativo. Specifica per quanto tempo (in minuti) un processo di lavoro deve essere eseguito inattiva se non vengono ricevute nuove richieste e il processo di lavoro non elabora le richieste. Una volta trascorso il tempo allocato, il processo di lavoro deve richiedere che venga arrestato dal servizio WWW. Il valore predefinito è 00:20:00 . Per disabilitare la funzionalità di timeout di inattività, impostare questo valore su 00:00:00 . |
||||||||||||
idleTimeoutAction |
Attributo di enumerazione facoltativo. Specifica l'azione da eseguire quando è stata raggiunta la durata del timeout di inattività. Prima di IIS 8.5, un processo di lavoro inattivo per la durata dell'attributo idleTimeout verrebbe terminato. Dopo IIS 8.5, è possibile scegliere di terminare un processo di lavoro che raggiunge il idleTimeout limite o di sospenderlo spostandolo dalla memoria al disco. La sospensione di un processo richiederà probabilmente meno tempo e utilizzerà meno memoria del termine.È possibile configurare un'azione di timeout di inattività di sospensione con la richiesta fittizia di inizializzazione dell'applicazione (vedere applicationInitialization .L'attributo idleTimeoutAction può avere i valori possibili seguenti. Il valore predefinito è Terminate .
|
||||||||||||
loadUserProfile |
Attributo booleano facoltativo. Specifica se IIS carica il profilo utente per l'identità del pool di applicazioni. Se si imposta questo valore su false , IIS viene ripristinato il comportamento di IIS 6.0. IIS 6.0 non carica il profilo utente per un'identità del pool di applicazioni. Il valore predefinito è false . |
||||||||||||
logEventOnProcessModel |
Attributo flag facoltativo. Specifica quale azione eseguita nel processo viene registrata nel Visualizzatore eventi. In IIS 8.0 l'unica azione che si applica è l'azione di timeout di inattività, in cui il processo viene terminato perché era inattivo per il periodo di inattivitàTimeout. Il nome del flag è uguale a IdleTimeout . Il valore è 1 .Il valore predefinito è IdleTimeout . |
||||||||||||
logonType |
Attributo di enumerazione facoltativo. Specifica il tipo di accesso per l'identità del processo. Per altre informazioni sui tipi di accesso, vedere l'articolo Relativo alla funzione LogonUser . Nota: Questo attributo è stato introdotto in IIS 7.5. L'attributo logonType può essere uno dei valori possibili seguenti. Il valore predefinito è LogonBatch .
|
||||||||||||
manualGroupMembership |
Attributo booleano facoltativo. Specifica se il SID (Group Security Identifier) di IIS_IUSRS viene aggiunto al token del processo di lavoro. Se false, IIS usa automaticamente un'identità del pool di applicazioni come se fosse un membro del gruppo di IIS_IUSRS predefinito, che ha accesso alle risorse di file e di sistema necessarie. Se true, un'identità del pool di applicazioni deve essere aggiunta in modo esplicito a tutte le risorse richieste da un processo di lavoro in fase di esecuzione. Il valore predefinito è false . |
||||||||||||
maxProcesses |
Attributo uint facoltativo. Indica il numero massimo di processi di lavoro che verranno usati per il pool di applicazioni.
1 . |
||||||||||||
password |
Attributo stringa facoltativo. Specifica la password associata all'attributo userName . Questo attributo è necessario solo quando il valore di identityType è SpecificUser. Nota: Per evitare di archiviare stringhe password non crittografate nei file di configurazione, usare sempre AppCmd.exe o Gestione IIS per immettere le password. Se si usano questi strumenti di gestione, le stringhe password verranno crittografate automaticamente prima che vengano scritte nei file di configurazione XML. Ciò garantisce una migliore sicurezza delle password rispetto all'archiviazione di password non crittografate. |
||||||||||||
pingingEnabled |
Attributo booleano facoltativo. Specifica se il ping è abilitato per il processo di lavoro. Il valore predefinito è true . |
||||||||||||
pingInterval |
Attributo timeSpan facoltativo. Specifica il tempo tra i ping di monitoraggio dell'integrità inviati dal servizio WWW a un processo di lavoro. Il valore predefinito è 00:00:30 (30 secondi). |
||||||||||||
pingResponseTime |
Attributo timeSpan facoltativo. Specifica il momento in cui viene assegnato un processo di lavoro per rispondere a un ping di monitoraggio dell'integrità. Dopo il superamento del limite di tempo, il servizio WWW termina il processo di lavoro. Il valore predefinito è 00:01:30 (1 minuto 30 secondi). |
||||||||||||
requestQueueDelegatorIdentity |
Attributo String facoltativo. Specifica l'identità dell'account che dispone dell'autorizzazione per delegare le richieste HTTP al pool di applicazioni. Nota: questo attributo non è disponibile nell'interfaccia utente di Gestione Internet Information Services (IIS). |
||||||||||||
setProfileEnvironment |
Attributo booleano facoltativo. Quando setProfileEnvironment è impostato su True , WAS crea un blocco di ambiente da passare a CreateProcessAsUser durante la creazione di un processo di lavoro. Ciò garantisce che l'ambiente sia impostato in base al profilo utente per il nuovo processo.Il valore predefinito è True . |
||||||||||||
shutdownTimeLimit |
Attributo timeSpan facoltativo. Specifica il tempo di attesa del servizio W3SVC dopo l'avvio di un riciclo. Se il processo di lavoro non viene arrestato all'interno dell'oggetto shutdownTimeLimit, verrà terminato dal servizio W3SVC. Il valore predefinito è 00:01:30 (1 minuto 30 secondi). |
||||||||||||
startupTimeLimit |
Attributo timeSpan facoltativo. Specifica l'ora in cui IIS attende l'avvio di un pool di applicazioni. Se il pool di applicazioni non viene avviato all'interno dell'avvioTimeLimit, il processo di lavoro viene terminato e il numero di protezione a errori rapidi viene incrementato. Il valore predefinito è 00:01:30 (1 minuto 30 secondi). |
||||||||||||
userName |
Attributo stringa facoltativo. Specifica l'identità in cui viene eseguito il pool di applicazioni quando identityType è SpecificUser. |
Elementi figlio
Nessuno.
Esempio di configurazione
L'esempio di configurazione seguente usa l'elemento del pool <add>
di applicazioni per creare un nuovo pool di applicazioni denominato Contoso. L'elemento <recycling>
configura la registrazione per i riavvii del pool di applicazioni, l'elemento <periodicRestart>
configura quando il pool di applicazioni viene riavviato e l'elemento <processModel>
configura gli attributi shutdownTimeLimit e startupTimeLimit per arrestare e avviare i processi di lavoro nel pool di applicazioni per 30 secondi. Se questi limiti di tempo vengono superati, IIS termina il processo di lavoro.
<add name="Contoso">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
Codice di esempio
Gli esempi seguenti modificano i valori delle proprietà processModel.shutdownTimeLimit e processModule.startupTimeLimit su 30 secondi per un pool di applicazioni denominato Contoso.
AppCmd.exe
appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30
appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30
È anche possibile usare la sintassi seguente:
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.shutdownTimeLimit:"00:00:30" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.startupTimeLimit:"00:00:30" /commit:apphost
Nota
È necessario assicurarsi di impostare il parametro commit su apphost
quando si usa AppCmd.exe per configurare queste impostazioni. Questa operazione esegue il commit delle impostazioni di configurazione nella sezione percorso appropriata nel file di ApplicationHost.config.
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
ConfigurationElement addElement = FindElement(applicationPoolsCollection, "add", "name", @"Contoso");
if (addElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement processModelElement = addElement.GetChildElement("processModel");
processModelElement["shutdownTimeLimit"] = TimeSpan.Parse("00:00:30");
processModelElement["startupTimeLimit"] = TimeSpan.Parse("00:00:30");
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
Dim addElement As ConfigurationElement = FindElement(applicationPoolsCollection, "add", "name", "Contoso")
If (addElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim processModelElement As ConfigurationElement = addElement.GetChildElement("processModel")
processModelElement("shutdownTimeLimit") = TimeSpan.Parse("00:00:30")
processModelElement("startupTimeLimit") = TimeSpan.Parse("00:00:30")
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;
var addElementPos = FindElement(applicationPoolsCollection, "add", ["name", "Contoso"]);
if (addElementPos == -1) throw "Element not found!";
var addElement = applicationPoolsCollection.Item(addElementPos);
var processModelElement = addElement.ChildElements.Item("processModel");
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30";
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30";
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
addElementPos = FindElement(applicationPoolsCollection, "add", Array("name", "Contoso"))
If siteElementPos = -1 Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set addElement = applicationPoolsCollection.Item(addElementPos)
Set processModelElement = addElement.ChildElements.Item("processModel")
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30"
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30"
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(valuesToMatch(iVal + 1)) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function