Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Al usar Internet Information Services (IIS) como servidor web en un equipo Windows (incluidas máquinas virtuales Windows en Azure), debe configurar la aplicación web de Python para permitir que IIS procese correctamente el código de Python. La configuración se realiza mediante la configuración del archivo web.config para la aplicación web de Python. En este artículo se describe cómo configurar las opciones necesarias.
Prerrequisitos
Python ha sido instalado en Windows. Para ejecutar una aplicación web, instale primero la versión necesaria de Python directamente en el equipo host de Windows, como se describe en Instalación de intérpretes de Python.
- Identifique la ubicación del intérprete depython.exe . Para mayor comodidad, puede agregar esa ubicación a la variable de entorno PATH.
Paquetes necesarios instalados. Para un host dedicado, puede usar el entorno global de Python para ejecutar la aplicación en lugar de un entorno virtual. En consecuencia, puedes instalar todos los requisitos de la aplicación en el entorno global ejecutando el comando
pip install -r requirements.txt.
Configuración de web.config para que apunte al intérprete de Python
El archivo web.config de la aplicación de Python indica al servidor web IIS (versión 7 o posterior) que se ejecuta en Windows sobre cómo debe controlar las solicitudes de Python a través de HttpPlatformHandler (recomendado) o FastCGI. Las versiones de Visual Studio 2015 y anteriores realizan estas modificaciones automáticamente. Para Visual Studio 2017 y versiones posteriores, debe modificar manualmente el archivo web.config .
Si el proyecto aún no contiene un archivo web.config , puede agregar uno haciendo clic con el botón derecho en el directorio del proyecto, seleccionando Agregar > nuevo elemento y buscando web.config o creando un archivo XML deweb.config en blanco.
Opción 1: Configurar HttpPlatformHandler
El módulo HttpPlatform pasa conexiones de socket directamente a un proceso independiente de Python. Este paso a través le permite ejecutar cualquier servidor web que desee, pero requiere un script de inicio que ejecute un servidor web local. Este enfoque se suele realizar mediante un marco web de Python, como Flask o Django. Especifique el script en el <httpPlatform> elemento del archivo web.config . El atributo processPath apunta al intérprete de Python de la extensión de sitio. El arguments atributo apunta al script de inicio que ejecuta un servidor web local, en este caso runserver.py y los argumentos que quiera proporcionar:
<?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>
En este ejemplo, la variable de entorno HTTP_PLATFORM_PORT contiene el puerto en el que el servidor local debe escuchar las conexiones desde localhost. En este ejemplo también se muestra cómo crear otra variable de entorno, SERVER_PORT. Puede crear y asignar variables de entorno según sea necesario.
Opción 2: Configurar el controlador FastCGI
Como alternativa, puede usar FastCGI para configurar las aplicaciones. FastCGI es una interfaz que funciona en el nivel de solicitud. IIS recibe conexiones entrantes y reenvía cada solicitud a una aplicación de interfaz de puerta de enlace de servidor web (WSGI) que se ejecuta en uno o varios procesos persistentes de Python.
Nota
Aunque puede configurar el proyecto mediante FastCGI, se recomienda usar HttpPlatformHandler para configurar las aplicaciones porque el proyecto WFastCGI ya no se mantiene y podría provocar errores.
Para usar FastCGI, primero instale y configure el paquete wfastcgi como se describe en pypi.org/project/wfastcgi/.
A continuación, modifique el archivo web.config de la aplicación para incluir las rutas de acceso completas al archivo ejecutable depython.exe y al archivo wfastcgi.py en la PythonHandler clave. En los pasos siguientes se supone que Python está instalado en la carpeta c:\python36-32 y el código de la aplicación se encuentra en la carpeta c:\home\site\wwwroot. Ajuste estos valores para tus rutas según corresponda.
Modifique la
PythonHandlerentrada en el archivo web.config para que la ruta de acceso coincida con la ubicación de instalación de Python. Para obtener más información, consulte Referencia de configuración de IIS en 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>En la
<appSettings>sección del archivo web.config , agregue claves paraWSGI_HANDLER,WSGI_LOG(opcional) yPYTHONPATH:<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>Estos valores
<appSettings>están disponibles para la aplicación como variables de entorno:- El valor de la clave
PYTHONPATHse puede extender libremente, pero debe incluir la raíz de la aplicación. - La clave de
WSGI_HANDLERdebe apuntar a una aplicación WSGI que se pueda importar desde la aplicación. - La clave
WSGI_LOGes opcional, pero se recomienda para depurar tu aplicación.
- El valor de la clave
Establezca la
WSGI_HANDLERentrada en el archivo web.config según corresponda para el marco que usa:Botella: Agregue paréntesis después del valor de
app.wsgi_appcomo se muestra en este ejemplo. Los paréntesis son necesarios porque el objeto es una función en lugar de una variable. Puede ver la sintaxis en el archivo app.py .<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>Flask: cambie el valor de
WSGI_HANDLERa<project_name>.appdonde<project_name>coincida con el nombre del proyecto. Puede encontrar el identificador exacto examinando lafrom <project_name> import appinstrucción en el archivo runserver.py . Por ejemplo, si el proyecto se denomina FlaskAzurePublishExample, la entrada aparece de la siguiente manera:<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>Django: se necesitan dos cambios en el archivo web.config para los proyectos de Django.
Cambie el valor de
WSGI_HANDLERadjango.core.wsgi.get_wsgi_application(). El objeto está en el archivo wsgi.py .<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>Agregue la siguiente entrada inmediatamente después de la entrada de la clave
WSGI_HANDLER. Reemplace el valorDjangoAzurePublishExamplepor el nombre del proyecto:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Solo aplicaciones de Django: en el archivo settings.py del proyecto de Django, agregue el dominio o la dirección IP de la dirección IP del sitio a la
ALLOWED_HOSTSentrada. Reemplace "1.2.3.4" por su dirección URL o DIRECCIÓN IP:# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']Si no agrega la dirección URL a los resultados de la matriz, verá el siguiente error:
DisallowedHost at / Invalid HTTP_HOST header: '<site URL>'. You might need to add '<site URL>' to ALLOWED_HOSTS.
Cuando la matriz está vacía, Django permite automáticamente 'localhost' y '127.0.0.1' como hosts. Si agrega la dirección URL de producción, no se permitirá automáticamente el acceso a estos sitios host. Por este motivo, es posible que desee mantener copias independientes de desarrollo y producción del archivo settings.py o usar variables de entorno para controlar los valores del entorno de ejecución.
Implementación en IIS o en una máquina virtual Windows
Cuando tenga el archivo deweb.config correcto en el proyecto, puede publicar en el equipo que ejecuta IIS desde el Explorador de soluciones. Haga clic con el botón derecho en el proyecto, seleccione Publicary, a continuación, seleccione IIS, FTP, etc.. En esta situación, Visual Studio copia solo los archivos del proyecto en el servidor. Usted es responsable de toda la configuración del lado servidor.