Delen via


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.
  • 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 er met de rechtermuisknop op te klikken, nieuw item toevoegen > te selecteren en web.config te zoeken 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 arguments kenmerk 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 (Web Server Gateway Interface) die wordt uitgevoerd in een of meer permanente Python-processen.

Notitie

Hoewel u uw project kunt instellen met FastCGI, wordt u aangeraden HttpPlatformHandler te gebruiken om uw apps te configureren, omdat het WFastCGI-project niet meer wordt onderhouden en mogelijk fouten veroorzaakt.

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 uitvoerbarepython.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.

  1. Wijzig de PythonHandler vermelding in het web.config-bestand zodat het pad overeenkomt met de Python-installatielocatie. Zie IIS-configuratiereferentie op 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>
    
  2. Voeg in de <appSettings> sectie van het bestandweb.config sleutels toe voor WSGI_HANDLER, WSGI_LOG (optioneel) en PYTHONPATH:

    <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.
  3. Stel de WSGI_HANDLER vermelding in het web.config-bestand in 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 ziet de syntaxis in het app.py-bestand .

      <!-- 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 id vinden door naar de from <project_name> import app instructie in het bestand runserver.py te kijken. Als het project bijvoorbeeld FlaskAzurePublishExample heet, 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 in django.core.wsgi.get_wsgi_application(). Het object bevindt zich in het bestand wsgi.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 waarde DjangoAzurePublishExample door de naam van uw project:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Alleen Django-apps: Voeg in het settings.py-bestand van het Django-project uw site-URL-domein of IP-adres toe aan de ALLOWED_HOSTS vermelding. 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 wilt u mogelijk 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.