Python-web-apps configureren voor IIS
Wanneer u Internet Information Services (IIS) gebruikt als webserver op een Windows-computer (inclusief virtuele Windows-machines in Azure), moet u de Python-webtoepassing configureren om IIS in staat te stellen Python-code correct te verwerken. De configuratie wordt uitgevoerd via instellingen in het web.config
-bestand voor de Python-web-app. In dit artikel wordt beschreven hoe u de benodigde instellingen configureert.
Voorwaarden
Python op Windows geïnstalleerd. Als u een web-app wilt uitvoeren, installeert u eerst uw vereiste versie van Python rechtstreeks op de Windows-hostcomputer, zoals beschreven in Python-interpreters installeren.
- Identificeer de locatie van de
python.exe
-interpreter. Voor het gemak kunt u die locatie toevoegen aan uw PATH-omgevingsvariabele.
- Identificeer de locatie van de
Vereiste pakketten geïnstalleerd. Voor een toegewezen host kunt u de globale Python-omgeving gebruiken om uw app uit te voeren in plaats van een virtuele omgeving. Daarom kunt u alle vereisten van uw app installeren in de globale omgeving door de opdracht
pip install -r requirements.txt
uit te voeren.
Stel web.config in om te verwijzen naar de Python-interpreter
Met het web.config
-bestand voor uw Python-toepassing wordt de IIS-webserver (versie 7 of hoger) die wordt uitgevoerd in Windows geïnstrueerd over hoe Python-aanvragen moeten worden verwerkt via HttpPlatformHandler (aanbevolen) of FastCGI. Visual Studio-versies 2015 en eerder brengen deze wijzigingen automatisch aan. Voor Visual Studio 2017 en hoger moet u het web.config
bestand handmatig wijzigen.
Als uw project nog geen web.config
bestand bevat, kunt u er een toevoegen door met de rechtermuisknop op de projectmap te klikken, Toevoegen > nieuw item te selecteren en te zoeken naar web.config
of een leeg XML-bestand web.config
te maken.
Optie 1: HttpPlatformHandler configureren
De HttpPlatform-module geeft socketverbindingen rechtstreeks door aan een zelfstandig Python-proces. Met deze passthrough kunt u elke gewenste webserver uitvoeren, maar hiervoor is een opstartscript vereist waarmee een lokale webserver wordt uitgevoerd. Deze benadering wordt meestal uitgevoerd met behulp van een Python-webframework, zoals Flask of Django. U geeft het script op in het <httpPlatform>
element van het web.config
-bestand. Het kenmerk processPath
verwijst naar de Python-interpreter van de site-extensie. Het kenmerk arguments
verwijst naar het opstartscript waarop een lokale webserver wordt uitgevoerd, in dit geval runserver.py
en eventuele argumenten die u wilt opgeven:
<?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 dit voorbeeld bevat de omgevingsvariabele HTTP_PLATFORM_PORT
de poort waarop uw lokale server moet luisteren naar verbindingen van localhost
. In dit voorbeeld ziet u ook hoe u een andere omgevingsvariabele maakt, SERVER_PORT
. U kunt indien nodig omgevingsvariabelen maken en toewijzen.
Optie 2: de FastCGI-handler configureren
U kunt ook FastCGI gebruiken om uw apps te configureren. FastCGI is een interface die op aanvraagniveau werkt. IIS ontvangt binnenkomende verbindingen en stuurt elke aanvraag door naar een WSGI-app die wordt uitgevoerd in een of meer permanente Python-processen.
Notitie
Hoewel u uw project kunt instellen met FastCGI, raden we u aan HttpPlatformHandler- te gebruiken om uw apps te configureren, omdat het WFastCGI--project niet meer wordt onderhouden en kan dit leiden tot bugs.
Als u FastCGI wilt gebruiken, moet u eerst het wfastcgi-pakket installeren en configureren zoals beschreven in pypi.org/project/wfastcgi/.
Wijzig vervolgens het web.config
-bestand van uw toepassing om de volledige paden naar het uitvoerbare python.exe
en het wfastcgi.py
-bestand in de PythonHandler
sleutel op te nemen. In de volgende stappen wordt ervan uitgegaan dat Python is geïnstalleerd in de map c:\python36-32 en dat de app-code zich in de map c:\home\site\wwwroot bevindt. Pas deze waarden voor uw paden dienovereenkomstig aan.
Wijzig de
PythonHandler
vermelding in hetweb.config
bestand zodat het pad overeenkomt met de Python-installatielocatie. Zie IIS Configuration Reference (iis.net) voor meer informatie.<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>
Voeg in de
<appSettings>
sectie van hetweb.config
-bestand sleutels toe voorWSGI_HANDLER
,WSGI_LOG
(optioneel) enPYTHONPATH
:<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>
Deze
<appSettings>
waarden zijn beschikbaar voor uw app als omgevingsvariabelen:- De waarde voor de
PYTHONPATH
-sleutel kan naar eigen inzicht worden uitgebreid, maar moet de root van uw app bevatten. - De
WSGI_HANDLER
-sleutel moet verwijzen naar een WSGI-app die kan worden geïmporteerd vanuit uw app. - De
WSGI_LOG
-sleutel is optioneel, maar de sleutel wordt aanbevolen voor het opsporen van fouten in uw app.
- De waarde voor de
Stel de
WSGI_HANDLER
vermelding in hetweb.config
-bestand in, indien van toepassing voor het framework dat u gebruikt:Bottle: Voeg haakjes toe na de
app.wsgi_app
waarde, zoals getoond in dit voorbeeld. De haakjes zijn nodig omdat het object een functie is in plaats van een variabele. U kunt de syntaxis in hetapp.py
-bestand zien.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask-: wijzig de
WSGI_HANDLER
-waarde naar<project_name>.app
als<project_name>
overeenkomt met de naam van uw project. U kunt de exacte identificatie vinden door naar defrom <project_name> import app
-verklaring in hetrunserver.py
-bestand te kijken. Als het project bijvoorbeeld de naamFlaskAzurePublishExample
heeft, wordt de vermelding als volgt weergegeven:<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django: er zijn twee wijzigingen nodig in het
web.config
-bestand voor Django-projecten.Wijzig de
WSGI_HANDLER
waarde indjango.core.wsgi.get_wsgi_application()
. Het object bevindt zich in het bestandwsgi.py
.<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
Voeg de volgende vermelding toe direct na de vermelding voor de
WSGI_HANDLER
sleutel. Vervang de waardeDjangoAzurePublishExample
door de naam van uw project:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Django-apps alleen,: Voeg in het
settings.py
-bestand van het Django-project uw site-URL-domein of IP-adres toe aan deALLOWED_HOSTS
invoer. Vervang 1.2.3.4 door uw URL of IP-adres:# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']
Als u uw URL niet toevoegt aan de matrixresultaten, ziet u de volgende fout:
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
Wanneer de matrix leeg is, staat Django automatisch 'localhost'
en '127.0.0.1'
toe als hosts. Als u uw productie-URL toevoegt, zijn deze hostsites niet automatisch toegestaan. Daarom kunt u afzonderlijke ontwikkelings- en productiekopieën van het settings.py
-bestand onderhouden of omgevingsvariabelen gebruiken om de runtimewaarden te beheren.
Implementeren naar IIS of een virtuele Windows-machine
Wanneer u het juiste web.config
-bestand in uw project hebt, kunt u publiceren naar de computer waarop IIS wordt uitgevoerd vanuit Solution Explorer-. Klik met de rechtermuisknop op het project, selecteer Publicerenen selecteer vervolgens IIS, FTP, enzovoort.. In dit geval kopieert Visual Studio alleen de projectbestanden naar de server. U bent verantwoordelijk voor alle configuratie aan de serverzijde.