INTERNET INFORMATION SERVICES (IIS): GUIA COMPLETA
Document tècnic per a CFGS ASIR/DAW
Índex de Continguts
- Història i Evolució d'IIS
- Arquitectura i Conceptes Fonamentals
- Application Pools i Gestió de Processos
- Instal·lació i Configuració Inicial
- Sites i Aplicacions Web
- Mòduls i Extensions d'IIS
- Seguretat en IIS
- URL Rewrite i Application Request Routing
- Optimització i Millors Pràctiques
- Casos Pràctics i Configuracions Avançades
- Referències
1. Història i Evolució d'IIS
1.1 Els Orígens: IIS 1.0 i Windows NT (1995-1996)
Internet Information Services va néixer en un moment crucial de la història de la web. El 1995, quan Microsoft va llançar Windows NT 3.51, la World Wide Web estava experimentant un creixement explosiu i les empreses començaven a reconèixer el potencial d'Internet per als negocis. Microsoft, que havia estat relativament absent del món d'Internet durant els primers anys, va decidir entrar amb força al mercat dels servidors web[^1].
El 20 de maig de 1995, Microsoft va llançar IIS 1.0 com a part del Windows NT 3.51 Resource Kit[^2]. A diferència d'altres servidors web de l'època que es vendien com a productes separats, IIS estava dissenyat per integrar-se completament amb el sistema operatiu Windows. Aquest enfocament d'integració profunda seria una característica definitòria d'IIS al llarg de tota la seva història[^3].
IIS 1.0 era relativament simple comparant-lo amb versions posteriors, però ja oferia les funcionalitats bàsiques necessàries[^4]:
- Servidor web HTTP per servir pàgines HTML
- Servidor FTP per transferència de fitxers
- Servidor Gopher (un protocol popular abans de l'auge del web)
- Integració amb els serveis de seguretat de Windows NT
La Filosofia Inicial de Microsoft:
Microsoft va concebre IIS amb una filosofia diferent dels seus competidors, especialment Apache, que era el servidor dominant de l'època. Mentre que Apache apostava per ser multiplataforma, modular i de codi obert, Microsoft va optar per[^5]:
- Integració profunda amb Windows: IIS estava dissenyat específicament per aprofitar les característiques de Windows NT
- Facilitat d'ús: Interfície gràfica intuïtiva (rara en servidors web de l'època)
- Model comercial: IIS era gratuït amb Windows Server, però requeria llicències de Windows
- Suport professional: Backed per l'estructura de suport de Microsoft
1.2 Creixement i Maduració (1996-2003)
IIS 2.0 (Windows NT 4.0, 1996)
IIS 2.0, llançat amb Windows NT 4.0 el desembre de 1996, va representar una millora significativa[^6]. Microsoft va afegir:
- Millor rendiment i estabilitat
- Internet Service Manager, una eina gràfica millorada per administrar el servidor
- Suport per a múltiples sites web en un sol servidor (virtual hosts)
IIS 3.0 (Windows NT 4.0 Option Pack, 1997)
IIS 3.0 va introduir una de les tecnologies més significatives en la història d'IIS: Active Server Pages (ASP)[^7]. ASP era un framework de scripting del costat del servidor que permetia crear pàgines web dinàmiques. Aquesta tecnologia va ser revolucionària perquè:
- Permetia integrar codi (VBScript o JScript) directament en les pàgines HTML
- Facilitava l'accés a bases de dades i altres recursos del servidor
- Competia directament amb tecnologies com PHP i Perl/CGI
- Establia les bases per al que més tard seria ASP.NET
<%@ Language=VBScript %>
<html>
<body>
<%
Response.Write("Hola, món! Hora actual: " & Now())
%>
</body>
</html>
IIS 4.0 (Windows NT 4.0 Option Pack, 1997)
IIS 4.0, també llançat el 1997 com a "Option Pack" separat, va eliminar el suport per al protocol Gopher (que estava quedant obsolet) i va introduir millores importants en administració i rendiment[^8]. Una característica notable va ser la introducció de Microsoft Management Console (MMC), que proporcionava una interfície unificada per administrar diversos serveis de Windows.
IIS 5.0 (Windows 2000, 2000)
Amb Windows 2000, IIS 5.0 va portar millores substancials en fiabilitat i facilitat d'ús[^9]:
- Application Protection: Possibilitat d'executar aplicacions en processos aïllats per millorar l'estabilitat
- Restart automàtic: Si una aplicació fallava, IIS podia reiniciar-la automàticament
- HTTP Compression: Compressió de contingut per reduir l'ample de banda
- WebDAV: Protocol per editar i gestionar fitxers en servidors web remots
IIS 5.1 (Windows XP Professional, 2001)
IIS 5.1 va ser una versió limitada inclosa amb Windows XP Professional, dissenyada principalment per a desenvolupament i proves. Estava limitada a 10 connexions simultànies i només un site web[^10].
IIS 6.0 (Windows Server 2003, 2003)
IIS 6.0 va representar un salt qualitatiu enorme en termes d'arquitectura, seguretat i rendiment[^11]. Aquesta versió va introduir canvis fonamentals que van redefinir com funcionava IIS:
1. Nova Arquitectura de Processos:
La introducció del kernel-mode driver (HTTP.sys) va ser revolucionària[^12]. Anteriorment, tota la comunicació HTTP passava per processos en mode usuari, cosa que afegeix overhead. Amb HTTP.sys:
- Les peticions HTTP es gestionen directament en el kernel de Windows
- Millor rendiment i escalabilitat
- Major protecció contra atacs de denegació de servei (DoS)
- Caching de kernel per a contingut estàtic
2. Application Pools:
IIS 6.0 va introduir el concepte d'Application Pools (agrupacions d'aplicacions), una de les innovacions més importants en la història d'IIS[^13]:
- Cada Application Pool s'executa en el seu propi procés worker (w3wp.exe)
- Aïllament complet entre aplicacions
- Si una aplicació falla, no afecta altres aplicacions
- Capacitat de reciclar aplicacions sense afectar altres sites
3. Seguretat Per Defecte:
Després dels problemes de seguretat que van afectar IIS 4.0 i 5.0 (especialment els worms Code Red i Nimda el 2001), Microsoft va adoptar una filosofia de "secure by default"[^14]:
- IIS 6.0 s'instal·lava en un estat mínim i bloquejat
- Per defecte, només servia contingut estàtic HTML
- Les característiques com ASP havien de ser habilitades explícitament
- Reducció dràstica de la superfície d'atac
4. Altres Millores:
- Suport IPv6: IIS 6.0 va ser un dels primers servidors web majors a suportar IPv6[^15]
- Health Monitoring: Monitoratge automàtic de la salut d'aplicacions
- Rapid-Fail Protection: Desactivació automàtica d'aplicacions problemàtiques
- XML Metabase: La configuració es guardava en format XML en lloc del Registry
1.3 La Revolució Modular: IIS 7.x (2007-2009)
IIS 7.0 (Windows Server 2008 / Windows Vista, 2008)
IIS 7.0, llançat amb Windows Server 2008 i Windows Vista, va representar possiblement la rearquitectura més radical d'IIS des dels seus inicis[^16]. Microsoft va redissenyar IIS des de zero amb una arquitectura completament modular.
Arquitectura Modular:
A diferència de les versions anteriors on IIS era monolític, IIS 7.0 va dividir tota la funcionalitat en més de 40 mòduls independents[^17]:
- Mòduls Natius (C++): Per màxim rendiment (com autenticació, compressió, logging)
- Mòduls Gestionats (.NET): Per màxima flexibilitat i facilitat de desenvolupament
- Personalització: Els administradors poden carregar només els mòduls necessaris
Exemples de mòduls:
- StaticFileModule: Servir fitxers estàtics
- BasicAuthenticationModule: Autenticació bàsica
- WindowsAuthenticationModule: Autenticació Windows
- UrlAuthorizationModule: Autorització basada en URL
- RequestFilteringModule: Filtrat de peticions
- HttpCacheModule: Caching HTTP
Pipeline de Peticions Integrada:
IIS 7.0 va introduir un integrated pipeline que unificava com es processaven les peticions ASP.NET i altres tipus de contingut[^18]. Abans, ASP.NET tenia el seu propi pipeline separat d'IIS, cosa que limitava funcionalitats. Amb el pipeline integrat:
- Els mòduls d'IIS poden processar peticions ASP.NET
- Els mòduls ASP.NET poden processar tot tipus de contingut
- Major flexibilitat i consistència
Configuració Distribuïda:
Una altra innovació major va ser el sistema de configuració distribuïda mitjançant fitxers web.config[^19]:
- Cada aplicació pot tenir el seu propi fitxer web.config
- Configuració jeràrquica (herència de configuració)
- Delegació de configuració a desenvolupadors
- Compatible amb control de versions (Git, SVN, etc.)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="default.aspx" />
<add value="index.html" />
</files>
</defaultDocument>
</system.webServer>
</configuration>
Altres Novetats d'IIS 7.0:
- FastCGI: Suport natiu per a PHP i altres llenguatges
- FTP 7.5: Reescriptura completa del servidor FTP
- WebDAV millorat: Implementació completament nova
- IIS Manager millorat: Interfície gràfica completament redissenyada
- Delegació d'administració: Permet delegar tasques administratives
IIS 7.5 (Windows Server 2008 R2 / Windows 7, 2009)
IIS 7.5 va ser una evolució refinada d'IIS 7.0 amb millores incrementals[^20]:
- Best Practices Analyzer: Eina per analitzar configuracions i detectar problemes
- Request Filtering millorat: Millor protecció contra atacs
- Managed Service Accounts: Simplificació de la gestió de comptes de servei
- Logging millorat: Més opcions per personalitzar logs
- PowerShell management: Cmdlets per administrar IIS via PowerShell
1.4 L'Era Moderna: IIS 8.x i Més Enllà (2012-Present)
IIS 8.0 (Windows Server 2012 / Windows 8, 2012)
IIS 8.0 va introduir millores significatives per a escalabilitat i modernització[^21]:
1. SNI (Server Name Indication):
SNI va permetre allotjar múltiples sites HTTPS amb diferents certificats SSL en la mateixa adreça IP, cosa que anteriorment requeria IPs dedicades per a cada site HTTPS[^22].
2. Application Initialization:
Permet pre-carregar aplicacions perquè estiguin "calentes" abans de rebre la primera petició, eliminant el retard inicial[^23].
3. Centralized SSL Certificate Support:
Gestió centralitzada de certificats SSL, facilitant l'administració en granges de servidors[^24].
4. CPU Throttling:
Control granular sobre l'ús de CPU per application pool, ideal per entorns multi-tenant[^25].
5. WebSocket Protocol:
Suport natiu per a WebSockets (RFC 6455), essencial per aplicacions en temps real[^26].
6. Multicore Scaling on NUMA:
Optimitzacions per a sistemes amb arquitectura NUMA (Non-Uniform Memory Access)[^27].
IIS 8.5 (Windows Server 2012 R2 / Windows 8.1, 2013)
IIS 8.5 va afegir millores addicionals[^28]:
- Enhanced Logging: Logs més detallats i personalitzables
- Dynamic Site Activation: Sites inactius no consumeixen recursos
- Idle Worker Process Page-Out: Millor gestió de memòria
- Logging to Event Tracing for Windows (ETW): Integració amb el sistema de logging de Windows
IIS 10.0 (Windows Server 2016 / Windows 10, 2016)
IIS 10.0 va marcar l'entrada d'IIS en l'era dels protocols moderns[^29]:
1. HTTP/2 Support:
Suport complet per a HTTP/2, oferint[^30]: - Multiplexació de peticions - Compressió de capçaleres (HPACK) - Server Push - Priorització de streams
2. Nano Server Support:
IIS 10.0 podia executar-se en Windows Server Nano, una versió ultra-lleugera de Windows Server[^31].
3. Wildcards in Host Headers:
Suport per wildcards en host headers, simplificant la configuració de sites amb múltiples subdominis[^32].
4. Container Support:
IIS 10.0 es pot executar en contenidors Docker de Windows, facilitant el desplegament modern[^33].
IIS 10.0 Version 1709, 1803, 1809 i Posteriors (2017-Present)
Microsoft va adoptar un model de llançament semi-anual, introduint millores incrementals[^34]:
Version 1809 (2018):
- Control granular d'OCSP Stapling: Per binding individual[^35]
- Control de HTTP/2 per binding: Habilitar/deshabilitar HTTP/2 per site[^36]
- Nova API de compressió: Millor suport per a Brotli i streaming[^37]
- Brotli compression: Suport natiu per a compressió Brotli[^38]
IIS 10.0 Version 2004 i posteriors:
- TLS 1.3 Support: Suport per a l'última versió de TLS
- Millores de rendiment: Optimitzacions contínues
- Seguretat millorada: Actualitzacions de seguretat constants
1.5 Quota de Mercat i Posicionament Actual
La quota de mercat d'IIS ha evolucionat significativament al llarg dels anys. En el seu moment àlgid (mitjans dels 2000), IIS tenia aproximadament el 30-40% de quota de mercat global de servidors web[^39]. No obstant això, aquesta quota ha disminuït gradualment:
Evolució de Quota de Mercat: - 2007: ~35-40% (pic màxim) - 2012: ~15-20% - 2018: ~10% segons Netcraft[^40] - 2023: ~7-9% segons diverses fonts
Raons del Descens:
- Ascens d'Nginx: Nginx, llançat el 2004, va guanyar ràpidament quota per la seva arquitectura asíncrona i excel·lent rendiment[^41]
- Domini d'Apache: Apache va mantenir una posició dominant durant molts anys
- Ecosistema Linux: El creixement de Linux als servidors va beneficiar Apache i Nginx
- Cloud Computing: Els proveïdors cloud majors (AWS, Google Cloud) van oferir millor suport per a Linux que Windows
- Cost: Les llicències de Windows Server representen un cost addicional
Fortaleses Persistents d'IIS:
Tot i el descens de quota global, IIS manté fortaleses importants[^42]:
- Integració .NET: Excel·lent per a aplicacions ASP.NET, .NET Core i altres frameworks Microsoft
- Entorns corporatius Windows: Dominant en empreses amb infraestructura Windows
- Active Directory: Integració perfecta amb AD per autenticació i autorització
- Suport professional: Backed per Microsoft Support
- Facilitat d'ús: IIS Manager ofereix una de les interfícies gràfiques més intuïtives
- SharePoint, Exchange: Requerit per molts productes Microsoft
- Azure: Integració excel·lent amb Azure App Service
1.6 IIS vs. Competidors: Anàlisi Comparativa
| Aspecte | IIS | Apache | Nginx |
|---|---|---|---|
| Llicència | Propietària (inclosa amb Windows) | Open Source (Apache License) | Open Source (BSD-like) |
| Plataforma | Només Windows | Multiplataforma | Multiplataforma |
| Arquitectura | Event-driven (IIS 7+) | Multi-procés/thread | Event-driven asíncrona |
| Configuració | GUI + web.config (XML) | Fitxers de text | Fitxers de text |
| Integració .NET | ★★★★★ Excel·lent | ★★☆☆☆ Via mod_mono | ★★☆☆☆ Via reverse proxy |
| PHP | ★★★★☆ Via FastCGI | ★★★★★ Excel·lent | ★★★★★ Excel·lent |
| Rendiment (estàtic) | ★★★★☆ | ★★★★☆ | ★★★★★ |
| Rendiment (dinàmic) | ★★★★★ (.NET) | ★★★★☆ | ★★★★☆ |
| Escalabilitat | ★★★★★ | ★★★★☆ | ★★★★★ |
| Suport professional | ★★★★★ Microsoft | ★★★☆☆ Comunitat | ★★★★☆ Nginx Inc. |
| Corba d'aprenentatge | ★★★★☆ Moderat | ★★★☆☆ Moderat-Alt | ★★★☆☆ Moderat-Alt |
| Documentació | ★★★★★ Excel·lent | ★★★★★ Excel·lent | ★★★★☆ Bona |
2. Arquitectura i Conceptes Fonamentals
2.1 Arquitectura General d'IIS
L'arquitectura d'IIS, especialment des de la versió 7.0 en endavant, és sofisticada i multicapa. Comprendre aquesta arquitectura és fonamental per administrar IIS de manera efectiva[^43].
2.1.1 Components Principals
1. HTTP.sys (Kernel-Mode Driver):
HTTP.sys és un driver que s'executa en mode kernel (la capa més baixa del sistema operatiu), introduït en IIS 6.0[^44]. Les seves responsabilitats inclouen:
- Listener HTTP: Escolta peticions HTTP/HTTPS en els ports configurats
- Request Queuing: Gestiona cues de peticions per a cada Application Pool
- Response Caching: Implementa caching de kernel per a contingut estàtic (molt ràpid)
- Logging: Registra peticions HTTP a fitxers de log
- SSL/TLS Termination: Gestiona el xifrat/desxifrat SSL/TLS
- Connection Management: Gestiona connexions TCP i timeout
Avantatges de HTTP.sys en mode kernel: - Rendiment superior (menys canvis de context entre kernel i user mode) - Major seguretat (aïllament de processos d'aplicació) - Protecció contra atacs DoS - Caching eficientíssim
2. Windows Process Activation Service (WAS):
WAS és el servei responsable de gestionar application pools i processos worker[^45]:
- Inicia i atura processos worker (w3wp.exe)
- Monitoritza la salut dels processos
- Gestiona el reciclatge de processos
- Proporciona informació de configuració als processos
- Gestiona protocols no-HTTP (com TCP, Named Pipes, MSMQ)
3. World Wide Web Publishing Service (W3SVC):
W3SVC és el servei principal d'IIS que[^46]:
- Llegeix configuració d'applicationHost.config
- Comunica configuració a WAS
- Gestiona sites web i aplicacions
- Coordina amb HTTP.sys per routing de peticions
4. IIS Manager Service (WMSVC):
Proporciona gestió remota d'IIS[^47]:
- Permet connexió remota a IIS Manager
- Autenticació i autorització de connexions remotes
- Per defecte deshabilitat (cal habilitar-lo manualment)
2.1.2 Flux de Peticions HTTP
El processament d'una petició HTTP en IIS segueix aquest camí[^48]:
1. Client envia petició HTTP → TCP/IP Stack
↓
2. HTTP.sys (kernel mode) intercepta la petició
↓
3. HTTP.sys examina la petició i determina quin Application Pool la gestiona
↓
4. HTTP.sys posa la petició a la cua del Application Pool corresponent
↓
5. WAS assegura que hi ha un procés worker (w3wp.exe) disponible
- Si no existeix, WAS el crea
- Si està ociós, WAS el desperta
↓
6. w3wp.exe extreu petició de la cua de HTTP.sys
↓
7. La petició passa pel PIPELINE DE MÒDULS D'IIS
(AuthenticateRequest → AuthorizeRequest → ResolveRequestCache →
MapRequestHandler → AcquireRequestState → PreExecuteRequestHandler →
ExecuteRequestHandler → ReleaseRequestState → UpdateRequestCache →
LogRequest → EndRequest)
↓
8. El mòdul handler apropiat processa la petició
(StaticFileModule, ASP.NET, PHP, etc.)
↓
9. La resposta es genera i es retorna a HTTP.sys
↓
10. HTTP.sys envia la resposta al client
2.2 Mòduls i Pipeline
2.2.1 Tipus de Mòduls
IIS 7.0+ suporta dos tipus de mòduls[^49]:
Mòduls Natius (Native Modules):
- Escrits en C/C++ no gestionat
- S'executen directament en el procés worker
- Màxim rendiment
- Exemples: StaticFileModule, BasicAuthenticationModule, UrlAuthorizationModule
Mòduls Gestionats (Managed Modules):
- Escrits en .NET (C#, VB.NET, etc.)
- S'executen en el CLR (.NET runtime)
- Major flexibilitat i facilitat de desenvolupament
- Exemples: FormsAuthentication, RoleManager, UrlMappingsModule
2.2.2 Events del Pipeline
El pipeline d'IIS ofereix múltiples punts d'extensió (events) on els mòduls poden processar peticions[^50]:
| Event | Descripció | Ús Típic |
|---|---|---|
| BeginRequest | Primera notificació en el pipeline | Inicialitzar dades per petició |
| AuthenticateRequest | Determina identitat de l'usuari | Autenticació (Basic, Windows, Forms) |
| AuthorizeRequest | Verifica permisos | Autorització basada en rols/URL |
| ResolveRequestCache | Verifica si resposta està en cache | Retornar resposta cachejada |
| MapRequestHandler | Determina quin handler processarà | Mapping .aspx → ASP.NET, .php → PHP |
| AcquireRequestState | Obté estat de sessió | Carregar sessió d'usuari |
| PreExecuteRequestHandler | Just abans d'executar handler | Logging, preparació |
| ExecuteRequestHandler | Executa el handler | Processar .aspx, .php, servir fitxer |
| ReleaseRequestState | Allibera estat de sessió | Guardar canvis de sessió |
| UpdateRequestCache | Actualitza cache de resposta | Guardar resposta per futures peticions |
| LogRequest | Registra la petició | Escriure a logs |
| EndRequest | Última notificació | Neteja final, enviament de resposta |
3. Application Pools i Gestió de Processos
3.1 Què són els Application Pools?
Els Application Pools són un dels conceptes més importants i distintius d'IIS, introduïts en IIS 6.0[^51]. Un Application Pool és un contenidor lògic que agrupa una o més aplicacions web i les aïlla en el seu propi procés worker.
Concepte Clau: Cada Application Pool s'executa en el seu propi procés del sistema operatiu (w3wp.exe), proporcionant aïllament complet entre aplicacions[^52].
Beneficis dels Application Pools:
- Aïllament i Estabilitat: Si una aplicació en un Application Pool falla, no afecta altres Application Pools[^53]
- Seguretat: Cada pool pot executar-se sota una identitat diferent (compte d'usuari)
- Gestió de Recursos: Es pot controlar CPU, memòria i nombre de processos per pool
- Reciclatge Independent: Es pot reciclar un pool sense afectar altres
- Configuració Específica: Cada pool pot tenir configuració .NET diferent (version del Framework, etc.)
3.2 Processos Worker (w3wp.exe)
w3wp.exe és el procés d'IIS que executa les aplicacions web[^54]. Cada Application Pool crea almenys un procés w3wp.exe quan rep la primera petició (per defecte, IIS no crea el procés fins que arriba tràfic)[^55].
Característiques de w3wp.exe:
- És un procés en mode usuari (user-mode)
- Carrega i executa codi d'aplicació (.NET, PHP, etc.)
- Comunica amb HTTP.sys per rebre peticions i enviar respostes
- Conté el pipeline de mòduls d'IIS
- Es pot reciclar automàticament segons configuració
Relació Application Pool ↔ w3wp.exe:
Application Pool "DefaultAppPool"
↓ (crea quan arriba primera petició)
w3wp.exe (PID: 1234)
- Executa Site1.com
- Executa Site2.com
- Executa /app1 de Site3.com
Application Pool "MyCustomPool"
↓
w3wp.exe (PID: 5678)
- Executa MySite.com
- Executa /app2 de Site3.com
Important: Per defecte, un Application Pool = un w3wp.exe. No obstant això, en configuracions especials (Web Gardens), un pool pot tenir múltiples processos w3wp.exe[^56].
3.3 Identificar Processos Worker
Quan tens múltiples Application Pools executant-se, és crucial saber quin procés w3wp.exe correspon a quin pool[^57].
Mètode 1: IIS Manager
- Obrir IIS Manager
- Clicar al nom del servidor (nivell superior)
- Doble clic a "Worker Processes"
- Veuràs una llista amb:
- Application Pool Name
- Process ID (PID)
- CPU %
- Memoria usada
- Peticions actuals
Mètode 2: PowerShell
# Llistar tots els worker processes
Import-Module WebAdministration
Get-IISAppPool | Where-Object {$_.State -eq 'Started'} | ForEach-Object {
$poolName = $_.Name
$processes = Get-Process -Name w3wp -ErrorAction SilentlyContinue |
Where-Object {$_.ProcessName -eq 'w3wp'}
Write-Host "Pool: $poolName"
}
# O més directament amb appcmd
C:\Windows\System32\inetsrv\appcmd.exe list wp
Sortida exemple:
WP "1234" (applicationPool:DefaultAppPool)
WP "5678" (applicationPool:MyCustomPool)
WP "9012" (applicationPool:.NET v4.5)
Mètode 3: Task Manager amb Detalls
- Obrir Task Manager (Ctrl+Shift+Esc)
- Anar a la pestanya "Details"
- Clicar dret a les capçaleres de columna → "Select columns"
- Activar "Command line"
- Ara pots veure quins w3wp.exe pertanyen a quin pool
Els arguments de línia de comandes mostren:
3.4 Configuració d'Application Pools
3.4.1 Configuració Bàsica
Crear un Application Pool:
Via IIS Manager:
1. IIS Manager → Application Pools → Clic dret → Add Application Pool
2. Nom: "MyAppPool"
3. .NET CLR Version: "v4.0" (o "No Managed Code" per aplicacions no-.NET)
4. Managed Pipeline Mode: "Integrated" (recomanat) o "Classic"
5. Start application pool immediately: ✓
Via PowerShell:
Import-Module WebAdministration
New-WebAppPool -Name "MyAppPool"
Set-ItemProperty IIS:\AppPools\MyAppPool -Name managedRuntimeVersion -Value "v4.0"
Set-ItemProperty IIS:\AppPools\MyAppPool -Name managedPipelineMode -Value "Integrated"
Start-WebAppPool -Name "MyAppPool"
3.4.2 Identity (Identitat del Procés)
Cada Application Pool s'executa sota una identitat (compte d'usuari). Aquest compte determina els permisos que l'aplicació tindrà[^58].
Opcions d'Identity:
| Identity | Compte | Ús Recomanat |
|---|---|---|
| ApplicationPoolIdentity | Compte virtual específic del pool | Recomanat per defecte (més segur) |
| LocalSystem | SISTEMA | ⚠️ Permisos massa amplis, evitar |
| LocalService | SERVEI LOCAL | Pocs permisos, limitat |
| NetworkService | SERVEI DE XARXA | Accés a recursos de xarxa, legacy |
| Custom Account | Compte específic de domini/local | Quan cal permisos específics |
Configurar Identity (PowerShell):
# ApplicationPoolIdentity (recomanat)
Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.identityType -Value "ApplicationPoolIdentity"
# NetworkService
Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.identityType -Value "NetworkService"
# Compte personalitzat
Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.identityType -Value "SpecificUser"
Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.userName -Value "DOMAIN\UserName"
Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.password -Value "P@ssw0rd"
Permisos de Fitxers:
Quan utilitzes ApplicationPoolIdentity, els permisos s'assignen al compte:
Exemple en PowerShell per donar permisos:
$path = "C:\inetpub\wwwroot\MyApp"
$acl = Get-Acl $path
$identity = "IIS AppPool\MyAppPool"
$fileSystemRights = "ReadAndExecute"
$accessControlType = "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($identity, $fileSystemRights, "ContainerInherit,ObjectInherit", "None", $accessControlType)
$acl.AddAccessRule($accessRule)
Set-Acl $path $acl
3.4.3 Reciclatge (Recycling)
El reciclatge de processos és una característica poderosa d'IIS que permet reiniciar processos worker per mantenir la salut de l'aplicació[^59].
Per què Reciclar?: - Alliberar memòria filtrada (memory leaks) - Aplicar noves configuracions - Mantenir estabilitat després de X peticions/temps - Gestionar recursos de manera proactiva
Condicions de Reciclatge:
<!-- applicationHost.config -->
<recycling>
<periodicRestart>
<!-- Reciclar cada 1740 minuts (29 hores) -->
<add value="01:00:00" />
<!-- Reciclar després de 10000 peticions -->
<requests value="10000" />
<!-- Reciclar quan memòria virtual > 2 GB -->
<memory value="2097152" />
<!-- Reciclar quan memòria privada > 500 MB -->
<privateMemory value="512000" />
<!-- Reciclar a hores específiques (ex: 3 AM) -->
<schedule>
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
Overlapped Recycle:
Per defecte, IIS fa "overlapped recycle" (solapament)[^60]: 1. IIS inicia un NOU procés w3wp.exe 2. El nou procés comença a acceptar noves peticions 3. El procés VELL continua processant peticions en curs 4. Quan el vell procés acaba totes les peticions, es tanca 5. Resultat: Zero downtime!
Configurar overlapped recycle:
3.4.4 Rapid-Fail Protection
Protegeix el servidor de aplicacions defectuoses que fallen repetidament[^61]:
<failure>
<!-- Si l'aplicació falla 5 vegades en 5 minuts, desactivar el pool -->
<rapidFailProtection enabled="true"
maxCrashes="5"
interval="00:05:00" />
<!-- Acció quan es detecta rapid-fail -->
<autoShutdownExe value="C:\Scripts\AlertAdmin.exe" />
</failure>
Quan es desactiva per rapid-fail, el pool roman aturat fins que un administrador el reinicia manualment o es configura auto-restart.
3.4.5 Start Mode i Always Running
Application Initialization permet que aplicacions estiguin "calentes" abans de la primera petició[^62]:
<applicationInitialization>
<!-- Inicialitzar automàticament quan s'inicia el pool -->
<add initializationPage="/" />
<add initializationPage="/warmup.aspx" />
</applicationInitialization>
Configurar Always Running:
Set-ItemProperty IIS:\AppPools\MyAppPool -Name startMode -Value "AlwaysRunning"
Set-ItemProperty "IIS:\Sites\MySite" -Name applicationDefaults.preloadEnabled -Value $true
Benefici: Primera petició no experimenta demora mentre l'aplicació s'inicialitza.
3.5 Web Gardens (Múltiples Processos per Pool)
Normalment, un Application Pool = un procés w3wp.exe. Un Web Garden és quan configures un pool per crear múltiples processos worker[^63].
Configuració:
# Crear web garden amb 4 processos
Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.maxProcesses -Value 4
Quan Usar Web Gardens (⚠️ Rarament útil): - Aplicació no pot utilitzar múltiples CPU cores efectivament - Tens CPU amb molts cores i l'aplicació és single-threaded
Problemes amb Web Gardens: - Session State: Sessions InProc NO funcionen (has d'usar StateServer o SQL Server) - Application State: Cada procés té el seu propi Application State - Cache: Cada procés té la seva pròpia cache - Singletons: No són realment singletons - Complexitat: Debugging és més difícil
Recomendació: Evita Web Gardens llevat que tinguis una necessitat molt específica i entenguis les implicacions[^64].
4. Instal·lació i Configuració Inicial
4.1 Instal·lació d'IIS
4.1.1 Windows Server (Recomanat per Producció)
Via Server Manager (GUI)[^65]:
1. Obrir Server Manager
2. Click "Manage" → "Add Roles and Features"
3. "Next" fins "Server Roles"
4. Activar "Web Server (IIS)" → "Add Features"
5. "Next" fins "Role Services"
6. Seleccionar característiques necessàries:
✓ Common HTTP Features:
- Static Content
- Default Document
- Directory Browsing
- HTTP Errors
- HTTP Redirection
✓ Health and Diagnostics:
- HTTP Logging
- Logging Tools
- Request Monitor
✓ Performance:
- Static Content Compression
- Dynamic Content Compression
✓ Security:
- Request Filtering
- Basic Authentication (si necessites)
- Windows Authentication (per Intranet)
✓ Application Development:
- .NET Extensibility 4.8
- ASP.NET 4.8
- ISAPI Extensions
- ISAPI Filters
- WebSocket Protocol (per aplicacions realtime)
✓ Management Tools:
- IIS Management Console (essencial!)
- IIS Management Scripts and Tools
7. "Next" → "Install"
8. Esperar finalització (pot trigar 5-10 minuts)
Via PowerShell (més ràpid i automatitzable):
# Instal·lar IIS amb característiques comunes
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
# O instal·lació més completa
Install-WindowsFeature -Name Web-Server,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Static-Content,Web-Http-Redirect,Web-Health,Web-Http-Logging,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Basic-Auth,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-WebSockets,Web-Mgmt-Tools,Web-Mgmt-Console -IncludeManagementTools
# Verificar instal·lació
Get-WindowsFeature -Name Web-* | Where-Object {$_.InstallState -eq 'Installed'}
4.1.2 Windows 10/11 (Per Desenvolupament)
Via Control Panel[^66]:
1. Control Panel → Programs → Turn Windows features on or off
2. Expandir "Internet Information Services"
3. Activar:
✓ Web Management Tools
- IIS Management Console
✓ World Wide Web Services
- Application Development Features
* .NET Extensibility 4.8
* ASP.NET 4.8
* ISAPI Extensions
* ISAPI Filters
* WebSocket Protocol
- Common HTTP Features (tots)
- Health and Diagnostics
* HTTP Logging
- Performance Features
* Static Content Compression
- Security
* Request Filtering
4. Click OK
5. Esperar instal·lació
Via PowerShell (Administrador):
# Windows 10/11
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServer
Enable-WindowsOptionalFeature -Online -FeatureName IIS-CommonHttpFeatures
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpErrors
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationDevelopment
Enable-WindowsOptionalFeature -Online -FeatureName IIS-NetFxExtensibility45
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HealthAndDiagnostics
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpLogging
Enable-WindowsOptionalFeature -Online -FeatureName IIS-Security
Enable-WindowsOptionalFeature -Online -FeatureName IIS-RequestFiltering
Enable-WindowsOptionalFeature -Online -FeatureName IIS-Performance
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerManagementTools
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ManagementConsole
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ASPNET45
4.2 Verificar Instal·lació
Test 1: Servei en Execució
# Verificar servei World Wide Web Publishing Service
Get-Service W3SVC
# Hauria de mostrar:
# Status Name DisplayName
# ------ ---- -----------
# Running W3SVC World Wide Web Publishing Service
Test 2: Accedir al Site Per Defecte
Obrir navegador: http://localhost
Hauries de veure la pàgina per defecte d'IIS.
Test 3: IIS Manager
O executar: inetmgr
4.3 Estructura de Directoris
C:\inetpub\
├── wwwroot\ # Directori arrel per defecte del Default Web Site
│ ├── iisstart.htm # Pàgina per defecte d'IIS
│ └── iisstart.png # Logo d'IIS
├── logs\ # Logs d'IIS
│ └── LogFiles\
│ └── W3SVC1\ # Logs del site ID 1 (Default Web Site)
├── temp\ # Fitxers temporals
├── custerr\ # Pàgines d'error personalitzades
│ ├── en-US\
│ │ ├── 400.htm # Bad Request
│ │ ├── 403.htm # Forbidden
│ │ ├── 404.htm # Not Found
│ │ ├── 500.htm # Internal Server Error
│ │ └── ...
└── history\ # Historial de configuració
C:\Windows\System32\inetsrv\
├── config\
│ ├── applicationHost.config # Configuració principal d'IIS
│ ├── administration.config # Configuració d'administració
│ └── redirection.config # Configuració de redireccions
├── appcmd.exe # Eina de línia de comandes d'IIS
├── iisreset.exe # Eina per reiniciar IIS
└── [DLLs i altres fitxers]
4.4 Fitxer de Configuració Principal
applicationHost.config és el fitxer de configuració mestre d'IIS[^67]:
Aquest fitxer XML conté: - Configuració de tots els sites - Definició d'application pools - Configuració global d'IIS - Mòduls carregats - Handlers - Bindings
⚠️ IMPORTANT: NO editar manualment llevat que sàpigues exactament què fas. Usa IIS Manager o PowerShell.
Exemple de contingut:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.applicationHost>
<sites>
<site name="Default Web Site" id="1">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
<traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
</siteDefaults>
</sites>
<applicationPools>
<add name="DefaultAppPool" />
<add name=".NET v4.5" managedRuntimeVersion="v4.0" />
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel identityType="ApplicationPoolIdentity" />
</applicationPoolDefaults>
</applicationPools>
</system.applicationHost>
<system.webServer>
<modules>
<add name="HttpCacheModule" />
<add name="StaticFileModule" />
<!-- més mòduls... -->
</modules>
</system.webServer>
</configuration>
5. Sites i Aplicacions Web
5.1 Jerarquia: Site → Application → Virtual Directory
IIS organitza el contingut web en una jerarquia de tres nivells[^68]:
SITE (www.exemple.com)
│
├─ APPLICATION (/app1)
│ │
│ ├─ Virtual Directory (/images → C:\SharedImages)
│ └─ Virtual Directory (/data → D:\AppData)
│
└─ APPLICATION (/app2)
└─ (directori físic: C:\inetpub\wwwroot\app2)
Site (Web Site): - Unitat de configuració principal - Té bindings (IP, Port, Host Header) - Pot contenir múltiples aplicacions - Assignat a un Application Pool
Application: - Subdivisió d'un site - Pot tenir configuració independent (web.config) - Pot estar assignada a un Application Pool diferent - Defineix un límit d'aplicació (.NET AppDomain)
Virtual Directory: - Mapeja un path URL a un directori físic diferent - No crea nou AppDomain - Permet organitzar contingut en múltiples ubicacions físiques
5.2 Crear un Site
Via IIS Manager:
1. IIS Manager → Sites (expandir)
2. Clic dret → "Add Website..."
3. Omplir el formulari:
Site name: MyWebSite
Application pool: MyAppPool (o crear nou)
Physical path: C:\inetpub\MyWebSite
Binding:
Type: http
IP address: All Unassigned (o específica)
Port: 80
Host name: www.mysite.com (opcional)
4. Click OK
Via PowerShell:
# Crear directori físic
New-Item -Path "C:\inetpub\MyWebSite" -ItemType Directory
# Crear application pool
New-WebAppPool -Name "MyAppPool"
# Crear site
New-Website -Name "MyWebSite" `
-Port 80 `
-HostHeader "www.mysite.com" `
-PhysicalPath "C:\inetpub\MyWebSite" `
-ApplicationPool "MyAppPool"
# Iniciar site
Start-Website -Name "MyWebSite"
5.3 Bindings
Els bindings defineixen com IIS escolta peticions per a un site (protocol, IP, port, hostname)[^69].
Tipus de Bindings:
- HTTP Binding:
http://*:80:www.example.com - HTTPS Binding:
https://*:443:www.example.com(requereix certificat SSL) - Altri: FTP, SMTP, etc.
Format de Binding:
Exemples:
# Afegir binding HTTP
New-WebBinding -Name "MyWebSite" -Protocol "http" -Port 80 -HostHeader "www.mysite.com"
# Afegir binding HTTPS amb certificat
New-WebBinding -Name "MyWebSite" -Protocol "https" -Port 443 -HostHeader "www.mysite.com"
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*mysite.com*"}
New-Item -Path "IIS:\SslBindings\0.0.0.0!443!www.mysite.com" -Value $cert
SNI (Server Name Indication):
SNI permet múltiples sites HTTPS amb diferents certificats en la mateixa IP:Port[^70]:
New-WebBinding -Name "Site1" -Protocol "https" -Port 443 -HostHeader "site1.com" -SslFlags 1
New-WebBinding -Name "Site2" -Protocol "https" -Port 443 -HostHeader "site2.com" -SslFlags 1
# SslFlags:
# 0 = No SNI
# 1 = SNI Required
# 2 = Centralized SSL Certificate Store
# 3 = SNI + Centralized Store
5.4 Default Documents
Els default documents són fitxers que IIS serveix quan un usuari navega a un directori sense especificar un fitxer[^71]:
<!-- web.config -->
<configuration>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
<add value="index.html" />
<add value="index.htm" />
<add value="Default.asp" />
</files>
</defaultDocument>
</system.webServer>
</configuration>
Via PowerShell:
Add-WebConfigurationProperty -PSPath "IIS:\Sites\MyWebSite" `
-Filter "system.webServer/defaultDocument/files" `
-Name "." `
-Value @{value='home.html'}
5.5 Directory Browsing
Permet als usuaris veure un llistat de fitxers quan no hi ha default document[^72]:
<configuration>
<system.webServer>
<directoryBrowse enabled="true" showFlags="Date, Time, Size, Extension" />
</system.webServer>
</configuration>
⚠️ Seguretat: Normalment DESACTIVAT en producció per evitar exposar estructura de fitxers.
6. Mòduls i Extensions d'IIS
6.1 Mòduls Natius Principals
IIS 7.0+ divideix la funcionalitat en mòduls. Aquí els més importants[^73]:
| Mòdul | Funció |
|---|---|
| StaticFileModule | Serveix fitxers estàtics (HTML, CSS, JS, imatges) |
| DefaultDocumentModule | Serveix default documents (index.html, etc.) |
| DirectoryListingModule | Genera llistats de directoris |
| BasicAuthenticationModule | Autenticació HTTP Basic |
| WindowsAuthenticationModule | Autenticació Windows/Kerberos/NTLM |
| AnonymousAuthenticationModule | Autenticació anònima (per defecte) |
| UrlAuthorizationModule | Autorització basada en URL |
| RequestFilteringModule | Filtra peticions malicioses |
| StaticCompressionModule | Compressió de contingut estàtic |
| DynamicCompressionModule | Compressió de contingut dinàmic |
| HttpLoggingModule | Registra peticions HTTP |
| CustomErrorModule | Pàgines d'error personalitzades |
| HttpRedirectionModule | Redireccions HTTP |
6.2 Mòduls Gestionats (.NET)
| Mòdul | Funció |
|---|---|
| FormsAuthentication | Autenticació basada en formularis |
| RoleManager | Gestió de rols d'usuari |
| UrlAuthorization | Autorització basada en URL (ASP.NET) |
| UrlMappingsModule | Mapping d'URLs |
| ScriptModule | Suport AJAX per ASP.NET |
7. Seguretat en IIS
7.1 Autenticació
IIS suporta múltiples mètodes d'autenticació[^74]:
Anonymous Authentication
Per defecte, habilitada. Permet accés sense credencials:
<configuration>
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" userName="IUSR" />
</authentication>
</security>
</system.webServer>
</configuration>
Basic Authentication
Envia credencials en Base64 (NO xifrat, usar només amb HTTPS):
Windows Authentication
Utilitza credencials de Windows (NTLM/Kerberos):
<windowsAuthentication enabled="true">
<providers>
<clear />
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
7.2 SSL/TLS Configuration
Obtenir Certificat (Let's Encrypt amb win-acme):
# Descarregar win-acme des de https://github.com/win-acme/win-acme
# Executar
.\wacs.exe --target iis --siteid 1 --emailaddress admin@example.com --accepttos
Configurar HTTPS Binding:
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*example.com*"}
New-WebBinding -Name "MyWebSite" -Protocol "https" -Port 443
New-Item -Path "IIS:\SslBindings\0.0.0.0!443" -Value $cert
Forçar HTTPS (via URL Rewrite):
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
8. URL Rewrite i Application Request Routing
8.1 URL Rewrite Module
El mòdul URL Rewrite permet reescriure URLs, crear redireccions i implementar regles complexes de routing[^75].
Instal·lació:
Exemple: Redirigir www a no-www:
<rewrite>
<rules>
<rule name="Remove WWW" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="https://{C:1}/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
8.2 Application Request Routing (ARR)
ARR transforma IIS en un potent proxy invers i load balancer[^76].
Instal·lació:
Descarregar de: https://www.iis.net/downloads/microsoft/application-request-routing
Requereix URL Rewrite
Configurar Proxy Invers:
-
Habilitar Proxy:
-
Crear Regla:
Load Balancing:
<webFarms>
<webFarm name="MyFarm" enabled="true">
<server address="192.168.1.10" enabled="true" />
<server address="192.168.1.11" enabled="true" />
<server address="192.168.1.12" enabled="true" />
<applicationRequestRouting>
<loadBalancing algorithm="WeightedRoundRobin" />
<affinity useCookie="true" cookieName="ARRAffinity" />
<healthCheck url="http://{SERVER}/health"
interval="00:00:30"
timeout="00:00:10"
responseMatch="200" />
</applicationRequestRouting>
</webFarm>
</webFarms>
9. Optimització i Millors Pràctiques
9.1 Compressió
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
</staticTypes>
</httpCompression>
9.2 Output Caching
<caching enabled="true">
<profiles>
<add extension=".jpg" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:01:00" />
<add extension=".css" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:05:00" />
<add extension=".js" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:05:00" />
</profiles>
</caching>
10. Casos Pràctics i Configuracions Avançades
10.1 Site ASP.NET Core
# Instal·lar ASP.NET Core Module
# Descarregar Hosting Bundle de: https://dotnet.microsoft.com/download
# Crear site
New-WebAppPool -Name "AspNetCorePool"
Set-ItemProperty IIS:\AppPools\AspNetCorePool -Name managedRuntimeVersion -Value ""
New-Website -Name "MyAspNetCoreSite" `
-Port 5000 `
-PhysicalPath "C:\Apps\MyApp" `
-ApplicationPool "AspNetCorePool"
web.config per ASP.NET Core:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</configuration>
10.2 Site PHP
# Instal·lar PHP
choco install php -y
# Configurar FastCGI
Add-WebConfiguration -Filter "/system.webServer/fastCgi" `
-Value @{fullPath='C:\PHP\php-cgi.exe'}
# Afegir handler
Add-WebConfiguration -Filter "/system.webServer/handlers" `
-Value @{name='PHP_via_FastCGI'; path='*.php'; verb='*'; modules='FastCgiModule'; scriptProcessor='C:\PHP\php-cgi.exe'; resourceType='File'}
11. Referències
[^1]: Microsoft. "Internet Information Services history". https://www.iis.net/ [^2]: Liquid Web. (2024). "What is Internet Information Services (IIS)?". https://www.liquidweb.com/blog/internet-information-services/ [^3]: Wikipedia. "Internet Information Services". https://es.wikipedia.org/wiki/Internet_Information_Services [^4]: TechTarget. "What is IIS (Internet Information Services)". https://www.techtarget.com/searchwindowsserver/definition/IIS [^5]: Jotelulu. (2023). "Qué es y para qué sirve un IIS web server". https://jotelulu.com/blog/que-es-y-para-que-sirve-un-iis-web-server/ [^6]: Wikipedia. "IIS 2.0 - Windows NT 4.0". [^7]: Wikipedia. "IIS 3.0 - Active Server Pages introduction". [^8]: Wikipedia. "IIS 4.0 - Gopher protocol removal". [^9]: TechTarget. "IIS 5.0 evolution". [^10]: Wikipedia. "IIS 5.1 - Windows XP Professional limitations". [^11]: TechTarget. "IIS 6.0 major architectural changes". [^12]: Microsoft Learn. "HTTP.sys kernel-mode driver". https://learn.microsoft.com/en-us/iis/ [^13]: Professional Microsoft IIS 8. "Application Pools concept introduction". [^14]: Microsoft. "IIS 6.0 secure by default". [^15]: Wikipedia. "IIS 6.0 IPv6 support". [^16]: TechTarget. "IIS 7.0 modular architecture". [^17]: Microsoft Learn. "IIS 7.0 modules". https://learn.microsoft.com/en-us/iis/ [^18]: Microsoft Learn. "IIS 7.0 integrated pipeline". [^19]: Microsoft Learn. "web.config distributed configuration". [^20]: TechTarget. "IIS 7.5 improvements". [^21]: TechTarget. "IIS 8.0 new features". [^22]: Plesk. "IIS 8.0 SNI support". https://www.plesk.com/wiki/iis/ [^23]: Microsoft Learn. "Application Initialization in IIS 8.0". [^24]: Microsoft Learn. "Centralized SSL Certificate Support". [^25]: Microsoft Learn. "CPU Throttling in IIS 8.0". [^26]: Plesk. "WebSocket Protocol support in IIS 8.0". [^27]: Plesk. "Multicore Scaling on NUMA". [^28]: TechTarget. "IIS 8.5 features". [^29]: TechTarget. "IIS 10.0 HTTP/2 era". [^30]: Microsoft Learn. "HTTP/2 Support in IIS 10.0". https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10-version-1809/ [^31]: TechTarget. "Nano Server support". [^32]: TechTarget. "Wildcards in Host Headers". [^33]: TechTarget. "IIS 10.0 Container Support". [^34]: Microsoft Learn. "IIS 10.0 version history". [^35]: Microsoft Learn. (2018). "New Features Introduced in IIS 10.0, version 1809". https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10-version-1809/ [^36]: Microsoft Learn. "Per-binding HTTP/2 control". [^37]: Microsoft Learn. "New compression API". [^38]: Microsoft Learn. "Brotli compression support". [^39]: Jotelulu. (2023). "IIS market share evolution". [^40]: Jotelulu. (2023). "IIS 10% market share in 2018". [^41]: Jotelulu. (2023). "Nginx ascent and competition". [^42]: Plesk. "IIS strengths and use cases". [^43]: Microsoft Learn. "IIS Architecture Overview". https://learn.microsoft.com/en-us/iis/ [^44]: Microsoft Learn. "HTTP.sys Kernel-Mode Driver". [^45]: Microsoft Learn. "Windows Process Activation Service (WAS)". [^46]: Microsoft Learn. "W3SVC - World Wide Web Publishing Service". [^47]: Microsoft Learn. "IIS Manager Service (WMSVC)". [^48]: Microsoft Learn. "IIS request processing flow". [^49]: Microsoft Learn. "IIS Native and Managed Modules". [^50]: Microsoft Learn. "IIS Pipeline Events". [^51]: O'Reilly. "Professional Microsoft IIS 8 - Application Pools". https://www.oreilly.com/library/view/professional-microsoft-iis/9781118417379/ [^52]: Stackify. (2024). "What is w3wp.exe? - IIS Worker Process Explained". https://stackify.com/w3wp-exe-iis-worker-process/ [^53]: O'Reilly. "Application Pool isolation benefits". [^54]: Stackify. "w3wp.exe worker process definition". [^55]: Microsoft Q&A. "Relation between w3wp.exe and IIS Application pool". https://learn.microsoft.com/en-us/answers/questions/583367/ [^56]: Super User. "Web Gardens - multiple w3wp.exe". https://superuser.com/questions/1628530/ [^57]: Stack Overflow. "Determine which w3wp.exe process belongs to which App Pool". https://stackoverflow.com/questions/1793940/ [^58]: Microsoft Learn. "Application Pool Identity configuration". [^59]: Microsoft Learn. "Application Pool Recycling". [^60]: Microsoft Learn. "Overlapped Recycle". [^61]: Microsoft Learn. "Rapid-Fail Protection". [^62]: Microsoft Learn. "Application Initialization". [^63]: Super User. "Web Gardens configuration". [^64]: Scott Forsyth's Blog. "Web Gardens rarely useful". https://prod-static-asp-blogs.azurewebsites.net/owscott/ [^65]: Liquid Web. "Installing IIS on Windows Server". [^66]: Liquid Web. "Installing IIS on Windows 10/11". [^67]: Microsoft Learn. "applicationHost.config file". [^68]: Microsoft Learn. "Sites, Applications, and Virtual Directories". [^69]: Microsoft Learn. "IIS Bindings". [^70]: Microsoft Learn. "Server Name Indication (SNI)". [^71]: Microsoft Learn. "Default Documents". [^72]: Microsoft Learn. "Directory Browsing". [^73]: Microsoft Learn. "IIS Modules Reference". [^74]: Microsoft Learn. "IIS Authentication". [^75]: Microsoft Learn. "URL Rewrite Module". https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/ [^76]: Microsoft Learn. "Application Request Routing (ARR)". https://learn.microsoft.com/en-us/iis/extensions/planning-for-arr/