Che cos’è IIS?

In questo post, daremo uno sguardo da vicino a IIS (Internet Information Services). Vedremo cosa fa e come funziona. Imparerete come abilitarlo su Windows. E dopo aver stabilito una linea di base con la gestione di IIS usando la GUI, vedrai come lavorare con esso usando la CLI. Iniziamo!

Cos’è un server web IIS?

Un server web IIS gira sulla piattaforma Microsoft .NET sul sistema operativo Windows. Mentre è possibile eseguire IIS su Linux e Mac usando Mono, non è raccomandato e sarà probabilmente instabile. (Ci sono altre opzioni, che presenterò più avanti). È versatile e stabile, ed è stato ampiamente utilizzato in produzione per molti anni. La versione 10 è la più recente. Una volta installato vedrai questa pagina di benvenuto nel tuo browser. “Tervetuloa!”

Ma prima di addentrarci nei dettagli di IIS, iniziamo a definire un server web in senso generale.

Che cos’è un server web?

Internet è bello. E internet non può esistere senza web server. Ma cos’è esattamente un server web? Definiamolo in astratto così possiamo avere un po’ di contesto per come IIS ricopre questo ruolo.

Un server web è un processo per ospitare applicazioni web. Il server web permette ad un’applicazione di processare i messaggi che arrivano attraverso specifiche porte TCP (di default). Per esempio, la porta predefinita per il traffico HTTP è 80, e quella per HTTPS è 443.

Quando si visita un sito web nel browser, di solito non si specifica il numero di porta a meno che il server web sia configurato per ricevere traffico su porte diverse da quelle predefinite. Visitando http://www.example.com si invia la richiesta alla porta 80 implicitamente. Puoi specificare il numero di porta se vuoi http://www.example.com:80, e https://www.example.com:443 per TLS (Transport Layer Security).

Assumendo la configurazione predefinita e TLS è configurato per la tua applicazione web, il server web riceverà tutto il traffico in entrata alle porte 80 e 443. Quello che il server web fa con il traffico da lì dipende. Ci sono innumerevoli opzioni per come il server web può elaborare quelle richieste.

Come IIS gestisce le richieste web?

I due principali modelli di processo per i server web sono o gestire tutte le richieste su un singolo thread, o generare un nuovo thread per ogni richiesta. Anche se il modello a thread singolo (Node.js, per esempio) ha alcuni thread di lavoro disponibili, tipicamente li usa solo per certi tipi di lavoro, come l’accesso al file system. Il modello thread-per-request che IIS (e il suo cugino leggero IIS Express) usa prenderà un thread da un pool di thread per ogni richiesta.

I server web tipicamente gestiscono le richieste usando uno schema richiesta-risposta. Il client invia una richiesta e riceve una risposta se tutto va bene. Il protocollo HTTP è la scelta onnipresente quando si comunica tra un client e un server web su internet.

Caratteristiche

IIS è ricco di caratteristiche. Più comunemente, IIS è usato per ospitare applicazioni web ASP.NET e siti web statici. Può anche essere usato come server FTP, ospitare servizi WCF ed essere esteso per ospitare applicazioni web costruite su altre piattaforme come PHP.

Ci sono opzioni di autenticazione integrate come Basic, ASP.NET e Windows auth. Quest’ultima è utile se avete un ambiente Windows Active Directory: gli utenti possono essere firmati automaticamente nelle applicazioni web usando il loro account di dominio. Altre caratteristiche di sicurezza incorporate includono la gestione dei certificati TLS e il binding per abilitare HTTPS e SFTP sui vostri siti, il filtraggio delle richieste per la whitelist o la blacklist del traffico, le regole di autorizzazione, la registrazione delle richieste e un ricco set di opzioni di sicurezza specifiche per FTP.

Una caratteristica chiave di IIS è il pool di applicazioni. Dovremo dare un’occhiata più da vicino al pool di applicazioni, poiché è una componente critica del modello di processo di IIS.

