Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
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 a través de 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, tal como se describe en Instalación de intérpretes de Python.
- Identifique la ubicación del intérprete de
python.exe
. Para mayor comodidad, puede agregar esa ubicación a la variable de entorno PATH.
- Identifique la ubicación del intérprete de
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 de 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 de web.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 elemento <httpPlatform>
del archivo web.config
. El atributo processPath
apunta al intérprete de Python de la extensión de sitio. El atributo arguments
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 WSGI que se ejecuta en uno o varios procesos persistentes de Python.
Nota
Aunque puede configurar el proyecto con FastCGI, se recomienda usar HttpPlatformHandler para configurar las aplicaciones, ya que el proyecto de WFastCGI ya no se mantiene y puede producir 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 de python.exe
y al archivo wfastcgi.py
de la clave PythonHandler
. 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 entrada
PythonHandler
en el archivoweb.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" ( 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 sección
<appSettings>
del archivoweb.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
PYTHONPATH
se puede extender libremente, pero debe incluir la raíz de la aplicación. - La clave de
WSGI_HANDLER
debe apuntar a una aplicación WSGI que se pueda importar desde la aplicación. - La clave
WSGI_LOG
es opcional, pero se recomienda para depurar tu aplicación.
- El valor de la clave
Establezca la entrada
WSGI_HANDLER
en el archivoweb.config
según corresponda para el marco que usa:Botella: Agregue paréntesis después del valor de
app.wsgi_app
como 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 archivoapp.py
.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask: cambie el valor de
WSGI_HANDLER
a<project_name>.app
donde<project_name>
coincida con el nombre del proyecto. Puede encontrar el identificador exacto examinando la instrucciónfrom <project_name> import app
en el archivorunserver.py
. Por ejemplo, si el proyecto se denominaFlaskAzurePublishExample
, 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"/>
de Django: se necesitan dos cambios en el archivo
web.config
para proyectos de Django.Cambie el valor de
WSGI_HANDLER
adjango.core.wsgi.get_wsgi_application()
. El objeto está en el archivowsgi.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 valorDjangoAzurePublishExample
por 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, añada el dominio del sitio o la dirección IP a la entrada deALLOWED_HOSTS
. 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 en tiempo de ejecución.
Implementación en IIS o en una máquina virtual Windows
Cuando tenga el archivo de web.config
correcto en su proyecto, puede publicar en el equipo que está ejecutando IIS desde 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.