Python 스크립트를 CGI로 실행할 수 있는 Bluehost 계정이 있습니다. 실행하려면 다음을 정의해야하기 때문에 가장 간단한 CGI라고 생각합니다 .htaccess
.
Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py
이제 파이썬으로 웹 프로그래밍을 검색 할 때마다 WSGI와 대부분의 프레임 워크에서이를 사용하는 방법에 대해 많이 듣습니다. 그러나 특히 웹 서버가 제공 될 때 (호스트의 컴퓨터에서 실행되는 Apache) .htaccess
명령을 정의하지 않는 한 실제로 재생할 수있는 것이 아닌 경우 모두 잘 어울리지 않습니다 .
방법이다 WSGI , CGI, 그리고 프레임 워크는 모든 연결? 기본 CGI 구성 에서 웹 프레임 워크 (예 : web.py 또는 CherryPy ) 를 실행하려면 무엇을 알고 설치하고 수행해야 합니까? WSGI 지원을 설치하는 방법?
답변
WSGI, CGI 및 프레임 워크는 모두 어떻게 연결되어 있습니까?
Apache는 포트 80에서 수신 대기합니다. HTTP 요청을받습니다. 응답 방법을 찾기 위해 요청을 구문 분석합니다. 아파치는 응답을위한 많은 선택이있다. 응답하는 한 가지 방법은 CGI를 사용하여 스크립트를 실행하는 것입니다. 응답하는 또 다른 방법은 단순히 파일을 제공하는 것입니다.
CGI의 경우 Apache는 환경을 준비하고 CGI 프로토콜을 통해 스크립트를 호출합니다. 이것은 표준 Unix Fork / Exec 상황입니다. CGI 하위 프로세스는 소켓 및 stdout을 포함한 OS 환경을 상속합니다. CGI 서브 프로세스는 응답을 작성하여 Apache로 돌아갑니다. Apache는이 응답을 브라우저로 보냅니다.
CGI는 원시적이고 성가시다. 대부분 요청마다 서브 프로세스를 분기하므로 서브 프로세스는 stdout 및 stderr를 종료하거나 닫아 응답의 끝을 나타냅니다.
WSGI는 CGI 디자인 패턴을 기반으로하는 인터페이스입니다. 반드시 CGI 일 필요는 없으며 각 요청에 대해 하위 프로세스를 분기 할 필요는 없습니다. CGI 일 수 있지만 반드시 그럴 필요는 없습니다.
WSGI는 몇 가지 중요한 방식으로 CGI 디자인 패턴에 추가됩니다. HTTP 요청 헤더를 구문 분석하고이를 환경에 추가합니다. 환경에서 POST 지향 입력을 파일과 같은 오브젝트로 제공합니다. 또한 응답을 공식화하는 기능을 제공하여 많은 서식 세부 사항을 저장합니다.
기본 CGI 구성에서 웹 프레임 워크 (예 : web.py 또는 cherrypy)를 실행하려면 무엇을 알고 / 설치 /해야합니까?
하위 프로세스를 포크하는 것은 비용이 많이 듭니다. 이 문제를 해결하는 데는 두 가지 방법이 있습니다.
-
아파치 안에 파이썬을 내장
mod_wsgi
하거나mod_python
내장한다; 프로세스가 분기되지 않습니다. Apache는 Django 애플리케이션을 직접 실행합니다. -
WSGI 프로토콜을 사용하여 데몬
mod_wsgi
또는mod_fastcgi
Apache가 별도의 데몬 (또는 “장기 실행 프로세스”)과 상호 작용할 수 있도록합니다. 장기 실행 Django 프로세스를 시작한 다음이 프로세스와 통신하도록 Apache의 mod_fastcgi를 구성하십시오.
참고 mod_wsgi
두 모드에서 작동 할 수 있습니다 : 내장 또는 데몬.
mod_fastcgi를 읽으면 Django가 flup 를 사용하여 mod_fastcgi에서 제공 한 정보로부터 WSGI 호환 인터페이스를 생성 한다는 것을 알 수 있습니다. 파이프 라인은 이와 같이 작동합니다.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django에는 다양한 인터페이스를위한 몇 가지 “django.core.handlers”가 있습니다.
mod_fastcgi의 경우 Django는 manage.py runfcgi
FLUP와 처리기를 통합 하는 을 제공 합니다.
mod_wsgi의 경우이를위한 핵심 처리기가 있습니다.
WSGI 지원을 설치하는 방법?
다음 지시 사항을 따르십시오.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
배경은 이것을 참조하십시오
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index
답변
플로리안의 답변 은 특히 PEP 를 읽는 경우 “WSGI 란 무엇인가”에 대한 귀하의 질문에 대한 답변 이라고 생각 합니다 .
끝까지 향한 질문에 관해서는 :
WSGI, CGI, FastCGI 등은 웹 서버가 코드 를 실행 하고 생성되는 동적 컨텐츠를 제공 하기위한 모든 프로토콜입니다 . 이것을 일반 웹 파일과 비교하면 일반 HTML 파일이 기본적으로 클라이언트에 그대로 제공됩니다.
CGI, FastCGI 및 SCGI는 언어에 구애받지 않습니다. Perl, Python, C, bash 등으로 CGI 스크립트를 작성할 수 있습니다. CGI는 URL을 기반으로 호출 할 실행 파일과 호출 방법 ( 인수 및 환경)을 정의합니다. 실행 파일이 완료되면 반환 값을 웹 서버로 다시 전달하는 방법도 정의합니다. 변형은 기본적으로 더 많은 요청을 처리하고 지연 시간을 줄일 수있는 최적화입니다. 기본 개념은 동일합니다.
WSGI는 Python 전용입니다. 언어에 구애받지 않는 프로토콜 대신 표준 함수 서명이 정의됩니다.
def simple_app(environ, start_response):
"""Simplest possible application object"""
status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)
return ['Hello world!\n']
이는 완전한 (제한된 경우) WSGI 응용 프로그램입니다. WSGI를 지원하는 웹 서버 (예 : mod_wsgi가있는 Apache)는 요청이 도착할 때마다이 기능을 호출 할 수 있습니다.
이것이 큰 이유는 HTTP GET / POST에서 CGI로 파이썬으로 변환하고 다시 나갈 때 번거로운 단계를 피할 수 있기 때문입니다. 훨씬 더 직접적이고 깨끗하며 효율적인 연결입니다.
또한 요청에 필요한 모든 것이 함수 호출 인 경우 웹 서버 뒤에서 장기 실행 프레임 워크를 실행하는 것이 훨씬 쉽습니다. 일반 CGI를 사용하면 각 개별 요청에 대해 전체 프레임 워크 를 시작해야합니다 .
WSGI를 지원하려면 mod_wsgi 와 같은 WSGI 모듈을 설치 하거나 CherryPy 와 같은 WSGI가 구워진 웹 서버를 사용해야합니다 . 둘 중 어느 것도 가능하지 않으면 PEP에 제공된 CGI-WSGI 브리지를 사용할 수 있습니다.
답변
Pep333이 예로 설명하는 것처럼 CGI를 통해 WSGI를 실행할 수 있습니다 . 그러나 요청이있을 때마다 새로운 Python 인터프리터가 시작되고 모든 컨텍스트 (데이터베이스 연결 등)를 빌드해야합니다. 모두 시간이 걸립니다.
WSGI를 실행하려는 경우 호스트가 mod_wsgi를 설치 하고 자신 의 응용 프로그램에 대한 제어를 지연하도록 적절한 구성을하는 것이 가장 좋습니다.
Flup 는 FCGI , SCGI 또는 AJP 를 사용할 수있는 모든 웹 서버에 대해 WSGI를 실행하는 또 다른 방법 입니다. 내 경험으로는 FCGI 만 실제로 작동하며 mod_fastcgi 를 통해 또는 mod_proxy_fcgi 로 별도의 Python 데몬을 실행할 수있는 경우 Apache에서 사용할 수 있습니다 .
WSGI 는 웹 서버와 Python 코드가 상호 작용할 수있는 규칙 세트를 정의하는 CGI와 매우 유사한 프로토콜이며 Pep333 으로 정의됩니다 . 많은 다른 웹 서버가 동일한 응용 프로그램 프로토콜을 사용하여 많은 다른 프레임 워크와 응용 프로그램을 사용할 수 있습니다. 이것은 매우 유익하며 매우 유용합니다.
답변
이 공간의 모든 용어에 대해 명확하지 않고 혼란스러운 약어가있는 용어를 직면하게하는 경우 CGI 대 FastCGI 대 WSGI 등을 설명하는 공식 파이썬 HOWTO 형식의 훌륭한 배경 독자가 있습니다. : http://docs.python.org/howto/webservers.html
답변
이것은 서블릿 스펙이 Java에 대한 것과 유사한 Python을위한 간단한 추상화 계층입니다. CGI는 실제로 저수준이며 프로세스 환경 및 표준 입출력에 물건을 덤프하는 반면, 위의 두 사양은 http 요청 및 응답을 언어의 구성으로 모델링합니다. 그러나 필자는 파이썬 사람들이 사실상의 구현에 정착하지 않았으므로 참조 구현과 WSGI 지원과 함께 다른 것을 제공하는 다른 유틸리티 유형 라이브러리 (예 : 붙여 넣기)를 혼합했습니다. 물론 틀릴 수도 있습니다. 저는 파이썬을 처음 접했습니다. “웹 스크립팅”커뮤니티는 다른 방향 (공유 호스팅, CGI 레거시,