Una caratteristica inestimabile è la gestione remota. IIS può anche essere gestito tramite la CLI o usando PowerShell. Potete scrivere tutto, il che è fantastico se vi piace il potere che deriva dal poterlo fare.

A questo punto, dovreste avere una buona impressione sulla configurabilità e versatilità di IIS. Dovreste anche sapere che può essere esteso per servire (gioco di parole) a molti scopi oltre ad ospitare applicazioni ASP.NET. Attraverso l’estensione, IIS diventa un server web altamente versatile e stabile per la piattaforma Windows. Diamo un’occhiata a come installare IIS su Windows 10. (Lo stesso processo si applica a Windows 7 e 8.)

Impostare IIS

Chiamarlo “installare” sarebbe un po’ troppo. Dopo tutto, IIS è una caratteristica di Windows. Quello che dovete davvero fare è abilitare la funzione. In Windows 10, puoi premere il tasto Windows e digitare “gira win”. Dovresti vedere “Attiva o disattiva le caratteristiche di Windows”

Seleziona questo per aprire la finestra di dialogo “Caratteristiche di Windows”. Da qui, è possibile attivare tutti i tipi di caratteristiche aggiuntive, tra cui PowerShell 2.0, un profondo albero di directory di opzioni per Internet Information Services (IIS), e un sottosistema per Linux. (Devo dire che quest’ultimo mi è tornato utile numerose volte, come quando un’applicazione Node ha alcuni script di shell come parte della build di npm).

L’opzione Internet Information Services (IIS) è quella che vogliamo!

Solo facendo clic sulla casella ti darà un buon punto di partenza. Potresti, tuttavia, voler scavare più a fondo. World Wide Web Services >Funzioni di sviluppo dell’applicazione è dove abiliti ASP.NET, CGI, e il protocollo WebSocket. Puoi sempre tornare a questo se hai bisogno di fare delle modifiche.

Per abilitare IIS su Windows Server, puoi usare PowerShell o Server Manager per installare il “Web Role (IIS)”. Vedi questa guida per i dettagli.

Una volta che hai selezionato tutte le caratteristiche desiderate di IIS, clicca su OK e vai a prendere una tazza di caffè fresco. Quando l’installazione è terminata, puoi arrivare alla GUI di IIS digitando “IIS” nella ricerca di Windows o eseguendo “inetmgr.”

La GUI

Prima di entrare nei dettagli, voglio darti una rapida introduzione a IIS Manager. Ho evidenziato le aree di interesse perché questa cosa è un gran casino. Ci vuole un po’ per abituarsi, ma ci sono alcune cose che posso offrire per aiutarvi, per quanto riguarda il muoversi qui dentro.

