Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa procedura dettagliata illustra come usare il modulo di riscrittura url e il routing delle richieste di applicazione (ARR) per implementare un server proxy inverso per più applicazioni back-end.
Prerequisiti
Per eseguire questa procedura dettagliata, è necessario disporre degli elementi seguenti:
- IIS 7 o versione successiva con servizio ruolo di ASP.NET abilitato.
- URL Rewrite Module installed (la versione 2.0 è necessaria se si vuole completare la parte relativa alla riscrittura della risposta)
- Application Request Routing versione 1.0 o versione 2.0 installata
Introduzione
Usando il modulo di riscrittura URL e il routing delle richieste dell'applicazione, è possibile implementare configurazioni di bilanciamento del carico complesse e flessibili e proxy inverso. Uno scenario di proxy inverso molto comune consiste nel rendere disponibili diverse applicazioni Web interne su Internet. Un server Web accessibile da Internet viene usato come server proxy inverso che riceve le richieste Web e quindi le inoltra a diverse applicazioni Intranet per l'elaborazione: la figura seguente illustra una configurazione tipica per uno scenario di proxy inverso:
Supponendo che il server ARR abbia un nome http://contoso.comdi dominio , è possibile accedere a ogni applicazione Web usando questi URL:
http://contoso.com/webmail/http://contoso.com/payroll/
Quando viene effettuata una richiesta a http://contoso.com/webmail/default.aspx, ARR inoltra queste richieste a un server interno usando l'URL http://webmail/default.aspx. Analogamente, le richieste a http://contoso.com/payroll/ vengono inoltrate a http://payroll/default.aspx.
Inoltre, se l'applicazione interna inserisce collegamenti nel codice HTML di risposta che si collega a un'altra posizione in tali applicazioni, tali collegamenti devono essere modificati prima che la risposta venga restituita al client. Ad esempio, una pagina da http://webmail/default.aspx potrebbe contenere un collegamento simile al seguente:
<a href="/default.aspx?id=1">link</a>
Il server ARR deve quindi modificare il collegamento seguente:
<a href="/webmail/default.aspx?id=1">link</a>
Creazione dei siti Web di esempio
Per semplicità, lo scenario di proxy inverso con cui si lavorerà in questa procedura dettagliata verrà implementato in un singolo server, con iis "Sito Web predefinito" che funge da sito proxy inverso e webmail e applicazioni di retribuzione ospitate in siti Web IIS separati nello stesso server.
Per creare i siti Web di esempio:
Creare due cartelle denominate "webmail" e "payroll" nella cartella seguente:
%SystemDrive%\inetpub\ folder.Creare due siti Web IIS denominati "webmail" e "payroll" che puntano alle cartelle corrispondenti in
%SystemDrive%\inetpub\. Usare porte IP diverse per ogni sito.
Per creare i siti, è possibile usare i comandi seguenti:%windir%\System32\inetsrv\appcmd.exe add site /name:"webmail" /bindings:http/*:8081: /physicalPath:"%SystemDrive%\inetpub\webmail" %windir%\System32\inetsrv\appcmd.exe add site /name:"payroll" /bindings:http/*:8082: /physicalPath:"%SystemDrive%\inetpub\payroll"Creare un file denominato default.aspx nella cartella seguente:
%SystemDrive%\inetpub\webmailCopiare il markup ASP.NET seguente, incollarlo nel file e salvare il file:
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reverse Proxy Test - WebMail Application</title> </head> <body> <h1>Reverse Proxy Test Page - WebMail Application</h1> <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %><p> <p><a href="<%= Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p> </body> </html>Creare un file denominato default.aspx nella cartella seguente:
%SystemDrive%\inetpub\payrollCopiare il markup ASP.NET seguente, incollarlo nel file e salvare il file:
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reverse Proxy Test - Payroll Application</title> </head> <body> <h1>Reverse Proxy Test Page - Payroll Application</h1> <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %><p> <p><a href="<%= Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p> </body> </html>Per assicurarsi che i siti funzionino correttamente, aprire un'esplorazione Web e richiedere gli URL seguenti:
http://localhost:8081/default.aspxhttp://localhost:8082/default.aspx
Configurazione delle regole per il proxy inverso
In questa sezione della procedura dettagliata, configurerai la funzionalità di proxy inverso per lavorare con i siti Web di esempio da te creati.
Abilitazione della funzionalità proxy inverso
La funzionalità del proxy inverso è disabilitata per impostazione predefinita, quindi è necessario iniziare abilitandola.
- Aprire Gestione IIS
- Selezionare un nodo server nell'elenco ad albero sul lato sinistro e poi cliccare sulla caratteristica "Routing delle richieste dell'applicazione".
- Selezionare la casella di controllo "Abilita proxy". Lasciare i valori predefiniti per tutte le altre impostazioni in questa pagina:
Creazione di una regola per l'applicazione webmail
Verranno create due regole di riscrittura:
- Regola di riscrittura che redirigerà qualsiasi richiesta all'applicazione webmail a
http://localhost:8081/alla condizione che il percorso URL richiesto inizi con "webmail". - Regola di riscrittura che farà da proxy per qualsiasi richiesta all'applicazione payroll a
http://localhost:8082/a condizione che il percorso URL richiesto inizi con "payroll".
Per aggiungere le regole di riscrittura del proxy inverso:
Aprire il file web.config che si trova nel percorso seguente:
%SystemDrive%\inetpub\wwwroot\Nell'elemento /configuration/system.webServer aggiungere quanto segue e quindi salvare il file:
<rewrite> <rules> <rule name="Reverse Proxy to webmail" stopProcessing="true"> <match url="^webmail/(.*)" /> <action type="Rewrite" url="http://localhost:8081/{R:1}" /> </rule> <rule name="Reverse Proxy to payroll" stopProcessing="true"> <match url="^payroll/(.*)" /> <action type="Rewrite" url="http://localhost:8082/{R:1}" /> </rule> </rules> </rewrite>
Per altre informazioni sulla creazione di regole di riscrittura, vedere Creazione di regole di riscrittura per il modulo di riscrittura URL.
Test della funzionalità del proxy inverso
Aprire un Web browser e effettuare una richiesta a http://localhost/webmail/default.aspx. Verrà visualizzata la risposta dalla pagina di test di Webmail. Inoltre, effettuare una richiesta a http://localhost/payroll/default.aspx. Dovresti vedere la risposta dalla pagina di test della retribuzione.
Si noti che in entrambi i casi il collegamento all'interno della risposta punta a http://localhost/default.aspx. Se si fa clic su questo collegamento, verrà restituita la risposta 404 (File non trovato) dal server. Nella sezione successiva imparerai come creare una regola in uscita per correggere i collegamenti nel codice HTML di risposta generato dall'applicazione.
Configurazione delle regole per la riscrittura delle risposte
Questa sezione della documentazione si applica al modulo di riscrittura URL versione 2.0 per IIS 7.
Si definirà una regola in uscita che sostituisce tutti i collegamenti all'interno del codice HTML della risposta come indicato di seguito:
<a href="/default.aspx">...</a>
verrà sostituito con:
<a href="/webmail/default.aspx">...</a>
(se la risposta proviene dall'applicazione webmail)
e
<a href="/payroll/default.aspx">...</a>
(se la risposta proviene dall'applicazione di retribuzione)
Avviso
Quando le intestazioni di risposta o il contenuto della risposta vengono modificate da una regola di riscrittura in uscita, è necessario prestare particolare attenzione per assicurarsi che il testo inserito nella risposta non contenga codice eseguibile lato client, che può causare vulnerabilità di scripting tra siti. Ciò è particolarmente importante quando la regola di riscrittura usa dati non attendibili, ad esempio intestazioni HTTP o stringa di query, per compilare la stringa che verrà inserita nella risposta HTTP. In questi casi, la stringa di sostituzione deve essere codificata in formato HTML usando la funzione HtmlEncode , ad esempio:
<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />
Per creare la regola, seguire questa procedura:
- Passare a Gestione IIS
- Selezionare "Sito Web predefinito"
- Nella visualizzazione funzionalità fare clic su "Riscrittura URL"
- Nel riquadro Azioni sul lato destro fare clic su "Aggiungi regole...". Nella finestra di dialogo "Aggiungi regole" selezionare la "Regola vuota" nella categoria "Regole in uscita" e fare clic su OK:
Ora devi definire la regola di uscita specifica. Nel modulo di riscrittura URL 2.0 viene definita una regola di riscrittura in uscita specificando le informazioni seguenti:
- Nome della regola.
- Precondizione facoltativa che controlla se questa regola deve essere applicata a una risposta.
- Modello da usare per la corrispondenza della stringa nella risposta.
- Set facoltativo di condizioni.
- Azione da eseguire se viene trovata una corrispondenza con un criterio e tutti i controlli delle condizioni hanno avuto esito positivo.
Denominazione della regola
Nella casella di testo "Name" immettere un nome che identificherà in modo univoco la regola, ad esempio: "Aggiungi prefisso dell'applicazione".
Definizione di una precondizione
Una precondizione viene usata per valutare se la valutazione delle regole in uscita deve essere eseguita su una risposta. Ad esempio, se una regola che modifica il contenuto HTML, solo le risposte HTTP con intestazione content-type impostata su "text/html" devono essere valutate rispetto a questa regola. La valutazione delle regole in uscita e la riscrittura del contenuto è un'operazione che può influire negativamente sulle prestazioni di un'applicazione Web. Pertanto, usare le precondizioni per limitare i casi in cui vengono applicate le regole in uscita.
Poiché la regola che si sta creando deve essere applicata solo alle risposte HTML, si definirà una precondizione che verifica se il tipo di contenuto dell'intestazione della risposta HTTP è equial a "text/html".
Per definire una precondizione:
Nell'elenco Pre-condizioni selezionare "<Crea nuova condizione preliminare...>".
Verrà visualizzata la finestra di dialogo dell'Editor di precondizione, dove sarà necessario definire la precondizione. Specificare le impostazioni di precondizione come indicato di seguito:
Nome: "IsHTML"
Uso di: "Espressioni regolari"
Fare clic su "Aggiungi" per visualizzare la finestra di dialogo "Aggiungi condizione". In questa finestra di dialogo specificare:
Fare clic su OK per salvare la precondizione e tornare alla pagina "Modifica regola".
Definizione di un ambito corrispondente
La regola di riscrittura in uscita può operare sul contenuto di un'intestazione HTTP o sul contenuto del corpo della risposta. Questa regola deve sostituire i collegamenti nel contenuto della risposta, quindi nell'elenco a discesa "Ambito corrispondente" scegliere "Risposta".
Definizione di un filtro tag
I filtri tag vengono usati per definire l'ambito del criterio corrispondente solo a determinati elementi HTML, invece di valutare l'intera risposta rispetto al modello della regola. La corrispondenza dei criteri è un'operazione a elevato utilizzo di CPU e, se un'intera risposta viene valutata rispetto a un modello, può rallentare significativamente il tempo di risposta dell'applicazione Web. I filtri tag consentono di specificare che i criteri di ricerca devono essere applicati solo all'interno del contenuto di determinati tag HTML, riducendo in modo significativo la quantità di dati che devono essere valutati confrontandoli con il modello di espressione regolare.
Per definire un filtro tag, espandi l'elenco a discesa "Corrispondi al contenuto all'interno di: " e quindi seleziona e controlla la casella di controllo "A (attributo href)".
In questo modo la regola viene impostata per applicare il criterio solo al valore dell'attributo href del collegamento ipertestuale, come nell'esempio seguente:
<a href="this string will be used for pattern matching">Some link</a>
Definizione di un modello
Nella casella di testo "Pattern" immettere la stringa seguente:
^/(.*)
Questa stringa è un'espressione regolare che specifica che il criterio corrisponderà a qualsiasi stringa di percorso URL che inizia con il simbolo "/".
Si noti l'utilizzo delle parentesi all'interno del modello. Queste parentesi creano un gruppo di acquisizione, a cui è possibile fare riferimento in un secondo momento nella regola usando i back-reference.
Definizione di una condizione
È necessario modificare i collegamenti nel codice HTML della risposta solo se la risposta proviene dall'applicazione webmail o payroll. Per verificare che venga usata una condizione che analizza il percorso URL richiesto dal client. Si definirà anche un modello di condizione che acquisisce la cartella dell'applicazione dall'URL richiesto, in modo che la regola possa riutilizzare tale condizione durante la riscrittura dei collegamenti nella risposta.
- Espandi il gruppo delle condizioni.
- Fare clic su "Aggiungi..." per visualizzare la finestra di dialogo per la definizione delle condizioni.
- Per "Condition input:" immettere questa stringa: "{URL}". In questo modo viene configurato il modulo di riscrittura URL per l'uso del percorso URL richiesto dal client Web.
- Nella casella combinata a discesa selezionare "Corrisponde al modello".
- Immettere
^/(webmail|payroll)/.*nella casella di testo Pattern. Questa espressione regolare viene usata per trovare le corrispondenze con i percorsi URL che iniziano con/webmailo/payroll. La parentesi all'interno del criterio acquisisce la parte della stringa url corrispondente, in modo che possa essere usata durante la costruzione dell'URL di sostituzione. - Fare clic su OK per salvare la condizione e tornare all'interfaccia utente "Aggiungi regola".
Definizione di un'azione
Scegliere il tipo di azione "Riscrivi" elencato nella casella di gruppo "Azione". Nella casella di testo "Valore" immettere la stringa seguente:
/{C:1}/{R:1}
Questa stringa specifica il nuovo valore a cui deve essere riscritto l'indirizzo del collegamento. {C:1} è un riferimento di ritorno al gruppo di cattura del pattern condizionale e verrà sostituito con le stringhe "webmail" o "payroll". {R:1} è un riferimento indietro al gruppo di cattura del modello della regola e in questo caso specifico verrà sostituito con il percorso URL originale utilizzato nel collegamento ipertestuale.
Lasciare i valori predefiniti per tutte le altre impostazioni. La pagina delle proprietà "Modifica regola in uscita" dovrebbe essere simile alla seguente:
Salvare la regola facendo clic sull'azione "Applica" sul lato destro.
Per controllare la configurazione delle regole appena create, aprire un file web.config che si trova in %SystemDrive%\inetput\wwwroot\. In questo file verrà visualizzata la sezione contenente questa <rewrite> definizione di regola:
<rewrite>
<rules>
<rule name="Reverse Proxy to webmail" stopProcessing="true">
<match url="^webmail/(.*)" />
<action type="Rewrite" url="http://localhost:8081/{R:1}" />
</rule>
<rule name="Reverse Proxy to payroll" stopProcessing="true">
<match url="^payroll/(.*)" />
<action type="Rewrite" url="http://localhost:8082/{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="Add application prefix" preCondition="IsHTML">
<match filterByTags="A" pattern="^/(.*)" />
<conditions>
<add input="{URL}" pattern="^/(webmail|payroll)/.*" />
</conditions>
<action type="Rewrite" value="/{C:1}/{R:1}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Verifica della regola
Per verificare che la regola riscriva correttamente gli URL nella risposta, aprire un Web browser e effettuare una richiesta a http://localhost/webmail/default.aspx o http://localhost/payroll/default.aspx. Si noterà che la regola di riscrittura in uscita ha modificato il collegamento all'interno della risposta HTML:
Sommario
In questa procedura dettagliata si è appreso come configurare il modulo di riscrittura url e il routing delle richieste dell'applicazione per implementare uno scenario di proxy inverso. Si è anche appreso come usare la nuova funzionalità di riscrittura in uscita del modulo di riscrittura URL 2.0 per correggere i collegamenti nelle risposte delle applicazioni prima di usarle nel client Web.
Si noti che quando si usa il proxy inverso è spesso necessario riscrivere le intestazioni di risposta HTTP. Per informazioni su come usare il modulo di riscrittura URL 2.0 per modificare l'intestazione HTTP della risposta, vedere Modifica delle intestazioni di risposta HTTP.