Guida Microsoft Internet Information Server IIS
Guida Microsoft Internet Information Server IIS
Indice Guida Microsoft Internet Information Server IIS
- Introduzione e Storia di IIS
- Definizione e Concetti Fondamentali
- Architettura Modulare e Componentizzazione
- Estendibilità e API di Sviluppo
- Integrazione con ASP.NET
- Installazione di IIS
- Gestione e Configurazione
- Sviluppo di Moduli Personalizzati
- Pubblicazione di Applicazioni Web
- Application Request Routing (ARR)
- IIS Express per lo Sviluppo
- Conclusioni e Formazione Professionale
1. Introduzione e Storia di IIS
Microsoft Internet Information Services (IIS) rappresenta la soluzione enterprise di Microsoft per l’hosting di applicazioni web su piattaforme Windows Server. Nato inizialmente come Windows NT Option Pack negli anni ’90, IIS si è evoluto costantemente fino a diventare uno dei web server più utilizzati a livello mondiale, con una quota di mercato che si attesta intorno al 20% dei domini globali.
La versione attualmente in uso è IIS 10.0, rilasciata originariamente con Windows Server 2016 e confermata anche su Windows Server 2025. Questa versione mantiene la stabilità e le caratteristiche consolidate di IIS 10.0, che si è dimostrato un prodotto maturo e affidabile nel corso degli ultimi anni. Microsoft ha mantenuto questa versione poiché IIS 10.0 offre tutte le funzionalità necessarie per le esigenze moderne, incluso il supporto completo per HTTP/2, container Windows e integrazioni con .NET.
2. Definizione e Concetti Fondamentali
IIS è un server web flessibile, sicuro e gestibile per l’hosting di qualsiasi tipo di contenuto web, dalle applicazioni statiche ai servizi REST, dalle applicazioni ASP.NET ai servizi di streaming media. La definizione ufficiale Microsoft descrive IIS come “un server web per Windows che fornisce un’architettura scalabile e aperta, pronta a gestire i carichi di lavoro più impegnativi”.
L’architettura di IIS si basa su alcuni concetti chiave:
Application Pools: sono processi isolati (w3wp.exe) che eseguono le applicazioni web. Ogni pool fornisce isolamento di sicurezza e stabilità, permettendo a più applicazioni di coesistere sullo stesso server senza interferenze reciproche.
Sites e Applications: un sito rappresenta un’entità logica accessibile tramite binding (IP, porta, hostname), mentre un’applicazione è un contenitore logico all’interno di un sito con il proprio contesto di esecuzione.
HTTP.sys: driver kernel-mode che gestisce tutte le richieste HTTP, fornendo prestazioni elevate e routing efficiente verso i worker process appropriati.
Windows Process Activation Service (WAS): servizio che gestisce l’attivazione e la deattivazione automatica dei worker process, ottimizzando l’utilizzo delle risorse di sistema.
3. Architettura Modulare e Componentizzazione
Una delle innovazioni più significative introdotte da IIS 7.0 e mantenuta nelle versioni successive è l’architettura completamente modulare. A differenza delle versioni precedenti dove tutte le funzionalità erano integrate monoliticamente, IIS moderno è costruito come una pipeline di moduli intercambiabili.
La componentizzazione offre numerosi vantaggi strategici per gli sviluppatori e gli amministratori di sistema. Innanzitutto, consente di installare esclusivamente i moduli necessari, riducendo la superficie di attacco e migliorando le prestazioni complessive del server. Ogni modulo aggiunge una funzionalità specifica alla pipeline di elaborazione delle richieste.
I moduli sono organizzati gerarchicamente e possono essere abilitati o disabilitati a livello di server, sito o applicazione. La configurazione avviene tramite i file applicationHost.config (globale) e web.config (per applicazione), entrambi basati su XML e facilmente gestibili sia manualmente che tramite strumenti come IIS Manager o PowerShell.
Alcuni moduli fondamentali includono:
- StaticFileModule: gestisce il serving di contenuti statici
- AnonymousAuthenticationModule: implementa l’autenticazione anonima
- FormsAuthenticationModule: supporto per Forms Authentication
- UrlRewriteModule: riscrittura URL basata su regole
- CompressionModule: compressione dinamica e statica
Questa modularità si estende anche alla possibilità di creare moduli custom, sia nativi (C++) che managed (.NET), integrandoli perfettamente nella pipeline esistente.
4. Estendibilità e API di Sviluppo
L’estendibilità rappresenta uno dei pilastri dell’architettura IIS moderna. Microsoft fornisce due principali API di sviluppo per estendere le funzionalità del web server:
Native C++ API: Questa API sostituisce la legacy ISAPI e offre un modello orientato agli oggetti semplificato. I moduli nativi hanno accesso completo alla pipeline di richiesta e possono eseguire operazioni a livello kernel con prestazioni ottimali. L’API include interfacce come IHttpModule, IHttpContext e IHttpServer.
Esempio di registrazione modulo nativo:
HRESULT RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
return pModuleInfo->SetRequestNotifications(
new MyHttpModule(),
RQ_BEGIN_REQUEST | RQ_AUTHENTICATE_REQUEST,
0
);
}
Managed .NET API: Sfruttando l’integrazione profonda con ASP.NET, gli sviluppatori possono creare moduli usando il familiare framework .NET. I moduli managed implementano l’interfaccia IHttpModule e possono accedere a tutte le funzionalità .NET Framework.
Esempio di modulo managed:
public class CustomAuthModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest += OnAuthenticateRequest;
}
private void OnAuthenticateRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
// Logica di autenticazione personalizzata
}
public void Dispose() { }
}
La registrazione nel web.config avviene tramite:
<system.webServer>
<modules>
<add name="CustomAuth" type="MyNamespace.CustomAuthModule" />
</modules>
</system.webServer>
5. Integrazione con ASP.NET
L’integrazione tra IIS e ASP.NET rappresenta una delle caratteristiche distintive della piattaforma Microsoft. A partire da IIS 7.0, le due pipeline di elaborazione (IIS e ASP.NET) sono state unificate, creando un’architettura integrata che offre numerosi benefici.
Nella modalità Integrated Pipeline, i moduli ASP.NET possono elaborare qualsiasi tipo di richiesta, non solo quelle dirette a risorse .NET. Questo significa che funzionalità come Forms Authentication, URL Authorization e Session State possono essere applicate anche a contenuti statici, pagine PHP o qualsiasi altro tipo di risorsa.
L’integrazione elimina duplicazioni precedenti. Per esempio, autenticazione e autorizzazione non vengono più eseguite separatamente da IIS e ASP.NET, ma una sola volta nella pipeline unificata. La configurazione è anch’essa unificata: un singolo file web.config contiene sia le impostazioni IIS che quelle ASP.NET.
Per applicazioni ASP.NET Core, IIS utilizza il modulo ASP.NET Core Module (ANCM) che funge da reverse proxy verso il server Kestrel. Il flusso è il seguente:
- HTTP.sys riceve la richiesta sulla porta 80/443
- IIS la inoltra al modulo ANCM
- ANCM la proxya verso Kestrel su una porta randomica
- L’applicazione ASP.NET Core elabora la richiesta
- La risposta segue il percorso inverso
Configurazione web.config per ASP.NET Core:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*"
modules="AspNetCoreModuleV2" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
hostingModel="inprocess" />
</system.webServer>
</configuration>
6. Installazione di IIS
L’installazione di IIS su Windows Server 2025 avviene tramite Server Manager utilizzando il wizard “Add Roles and Features”. Il processo richiede la selezione del ruolo “Web Server (IIS)” e dei componenti specifici necessari.
I componenti essenziali da installare includono:
- Common HTTP Features: Static Content, Default Document, Directory Browsing
- Application Development: ASP.NET 4.8, .NET Extensibility, ISAPI Extensions
- Health and Diagnostics: HTTP Logging, Request Monitor
- Security: Request Filtering, Basic Authentication, Windows Authentication
- Performance: Static Content Compression, Dynamic Content Compression
Esempio di installazione tramite PowerShell:
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature -Name Web-Asp-Net45
Install-WindowsFeature -Name Web-Http-Logging
Install-WindowsFeature -Name Web-Request-Monitor
Install-WindowsFeature -Name Web-Filtering
Dopo l’installazione, IIS crea automaticamente un “Default Web Site” sulla porta 80, con la document root in C:\inetpub\wwwroot. È possibile verificare il corretto funzionamento navigando su http://localhost, dove dovrebbe apparire la pagina di benvenuto di IIS.
Per ambienti di produzione, è fondamentale configurare correttamente i permessi NTFS. L’identità predefinita dei pool applicativi (IIS_IUSRS) necessita di permessi di lettura sui file e cartelle dell’applicazione.
7. Gestione e Configurazione
La gestione di IIS può essere effettuata tramite diversi strumenti, ciascuno con vantaggi specifici:
IIS Manager: interfaccia grafica accessibile tramite inetmgr.exe che permette la configurazione visuale di tutti gli aspetti di IIS. Organizzato gerarchicamente, mostra server, siti, applicazioni e permette di configurare moduli, binding, SSL, application pools e molto altro.
PowerShell con IISAdministration Module: modulo PowerShell introdotto con IIS 10.0 che offre cmdlet semplificati e supporto completo per pipeline. Esempio di gestione pool applicativo:
Import-Module IISAdministration
# Creare un nuovo application pool
New-IISAppPool -Name "MyAppPool"
# Configurare il pool
$appPool = Get-IISAppPool -Name "MyAppPool"
$appPool.ManagedRuntimeVersion = "v4.0"
$appPool.ProcessModel.IdentityType = "ApplicationPoolIdentity"
$appPool.Recycling.PeriodicRestart.Time = "1.05:00:00"
# Creare un sito
New-IISSite -Name "MySite" -PhysicalPath "C:\inetpub\mysite" `
-BindingInformation "*:8080:"
AppCmd.exe: tool command-line tradizionale per operazioni avanzate:
appcmd list sites
appcmd add site /name:NewSite /physicalPath:C:\inetpub\newsite
appcmd set config "Default Web Site" /section:httpLogging /dontLog:true
La configurazione di IIS è archiviata in file XML:
- applicationHost.config: configurazione globale del server (in %windir%\System32\inetsrv\config)
- web.config: configurazione per applicazione, ereditabile gerarchicamente
8. Sviluppo di Moduli Personalizzati
Lo sviluppo di moduli custom permette di estendere IIS con funzionalità specifiche. Un modulo managed tipico implementa logica di business nella pipeline di richiesta.
Esempio completo di un modulo di logging personalizzato:
using System;
using System.Web;
using System.IO;
namespace CustomModules
{
public class RequestLoggerModule : IHttpModule
{
private static readonly object _lock = new object();
public void Init(HttpApplication context)
{
context.BeginRequest += OnBeginRequest;
context.EndRequest += OnEndRequest;
}
private void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext context = app.Context;
// Memorizza timestamp iniziale
context.Items["RequestStartTime"] = DateTime.Now;
}
private void OnEndRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext context = app.Context;
DateTime startTime = (DateTime)context.Items["RequestStartTime"];
TimeSpan duration = DateTime.Now - startTime;
string logEntry = string.Format(
"{0} | {1} | {2} | {3}ms | {4}\n",
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
context.Request.HttpMethod,
context.Request.RawUrl,
duration.TotalMilliseconds,
context.Response.StatusCode
);
string logPath = context.Server.MapPath("~/App_Data/requests.log");
lock (_lock)
{
File.AppendAllText(logPath, logEntry);
}
}
public void Dispose() { }
}
}
Per moduli nativi, l’esempio seguente mostra un filtro di sicurezza di base:
class SecurityHeaderModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS OnSendResponse(
IN IHttpContext * pHttpContext,
IN ISendResponseProvider * pProvider
)
{
IHttpResponse * pResponse = pHttpContext->GetResponse();
// Aggiunge header di sicurezza
pResponse->SetHeader("X-Frame-Options", "DENY", 4, TRUE);
pResponse->SetHeader("X-Content-Type-Options", "nosniff", 7, TRUE);
return RQ_NOTIFICATION_CONTINUE;
}
};
9. Pubblicazione di Applicazioni Web – Guida Microsoft Internet Information Server IIS
La pubblicazione di applicazioni su IIS segue un workflow standardizzato:
- Preparazione dei binari: compilazione dell’applicazione in modalità Release
- Configurazione del sito: creazione di sito e application pool dedicato
- Deploy dei file: copia dei binari nella cartella fisica del sito
- Configurazione web.config: impostazione connection strings, appSettings
- Permessi: verifica che l’identità del pool abbia accesso ai file necessari
Per applicazioni .NET, è possibile utilizzare Web Deploy (MSDeploy) che automatizza il processo:
# Pubblicazione da Visual Studio genera un pacchetto
.\MyApp.deploy.cmd /T
# Deploy effettivo
.\MyApp.deploy.cmd /Y
Per applicazioni ASP.NET Core è necessario installare il .NET Hosting Bundle sul server, che include il modulo ANCM e i runtime necessari. Il pool applicativo deve essere configurato con “No Managed Code” poiché l’applicazione gira out-of-process con Kestrel.
Configurazione SSL/TLS per HTTPS:
# Importare certificato
$cert = Import-PfxCertificate -FilePath "certificate.pfx" `
-CertStoreLocation Cert:\LocalMachine\My `
-Password (ConvertTo-SecureString -String "password" -AsPlainText -Force)
# Aggiungere binding HTTPS
New-IISSiteBinding -Name "MySite" -BindingInformation "*:443:" `
-Protocol https -CertificateThumbPrint $cert.Thumbprint
10. Application Request Routing (ARR)
Application Request Routing è un modulo IIS che trasforma il server in un reverse proxy e load balancer a livello applicativo. ARR prende decisioni di routing basandosi su header HTTP, variabili server e algoritmi di bilanciamento del carico.
Le funzionalità principali di ARR includono:
Load Balancing: distribuzione del carico tra più server backend utilizzando algoritmi come weighted round robin, least current request, least response time. ARR monitora lo stato di salute dei server tramite health checks.
Server Affinity: possibilità di affinitizzare le richieste di un client a un server specifico tramite cookie, garantendo session consistency in scenari stateful.
Disk Caching: ARR può cachare su disco il traffico HTTP, riducendo il carico sui server origin e migliorando i tempi di risposta per contenuti statici o semi-statici.
Host Name Affinity: feature specifica per hosting condiviso che ottimizza l’instradamento basato sul nome host.
Configurazione di base di una server farm:
# ARR richiede URL Rewrite Module
Install-WindowsFeature -Name Web-Arr
# Creazione server farm
New-WebAppPool -Name "ARRPool"
$farm = New-Object Microsoft.Web.Administration.Configuration
# Aggiunta server al farm tramite IIS Manager o config XML
Esempio di regola URL Rewrite per routing con ARR:
<rewrite>
<rules>
<rule name="ARR_ServerFarm_loadbalance"
patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<action type="Rewrite" url="http://ServerFarm/{R:0}" />
</rule>
</rules>
</rewrite>
ARR è particolarmente utile in scenari come deployment blue-green, gestione di canary releases, e implementazione di Content Delivery Networks (CDN) on-premise.
11. IIS Express per lo Sviluppo
IIS Express è una versione lightweight di IIS ottimizzata per sviluppatori. Include tutte le funzionalità core di IIS ma non richiede privilegi amministrativi per la maggior parte delle operazioni e non viene eseguito come servizio.
Le caratteristiche distintive di IIS Express includono:
- Portabilità: non richiede installazione come servizio di sistema
- Configurazione utente: applicationHost.config in %userprofile%\Documents\IISExpress\config
- Integrazione IDE: supporto nativo in Visual Studio 2010 SP1 e successive
- Stessa codebase di IIS: garantisce comportamento identico a IIS production
Utilizzo da command line:
cd "C:\Program Files\IIS Express"
iisexpress.exe /path:C:\MyApp /port:8080
Visual Studio configura automaticamente IIS Express quando si crea un progetto web. Nel file .csproj vengono definiti:
<PropertyGroup>
<UseIISExpress>true</UseIISExpress>
<IISExpressSSLPort>44300</IISExpressSSLPort>
<IISExpressAnonymousAuthentication>enabled</IISExpressAnonymousAuthentication>
</PropertyGroup>
IIS Express supporta le stesse estensioni di IIS production come URL Rewrite e FastCGI, permettendo di testare configurazioni complesse in ambiente di sviluppo prima del deploy.
Un vantaggio significativo è la possibilità per più sviluppatori di lavorare sulla stessa macchina con istanze IIS Express separate, evitando conflitti di configurazione. Ogni istanza è completamente isolata con il proprio processo e configurazione.
12. Conclusioni – Guida Microsoft Internet Information Server IIS
Microsoft Internet Information Services rappresenta una soluzione enterprise matura e affidabile per l’hosting di applicazioni web su piattaforma Windows. L’architettura modulare, le potenti API di estendibilità e l’integrazione profonda con ASP.NET lo rendono ideale per scenari che vanno dal semplice hosting di siti statici a complesse architetture distribuite.
Le caratteristiche chiave che emergono da questa analisi includono la componentizzazione che permette di costruire server su misura, l’estendibilità attraverso API native e managed che consente personalizzazioni illimitate, l’integrazione ASP.NET che unifica le pipeline di elaborazione, e strumenti come ARR e IIS Express che coprono scenari da produzione a sviluppo.
Per team IT aziendali che operano in ecosistemi Microsoft, la padronanza di IIS è essenziale per garantire performance, sicurezza e affidabilità delle applicazioni web mission-critical.
Investire nella Formazione: Corso Microsoft IIS per Team Aziendali
Nel panorama tecnologico odierno, caratterizzato da continua evoluzione e complessità crescente, la formazione tecnica continua del personale non è più un’opzione, ma una necessità strategica imprescindibile. Le aziende che investono nella crescita professionale dei propri team IT ottengono vantaggi competitivi significativi: capacità di adottare nuove tecnologie rapidamente, riduzione dei tempi di troubleshooting, implementazione di best practices consolidate e, soprattutto, la possibilità di acquisire e gestire progetti moderni e innovativi.
Innovaformazione.net offre corsi Microsoft IIS personalizzati specificamente per le esigenze aziendali. Il programma di formazione viene strutturato su misura, con calendario flessibile concordato direttamente con il cliente e modalità di erogazione in classe virtuale online, permettendo ai team di formarsi senza interruzioni operative significative.
Il corso Microsoft IIS di Innovaformazione.net è personalizzabile e può coprire:
- Architettura e componentizzazione di IIS
- Gestione avanzata di application pools e siti
- Sviluppo di moduli custom managed e nativi
- Configurazione di Application Request Routing
- Integrazione con ASP.NET e ASP.NET Core
- Implementazione di strategie di deployment
- Troubleshooting e performance tuning
- Sicurezza e hardening
La formazione viene erogata da professionisti consulenti Microsoft con esperienza reale in scenari enterprise, garantendo trasferimento di competenze immediatamente applicabili in contesti produttivi. I partecipanti ricevono materiali didattici completi, accesso a laboratori pratici e supporto post-corso.
Solo attraverso una formazione tecnica strutturata e continua, il vostro team IT potrà rimanere al passo con l’evoluzione tecnologica, padroneggiare gli strumenti Microsoft più avanzati e trasformare le sfide in opportunità di crescita per l’intera organizzazione.
Per informazioni dettagliate sul corso Microsoft IIS e richiedere un preventivo personalizzato:
📧 Email: info@innovaformazione.net
📞 Telefono: 3471012275 (Dario Carrassi)
🌐 Catalogo corsi completo al seguente LINK.
Investite oggi nella formazione del vostro team: è l’investimento più redditizio per il futuro tecnologico della vostra azienda.
Per altri articoli tecnici di settore consigliamo di navigare sul nostro blog QUI.
Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:
Articoli correlati
eBay: da venditore privato a professionale
Apache Cassandra vs Redis
Come usare Agent Skills
Guida LLM Evaluetion
Concetti di architettura per sviluppatori
