IIS용 Python 웹앱 구성
Windows 컴퓨터에서 IIS(인터넷 정보 서비스)를 웹 서버로 사용하는 경우(Azure Windows 가상 머신 포함) PYTHON 웹 애플리케이션을 구성하여 IIS가 Python 코드를 제대로 처리할 수 있도록 해야 합니다. 구성은 Python 웹앱에 대한 web.config
파일의 설정을 통해 수행됩니다. 이 문서에서는 필요한 설정을 구성하는 방법을 설명합니다.
필수 구성 요소
Windows에 Python이 설치되었습니다. 웹앱을 실행하려면 먼저 Python 인터프리터 설치 설명한 대로 Windows 호스트 컴퓨터에 직접 필요한 버전의 Python을 설치합니다.
-
python.exe
인터프리터의 위치를 식별합니다. 편의를 위해 해당 위치를 PATH 환경 변수에 추가할 수 있습니다.
-
필수 패키지가 설치되어 있습니다. 전용 호스트의 경우 전역 Python 환경을 사용하여 가상 환경이 아닌 앱을 실행할 수 있습니다. 따라서
pip install -r requirements.txt
명령을 실행하여 모든 앱 요구 사항을 전역 환경에 설치할 수 있습니다.
Python 인터프리터를 가리키도록 web.config 설정
Python 애플리케이션에 대한 web.config
파일은 HttpPlatformHandler(권장) 또는 FastCGI를 통해 Python 요청을 처리하는 방법에 대해 Windows에서 실행되는 IIS 웹 서버(버전 7 이상)에 지시합니다. Visual Studio 버전 2015 및 이전 버전에서 이러한 수정을 자동으로 수행합니다. Visual Studio 2017 이상의 경우 web.config
파일을 수동으로 수정해야 합니다.
프로젝트에 web.config
파일이 아직 없는 경우 프로젝트 디렉터리를 마우스 오른쪽 단추로 클릭하고 추가 > 새 항목 선택하고 web.config
검색하거나 빈 web.config
XML 파일을 만들어 추가할 수 있습니다.
옵션 1: HttpPlatformHandler 구성
HttpPlatform 모듈은 소켓 연결을 독립 실행형 Python 프로세스에 직접 전달합니다. 이 통과를 사용하면 원하는 웹 서버를 실행할 수 있지만 로컬 웹 서버를 실행하는 시작 스크립트가 필요합니다. 이 방법은 일반적으로 Flask 또는 Django와 같은 Python 웹 프레임워크를 사용하여 수행됩니다.
web.config
파일의 <httpPlatform>
요소에 스크립트를 지정합니다.
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는 들어오는 연결을 수신하고 하나 이상의 영구 Python 프로세스에서 실행되는 WSGI 앱에 각 요청을 전달합니다.
메모
FastCGI를 사용하여 프로젝트를 설정할 수 있지만 WFastCGI 프로젝트가 더 이상 유지 관리되지 않고 버그가 발생할 수 있으므로 HttpPlatformHandler 사용하여 앱을 구성하는 것이 좋습니다.
FastCGI를 사용하려면 먼저 pypi.org/project/wfastcgi/설명된 대로 wfastcgi 패키지를 설치하고 구성합니다.
다음으로, python.exe
실행 파일의 전체 경로와 PythonHandler
키에 wfastcgi.py
파일을 포함하도록 애플리케이션의 web.config
파일을 수정합니다. 다음 단계에서는 Python이 c:\python36-32 폴더에 설치되고 앱 코드가 c:\home\site\wwwroot 폴더에 있다고 가정합니다. 경로에 맞게 이러한 값을 조정합니다.
경로가 Python 설치 위치와 일치하게
web.config
파일의PythonHandler
항목을 수정합니다. 자세한 내용은 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>
web.config
파일의<appSettings>
섹션에서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
키는 선택 사항이지만 키는 앱 디버깅에 권장됩니다.
-
사용 중인 프레임워크에 맞게
web.config
파일의WSGI_HANDLER
항목을 설정합니다.Bottle: 이 예제와 같이
app.wsgi_app
값 뒤의 괄호를 추가합니다. 개체가 변수가 아닌 함수이기 때문에 괄호가 필요합니다.app.py
파일에서 구문을 볼 수 있습니다.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask:
<project_name>
프로젝트의 이름과 일치하는 경우WSGI_HANDLER
값을<project_name>.app
로 변경하세요.runserver.py
파일에서from <project_name> import app
문을 보면 정확한 식별자를 찾을 수 있습니다. 예를 들어 프로젝트 이름이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 앱은: Django 프로젝트의
settings.py
파일에서ALLOWED_HOSTS
항목에 사이트 URL 도메인 또는 IP 주소를 추가합니다. '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는 프로젝트 파일만 서버에 복사합니다. 모든 서버 쪽 구성을 담당합니다.