Prima di tutto, ci sono tre pannelli. Quello di sinistra ha i server collegati. (Il riquadro centrale è dove si trovano tutte le caratteristiche come la sicurezza delle applicazioni, la registrazione, il filtraggio e il reindirizzamento. Oppure quando selezioni “Content View”, vedrai il contenuto qui al centro. Sulla destra c’è il pannello delle azioni. Questo cambia a seconda del contesto selezionato.

Non sono sicuro del perché di quella piccola icona extra in basso a destra, ma puoi ridimensionare la finestra anche lì.

TIP: puoi cliccare con il tasto destro del mouse sulla maggior parte delle icone e usare il menu contestuale per eseguire le azioni più comuni.

Se espandi la “connessione” nel pannello delle connessioni, la prima cosa che dovresti vedere è “Application Pools,” seguita da “Sites.” Ci concentreremo su questi nelle prossime due sezioni.

Pools di applicazioni…Cosa sono e come funzionano?

Ecco uno sguardo ai pool di applicazioni che sono impostati di default in IIS. Come puoi vedere, ci sono combinazioni di v2.0 e v4.0, e di classico e integrato.

La pipeline integrata differisce da quella classica in quanto ASP.NET è integrato nella pipeline di richiesta di IIS. Nella modalità classica, le richieste dovevano passare attraverso una pipeline per IIS e un’altra per ASP.NET. Integrata è stata la modalità preferita da quando IIS 7 è stato rilasciato con Windows Server 2008 e Vista. Non usate la modalità classica a meno che non siate costretti. Lo stesso vale per la v2.0. Sono solo per il supporto legacy. Infatti, se non avete bisogno di questi pool di applicazioni, potreste anche andare avanti e rimuoverli. Non abbiamo bisogno di nessuna robaccia in giro!

Un singolo pool di applicazioni ha da zero a molti processi worker (w3wp.exe) in esecuzione in un dato momento. I processi worker eseguono istanze della tua applicazione.

Creazione di pool di applicazioni

Nel pannello “Azioni” sul lato destro della finestra di IIS, clicca “Aggiungi pool di applicazioni…” per aprire la finestra di dialogo. È abbastanza semplice. Di solito basta inserire un nome e premere “enter” o cliccare “OK”.

Puoi anche aggiungere un pool di applicazioni cliccando con il tasto destro del mouse sul nodo “Application Pools” nel pannello “Connections”. Il suggerimento di prima dimostra già il suo valore!

App pool users

IIS crea un utente virtuale per ogni app pool (nomenclatura comune per application pool). Questi processi worker vengono eseguiti come utente virtuale del pool di applicazioni per impostazione predefinita. Possono essere eseguiti come un utente diverso (un account di dominio, per esempio) se hanno bisogno di permessi speciali.

Anche se ho rimosso gli app pool dal server, gli utenti virtuali continuano a vivere!

Questi utenti virtuali hanno ancora le loro cartelle standard, come “Desktop”, “Musica” e “Immagini”. Non occupano molto spazio (110 MB), ma una volta che il pool di app viene rimosso, queste cartelle utente sono cruft e possono essere eliminate.

Riciclaggio pool di app

Una caratteristica chiave dei pool di app è il riciclaggio. Per impostazione predefinita, i pool di applicazioni vengono riciclati ogni 1740 minuti (29 ore) e quando il file di configurazione cambia. Puoi configurare il riciclaggio in base alle tue esigenze. Il riciclaggio degli app pool libera la memoria consumata dalle applicazioni in esecuzione in un app pool. Il riciclaggio può evitare che i processi in fuga consumino tutta la memoria del tuo server.

Quali tipi di cose usano la memoria nel tuo processo? Tutto ciò che si trova sullo stack e sull’heap – variabili statiche e proprietà, qualsiasi cosa nella cache di memoria, qualsiasi oggetto a cui si fa riferimento da un altro oggetto, qualsiasi blocco di memoria in attesa di essere smaltito, avete capito bene.

È possibile scegliere quali eventi si desidera registrare (o non registrare). Come potete vedere, non tutte le opzioni sono mostrate nella finestra di dialogo precedente: “Eventi di riciclaggio runtime” non sembrano essere configurabili. Questo non è del tutto vero.

Un riciclo avvia un nuovo processo e fa girare il processo corrente. Il nuovo processo, come ci si aspetterebbe, avrà un nuovo PID. Puoi cambiare questo comportamento così come altri comportamenti di riciclo in “Impostazioni avanzate…”. In effetti, è possibile modificare qualsiasi configurazione di riciclaggio in questo menu. La finestra di dialogo “Riciclaggio…” è ridondante in questo senso. Tuttavia, qui puoi disattivare il riciclaggio per le modifiche alla configurazione. Probabilmente non vuoi farlo però. La tua applicazione in esecuzione non riceverebbe gli aggiornamenti di configurazione.

Nota che “riciclo sovrapposto” implica che è possibile avere più di una istanza dell’applicazione. Dovreste disabilitarlo solo se la vostra applicazione lo richiede. Il riciclo sovrapposto previene le interruzioni che si verificherebbero se il riciclo aspettasse che il processo corrente scarichi le richieste prima di iniziare il nuovo processo. In altre parole, nessuna nuova richiesta verrebbe gestita fino al completamento delle richieste correnti o allo scadere del periodo di timeout configurabile (90 secondi per impostazione predefinita).

Configurazione avanzata

Ci sono troppe configurazioni di app pool per iterare in dettaglio in questo post. Per ora, una breve panoramica dovrà bastare. Farò una rapida carrellata di alcuni punti su ciascuna delle aree di “Impostazioni avanzate”, come mostrato di seguito.

  • L’impostazione “Generale” ti permetterà
    • di cambiare le versioni di .NET CLR
    • Permettere applicazioni a 32bit
    • Cambiare la modalità pipeline
    • Impostare la lunghezza della coda (1000 richieste per impostazione predefinita)
    • Impostare l’esecuzione continua o su richiesta
  • L’opzione “CPU” copre
    • Throttling
    • Processor affinity
  • “Process model” vi permetterà di scegliere le impostazioni per
    • Identity
    • Idle timeout
    • Max worker processes
    • Health monitoring (Dovresti disattivarlo localmente per il debugger, perché un debugger fermo non risponde al ping)
  • “Process Orphaning” è utile per il debug dei processi che non rispondono
  • “Rapid-Fail Protection” è buono per quando vuoi configurare le risposte del bilanciatore di carico ai fallimenti

Sites

“Sites” è il nodo accanto a “Application Pools” nel nodo server di IIS manager. È qui che si aggiungono e si gestiscono i siti web e i siti FTP (se installati). Mentre i pool di applicazioni hanno un dialogo di impostazioni avanzate, i siti hanno molte più opzioni di configurazione! I siti hanno molte caratteristiche, ognuna con le proprie configurazioni.

Queste caratteristiche cadono sotto tre titoli nel gestore IIS:

  • ASP.NET (se lo hai installato)
  • IIS
  • Gestione

Menu del contesto

Puoi passare da “Caratteristiche” a “Contenuto” quando hai un sito selezionato. Puoi cliccare con il tasto destro del mouse sul sito e aprire la cartella dal menu contestuale selezionando “Esplora”. Ci sono altre cose che puoi fare da questo menu contestuale, come modificare i permessi.

Questo in realtà porta solo alle proprietà della cartella del sito. Da lì, dovrai passare alla scheda “Sicurezza” per modificare effettivamente i permessi.

In tipico stile Windows, ci sono molti altri modi per modificare i permessi. Vedi i tuoi siti di aiuto preferiti di Windows per maggiori informazioni su come impostare i permessi delle cartelle.

Puoi eseguire diversi compiti comuni dal menu contestuale. All’interno della voce “Manage Website”, puoi avviare e fermare il sito web, aprirlo nel tuo browser e andare alle impostazioni avanzate. Sicuramente vorremo dare un’occhiata a queste, ma prima, parliamo di ciò che vedrai quando selezionerai “Modifica collegamenti…” che è anche disponibile nel pannello “Azione” come “Collegamenti…”.

Bindings

Avrai bisogno di aggiungere un collegamento al sito nella finestra di dialogo “Collegamenti…” se stai abilitando HTTPS per il tuo sito. Qui puoi anche impostare il nome dell’host e i numeri di porta. Se hai altri binding per il tuo sito, puoi aggiungere anche quelli qui. Forse stai usando i binding net.tcp o net.pipe (se hai aggiunto le funzionalità sul server e le hai abilitate per il sito). Oppure puoi impostare un indirizzo IP qui.

È possibile eseguire più di un sito in ascolto sulla stessa porta. Per fare questo, userai diversi nomi di host. Per esempio, potresti avere admin.example.com legato al tuo sito di amministrazione e blog.example.com legato al tuo blog. Tutto il traffico di example.com andrebbe allo stesso IP (load-balancer/server), ma IIS userebbe l’header host per dirigere il traffico al sito appropriato. Questi sono utili anche per le applicazioni white-label: acme.example.com, foo.example.com, bar.example.com.

Impostazioni di base

“Impostazioni di base…” è la stessa finestra di dialogo che si ottiene quando si imposta il sito per la prima volta. Probabilmente non avrai bisogno di andarci a meno che tu non voglia cambiare il pool di applicazioni o la posizione del sito o se vuoi connetterti come un utente diverso, piuttosto che come IUSR (pass-thru). Se hai bisogno di usare un account di servizio per accedere alla directory del sito, puoi scegliere “Connect as…” dalla finestra di dialogo “Edit Site”.

Nota: dovresti fare attenzione a proteggere qualsiasi directory che usi in IIS. Puoi trarre beneficio dalla lettura di come la directory predefinita inetpub è protetta.

Sottositi e directory virtuali

Puoi ospitare diverse applicazioni e directory virtuali sotto un sito. Le applicazioni possono essere eseguite nei propri pool di applicazioni, ma le directory virtuali no. Come mostrato di seguito, ho impostato un’applicazione admin e una directory virtuale di blog sotto Site2. Si può accedere ad esse usando http://localhost/admin e http://localhost/blog. Entrambi risponderanno con pagine di errore integrate a meno che non ci sia qualcosa nelle directory.

Le directory di origine per le sotto-applicazioni e le directory virtuali non devono necessariamente essere sotto-directory del sito padre. Puoi tenere queste directory ovunque tu voglia. Potresti voler mappare alcune risorse web comuni (immagini o file JS) su un percorso relativo per più siti. Le directory virtuali sono perfette per questo.

Documenti di default e di errore

Quando un utente visita la root del tuo sito (www.example.com/), gli verrà presentato un documento di default. I documenti predefiniti sono mostrati qui sotto. Puoi aggiungere i tuoi documenti, rimuoverli o disabilitarli del tutto. Se li disabiliti, l’utente otterrà una brutta schermata di errore 403 a meno che tu non abbia dato il permesso di elencare il contenuto della cartella (non raccomandato). È meglio avere un documento predefinito sul posto.

Ho messo un documento indice in ogni directory: il sito, l’applicazione e la directory virtuale.

  • Sito2
    • Admin
      • index.html
    • Blog
      • index.html
    • index.html
  • http://localhost/caricherà il documento di default a Site2/index.html
  • http://localhost/admin/ caricherà il documento di default a Site2/Admin/index.html
  • http://localhost/blog/ caricherà il documento di default a Site2/Blog/index.html

Se sei preoccupato che IIS occupi memoria e CPU sulla tua macchina, non farlo. A meno che i processi worker non siano in esecuzione (e gestiscano richieste con elaborazione pesante), rimane inattivo. Se stai vedendo un pesante utilizzo della CPU, questa guida alla risoluzione dei problemi può aiutarti, sempre che tu stia usando ASP.NET.

CLI e gestione remota

AppCmd.exe

AppCmd è lo strumento CLI integrato per configurare e gestire IIS. Puoi usarlo per creare siti e pool di applicazioni, collegare directory virtuali e modificare le configurazioni. Vediamo alcune cose che può fare.

Prima di tutto, aggiungi %systemroot%\system32\inetsrv\ al tuo percorso in modo da poter eseguire appCmd da un prompt dei comandi in qualsiasi posizione.

Esegui il prompt dei comandi come amministratore.

setx PATH "%PATH%;%systemroot%\system32\inetsrv\"

Prova i seguenti comandi per esplorare appcmd:

  • Esegui appcmd /? per vedere il testo della guida
  • Vedi quali applicazioni sono in esecuzione con appcmd list app
  • Usa appcmd list backup per vedere i backup della tua configurazione di IIS

Aggiungi sito

appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81:

Ora elenca nuovamente le applicazioni. Non vedrai il nuovo sito che hai aggiunto perché non è considerato un’applicazione. Se vai nella GUI e aggiorni i tuoi siti, vedrai il nuovo sito, ma sarà rotto. Abbiamo bisogno di aggiungere un’app usando appcmd.

appcmd add app /site.name:"Dummy Site" /path:"/"

Questo aggiungerà solo l’app al sito alla radice. Creerà un’app chiamata “Dummy Site/”. Abbiamo ancora bisogno di collegare l’app a una directory virtuale e poi puntare a un percorso fisico.

appcmd add vdir /app.name:"Dummy Site/" path:"/"appcmd set vdir "Dummy Site/" /physicalPath:"c:\inetpub\wwwroot"

Questo è il modo verboso di usare appcmd per creare un sito IIS. C’è un modo più semplice.

Il modo EZ

Puoi risparmiare un sacco di battute durante la creazione del sito se imposti il parametro physicalPath nel primo comando. Questo farà tutto in un colpo solo:

appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81: /physicalPath:"c:\inetpub\wwwroot"

Ma conoscere gli altri comandi ti dà un’idea migliore di come funziona veramente un’applicazione IIS sotto il cofano. In passato, ho usato appcmd nello script post-costruzione dei file proj ASP.NET per assicurarmi che il sito fosse impostato localmente sulle nuove macchine degli sviluppatori. Puoi anche fare un backup e un ripristino della configurazione di IIS usando appcmd.

Deploying updates

Per darti un’altra idea su come usare appcmd, considera di fare quanto segue:

  1. Crea una cartella “sites”.
  2. Crea una sottocartella per ogni sito.
  3. Deploy delle versioni nelle sottocartelle sotto ognuna di queste.
  4. Stadio delle nuove versioni.
  5. Utilizzare appcmd per aggiornare il sito per usare la nuova cartella.

Data un’applicazione chiamata “Hello World” che punta a C:\Sites\HelloWorld\1.0.0 e una nuova build “1.0.1” che è stata messa in scena in C:\Sites\HelloWorld\1.0.1 , quando è il momento di andare live, è possibile utilizzare il seguente comando per passare il sito alla nuova versione:

appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.1"appcmd recycle apppool /apppool.name:defaultapppool

E se è necessario eseguire il rollback del sito, eseguire quanto segue:

appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.0"appcmd recycle apppool /apppool.name:defaultapppool

Ecco una grande guida di Microsoft con ulteriori informazioni sull’utilizzo di AppCmd.

IIS reset

“iisreset” è un eseguibile separato usato per fermare, avviare, riavviare IIS o per riavviare il computer (/REBOOT). Puoi passargli un parametro “computername” per fargli controllare IIS su un altro computer. Dovrai eseguirlo come amministratore. Molti sviluppatori e amministratori di sistema amano usarlo dopo un deployment, e anche questa non è una cattiva idea!

PowerShell

PowerShell ha un potente set di strumenti per gestire IIS. Potresti anche inviare il comando iisreset da remoto usando Invoke-Command -ComputerName “computername” -ScriptBlock {iisreset}, a condizione che tu permetta l’invocazione remota di comandi arbitrari sui tuoi server, e questa non è generalmente una buona idea!

Nonostante le mie preoccupazioni sulla sicurezza con l’invio di comandi remoti arbitrari usando PowerShell, le cmdlet di amministrazione di IIS sono davvero utili per l’amministrazione di server web in stile DevOps. Puoi controllare questa documentazione per l’amministrazione di IIS usando PowerShell per avere un’idea di ciò che può fare.

Spegnere

Nonostante tutte le caratteristiche, configurazioni e comandi che abbiamo coperto in questo post, abbiamo solo grattato la superficie. Ogni caratteristica ha le sue configurazioni, e ci sono molte estensioni che possono essere aggiunte installando l’estensione Web Platform Installer.

E con questo, portiamo questo post e il server IIS ad una conclusione:

iisreset /stop

Con APM, metriche di salute del server e integrazione del registro degli errori, migliora le prestazioni della tua applicazione con Stackify Retrace. Prova la tua prova gratuita di due settimane oggi stesso

.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.