Configurare app Web Python per IIS
Quando si usa Internet Information Services (IIS) come server Web in un computer Windows (incluse le macchine virtuali Windows in Azure), è necessario configurare l'applicazione Web Python per consentire a IIS di elaborare correttamente il codice Python. La configurazione viene eseguita tramite le impostazioni nel file web.config per l'app Web Python. Questo articolo descrive come configurare le impostazioni necessarie.
Prerequisiti
Python in Windows installato. Per eseguire un'app Web, installare prima di tutto la versione di Python necessaria direttamente nel computer host Windows come descritto in Installare gli interpreti Python.
- Identificare la posizione dell'interprete
python.exe
. Per comodità, aggiungere quindi tale percorso alla variabile di ambiente PATH.
- Identificare la posizione dell'interprete
Pacchetti necessari installati. Per un host dedicato, è possibile usare l'ambiente Python globale per eseguire l'app anziché un ambiente virtuale. Di conseguenza, è possibile installare tutti i requisiti dell'app nell'ambiente globale eseguendo il
pip install -r requirements.txt
comando .
Configurare web.config per fare riferimento all'interprete di Python
Il file web.config per l'applicazione Python indica al server Web IIS (versione 7 o successiva) in esecuzione in Windows come gestire le richieste Python tramite HttpPlatform, ASP.NET Core Module o FastCGI. Visual Studio versioni 2015 e precedenti apportano automaticamente queste modifiche. Per Visual Studio 2017 e versioni successive, è necessario modificare manualmente il file web.config .
Se il progetto non contiene già un file web.config , è possibile aggiungerne uno facendo clic con il pulsante destro del mouse sulla directory del progetto, selezionando Aggiungi > nuovo elemento e cercando web.config o creando un file XML web.config vuoto.
Configurare il gestore del modulo core ASP.Net
Il modulo ASP.NET Core facilita il trasferimento diretto delle connessioni socket a un processo Python indipendente. Questo approccio offre la flessibilità necessaria per usare qualsiasi server Web preferito, anche se richiede uno script di avvio responsabile dell'avvio di un server Web locale, in genere sfruttando un framework Web Python come Flask o Django. All'interno del web.config
file si definisce questo script all'interno dell'elemento <aspNetCore>
. In questo caso, l'attributo processPath
designa l'interprete Python associato all'estensione del sito, mentre l'attributo specifica lo arguments
script di avvio scelto, ad esempio runserver.py
, insieme agli argomenti desiderati.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="c:\python36-32\python.exe"
arguments="c:\home\site\wwwroot\runserver.py"
stdoutLogEnabled="true"
stdoutLogFile="c:\home\LogFiles\python.log"
startupTimeLimit="60"
processesPerApplication="16">
<environmentVariables>
<environmentVariable name="SERVER_PORT" value=".." />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>
Per altre informazioni sui file di ASP.NET web.config
, fare riferimento ASP.NET file web.config IIS.
Configurare il gestore HttpPlatform
Il modulo HttpPlatform passa le connessioni socket direttamente a un processo di Python autonomo. Questo pass-through consente di eseguire qualsiasi server Web desiderato, ma richiede uno script di avvio che esegue un server Web locale. Questo approccio viene in genere eseguito usando un framework Web Python, ad esempio Flask o Django. Specificare lo script nell'elemento <httpPlatform>
del file web.config . L'attributo processPath
punta all'interprete Python dell'estensione del sito. L'attributo arguments
punta allo script di avvio che esegue un server Web locale, in questo caso runserver.py
e qualsiasi argomento da fornire:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="c:\python36-32\python.exe"
arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
stdoutLogEnabled="true"
stdoutLogFile="c:\home\LogFiles\python.log"
startupTimeLimit="60"
processesPerApplication="16">
<environmentVariables>
<environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>
In questo esempio la HTTP_PLATFORM_PORT
variabile di ambiente contiene la porta su cui il server locale deve restare in ascolto per le connessioni da localhost. Questo esempio illustra anche come creare un'altra variabile di ambiente, SERVER_PORT
. È possibile creare e assegnare variabili di ambiente in base alle esigenze.
Configurare il gestore FastCGI
FastCGI è un'interfaccia che funziona a livello di richiesta. IIS riceve le connessioni in ingresso e inoltra ogni richiesta a un'app WSGI in esecuzione in uno o più processi Python persistenti.
Nota
È consigliabile usare HttpPlatform o ASP.NET Core Module per configurare le app, perché il progetto WFastCGI non viene più gestito.
Per usare FastCGI, installare e configurare innanzitutto il pacchetto wfastcgi come descritto in pypi.org/project/wfastcgi/.
Modificare quindi il file web.config dell'applicazione per includere i percorsi completi dell'eseguibile python.exe e il file wfastcgi.py nella PythonHandler
chiave. I passaggi seguenti presuppongono che Python sia installato nella cartella c:\python36-32 e che il codice dell'app si trova nella cartella c:\home\site\wwwroot . Modificare questi valori per i percorsi di conseguenza.
Modificare la
PythonHandler
voce nel file web.config in modo che il percorso corrisponda al percorso di installazione di Python. Per altre informazioni, vedere Informazioni di riferimento sulla configurazione di IIS (iis.net).<system.webServer> <handlers> <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/> </handlers> </system.webServer>
All'interno della sezione del file web.config aggiungere chiavi per
WSGI_HANDLER
,WSGI_LOG
(facoltativo) ePYTHONPATH
:<appSettings>
<appSettings> <add key="PYTHONPATH" value="c:\home\site\wwwroot"/> <!-- The handler here is specific to Bottle; see the next section. --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/> <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/> </appSettings>
Questi valori di
<appSettings>
sono disponibili come variabili di ambiente per l'app:- Il valore per la
PYTHONPATH
chiave può essere esteso liberamente, ma deve includere la radice dell'app. - La
WSGI_HANDLER
chiave deve puntare a un'app WSGI importabile dall'app. - La
WSGI_LOG
chiave è facoltativa, ma la chiave è consigliata per il debug dell'app.
- Il valore per la
Impostare la
WSGI_HANDLER
voce nel file web.config in base alle esigenze del framework in uso:Bottle: aggiungere parentesi dopo il
app.wsgi_app
valore come illustrato in questo esempio. Le parentesi sono necessarie perché l'oggetto è una funzione anziché una variabile. È possibile visualizzare la sintassi nel file app.py .<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask: modificare il valore
WSGI_HANDLER
in<project_name>.app
dove<project_name>
corrisponde al nome del progetto. È possibile trovare l'identificatore esatto esaminando l'istruzionefrom <project_name> import app
nel file runserver.py . Ad esempio, se il progetto è denominatoFlaskAzurePublishExample
, la voce viene visualizzata come segue:<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django: sono necessarie due modifiche al file web.config per i progetti Django.
Modificare il
WSGI_HANDLER
valore indjango.core.wsgi.get_wsgi_application()
. L'oggetto si trova nel file wsgi.py .<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
Aggiungere la voce seguente subito dopo la voce per la
WSGI_HANDLER
chiave. Sostituire il valoreDjangoAzurePublishExample
con il nome del progetto:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Solo app Django: nel file di settings.py del progetto Django aggiungere il dominio o l'indirizzo IP dell'URL del
ALLOWED_HOSTS
sito alla voce. Sostituire '1.2.3.4' con l'URL o l'indirizzo IP:# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']
Se non si aggiunge l'URL ai risultati della matrice, viene visualizzato l'errore seguente:
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
Quando la matrice è vuota, Django consente 'localhost'
automaticamente e '127.0.0.1'
come host. Se si aggiunge l'URL di produzione, questi siti host non sono consentiti automaticamente. Per questo motivo, è possibile mantenere copie separate di sviluppo e produzione del file di settings.py oppure usare le variabili di ambiente per controllare i valori di runtime.
Eseguire la distribuzione in IIS o in una macchina virtuale Windows
Quando si dispone del file web.config corretto nel progetto, è possibile pubblicare nel computer che esegue IIS da Esplora soluzioni. Fare clic con il pulsante destro del mouse sul progetto, scegliere Pubblica, quindi selezionare IIS, FTP e così via. In questo caso, Visual Studio copia solo i file di progetto nel server. Si è responsabili di tutte le configurazioni lato server.
Contenuto correlato
- Informazioni di riferimento sulla configurazione di IIS (iis.net)
- Installare interpreti Python
- Macchine virtuali Windows in Azure
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per