Настройка веб-приложений Python для IIS
При использовании службы IIS (IIS) в качестве веб-сервера на компьютере Windows (включая виртуальные машины Windows в Azure), необходимо настроить веб-приложение Python для правильной обработки кода Python. Конфигурация выполняется с помощью параметров в web.config
файле веб-приложения Python. В этой статье описывается настройка необходимых параметров.
Необходимые компоненты
Python в Windows установлен. Чтобы запустить веб-приложение, сначала установите нужную версию интерпретатора Python непосредственно на рабочий компьютер, как описано в этой статье.
- Определите расположение
python.exe
интерпретатора. Для удобства это расположение можно добавить в переменную среды PATH.
- Определите расположение
Необходимые пакеты установлены. Для выделенного узла можно использовать глобальную среду Python для запуска приложения, а не виртуальной среды. Соответственно, вы можете установить все требования приложения в глобальную среду, выполнив
pip install -r requirements.txt
команду.
Указание интерпретатора Python в файле web.config
Файл web.config
для приложения Python указывает веб-серверу IIS (версии 7 или более поздней версии), работающему в Windows, о том, как он должен обрабатывать запросы Python через HttpPlatformHandler (рекомендуется) или FastCGI. Visual Studio 2015 и более ранних версий вносит эти изменения автоматически. Для Visual Studio 2017 и более поздних версий web.config
необходимо вручную изменить файл.
Если проект еще не содержит web.config
файл, его можно добавить, щелкнув правой кнопкой мыши каталог проекта, выбрав "Добавить > новый элемент " и выполнив поиск web.config
или создав пустой web.config
XML-файл.
Вариант 1. Настройка HttpPlatformHandler
Модуль HttpPlatform передает подключения через сокет напрямую в автономный процесс Python. Эта сквозная передача позволяет запускать любой веб-сервер, который вам нравится, но для этого требуется скрипт запуска, на котором выполняется локальный веб-сервер. Этот подход обычно выполняется с помощью веб-платформы Python, например Flask или Django. Скрипт указывается в <httpPlatform>
элементе web.config
файла. Атрибут processPath
указывает на интерпретатор Python расширения сайта. Атрибут arguments
указывает на скрипт запуска, на котором выполняется локальный веб-сервер, в данном случае runserver.py
и любые аргументы, которые вы хотите предоставить:
<?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>
В этом примере HTTP_PLATFORM_PORT
переменная среды содержит порт, который должен прослушивать локальный сервер для подключений.localhost
В этом примере также показано, как создать другую переменную среды. SERVER_PORT
При необходимости можно создавать и назначать переменные среды.
Вариант 2. Настройка обработчика FastCGI
Кроме того, вы можете использовать FastCGI для настройки приложений. FastCGI — это интерфейс, работающий на уровне запроса. Службы IIS принимают входящие подключения и перенаправляют каждый запрос в приложение WSGI, работающее в одном или нескольких сохраняемых процессах Python.
Примечание.
Хотя вы можете настроить проект с помощью FastCGI, рекомендуется использовать HttpPlatformHandler для настройки приложений, так как проект WFastCGI больше не поддерживается и может привести к ошибкам.
Чтобы использовать FastCGI, сначала установите и настройте пакет wfastcgi, как описано в pypi.org/project/wfastcgi/.
Затем измените файл приложения web.config
, чтобы включить полные пути к python.exe
исполняемому файлу и wfastcgi.py
файлу PythonHandler
в ключе. В следующих шагах предполагается, что Python установлен в папке c:\python36-32 , а код приложения находится в папке c:\home\site\wwwroot . Настройте эти значения для путей соответствующим образом.
Измените
PythonHandler
запись вweb.config
файле, чтобы путь соответствовал расположению установки Python. Дополнительные сведения см. в справочнике по конфигурации 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>
<appSettings>
В разделеweb.config
файла добавьте ключи дляWSGI_HANDLER
,WSGI_LOG
(необязательно) и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>
Эти значения
<appSettings>
доступны для вашего приложения в качестве переменных среды:- Значение ключа
PYTHONPATH
может быть свободно расширено, но оно должно содержать корневой каталог приложения. - Ключ
WSGI_HANDLER
должен указывать на приложение WSGI, импортируемое из приложения. - Ключ
WSGI_LOG
является необязательным, но ключ рекомендуется для отладки приложения.
- Значение ключа
WSGI_HANDLER
Задайте запись вweb.config
файле соответствующим образом для используемой платформы:Бутылка: добавьте скобки после
app.wsgi_app
значения, как показано в этом примере. Скобки необходимы, так как объект является функцией, а не переменной. Синтаксис можно увидеть вapp.py
файле.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask: измените значение
WSGI_HANDLER
на<project_name>.app
, где<project_name>
соответствует имени проекта. Точный идентификатор можно найти, просмотрев инструкциюfrom <project_name> import app
runserver.py
в файле. Например, если проект называетсяFlaskAzurePublishExample
, запись отображается следующим образом:<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django: для проектов Django необходимы
web.config
два изменения.Измените значение
WSGI_HANDLER
наdjango.core.wsgi.get_wsgi_application()
. Объект находится вwsgi.py
файле.<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
Добавьте следующую запись сразу после записи ключа
WSGI_HANDLER
. Замените значениеDjangoAzurePublishExample
именем проекта:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Только приложения Django: в файле проекта
settings.py
Django добавьте домен или IP-адрес сайта вALLOWED_HOSTS
запись. Замените "1.2.3.4" URL-адресом или IP-адресом:# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']
Если вы не добавляете URL-адрес в результаты массива, вы увидите следующую ошибку:
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
Если массив пуст, Django автоматически разрешает 'localhost'
и '127.0.0.1'
как узлы. Если вы добавите рабочий URL-адрес, эти сайты узлов не допускаются автоматически. По этой причине может потребоваться сохранить отдельные копии settings.py
файла разработки и рабочей среды или использовать переменные среды для управления значениями среды выполнения.
Развертывание в IIS или виртуальной машине Windows
Если в проекте есть правильный web.config
файл, вы можете опубликовать его на компьютере под управлением IIS из Обозреватель решений. Щелкните проект правой кнопкой мыши, выберите "Опубликовать", а затем выберите IIS, FTP и т. д. В этом случае Visual Studio копирует только файлы проекта на сервер. Вы отвечаете за всю конфигурацию на стороне сервера.
Связанный контент
- Справочник по конфигурации IIS (iis.net)
- Установка интерпретаторов Python
- Виртуальные машины Windows в Azure