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

  1. Wijzig de PythonHandler vermelding in het web.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>
    
  2. Voeg in de <appSettings> sectie van het web.config-bestand 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, 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 het app.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 de from <project_name> import app-verklaring in het runserver.py-bestand te kijken. Als het project bijvoorbeeld de naam FlaskAzurePublishExampleheeft, 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. Django-apps alleen,: Voeg in het settings.py-bestand van het Django-project uw site-URL-domein of IP-adres toe aan de ALLOWED_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.