source

Python 웹 프레임워크, WSGI 및 CGI의 적합성

ittop 2023. 7. 16. 17:56
반응형

Python 웹 프레임워크, WSGI 및 CGI의 적합성

Python 스크립트를 CGI로 실행할 수 있는 Bluehost 계정이 있습니다.실행하려면 다음을 정의해야 하기 때문에 가장 간단한 CGI라고 생각합니다..htaccess:

Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py

이제 파이썬으로 웹 프로그래밍을 검색할 때마다 WSGI와 대부분의 프레임워크가 어떻게 사용하는지에 대해 많은 것을 듣게 됩니다.내웹 때 ), 내가 실제로 놀 수 않았을 때 (하는 것을 하고) 어떻게 모든 할 수 ..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)를 실행하려면 무엇을 알아야 합니까?

하위 프로세스의 포킹은 비용이 많이 든다는 점을 기억하십시오.이 문제를 해결하는 데는 두 가지 방법이 있습니다.

  1. Embedded mod_wsgi또는mod_pythonPython을 Apache 내부에 포함합니다. 프로세스가 분기되지 않습니다.Apache는 Django 애플리케이션을 직접 실행합니다.

  2. mod_wsgi또는mod_fastcgiApache는 WSGI 프로토콜을 사용하여 별도의 데몬(또는 "장기 실행 프로세스")과 상호 작용할 수 있습니다.장기 실행 중인 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.handler"

경우 는 mod_fastcgi를 합니다.manage.py runfcgiFLUP와 핸들러를 통합합니다.

mod_wsgi의 경우 이에 대한 코어 핸들러가 있습니다.

WSGI 지원을 설치하는 방법은 무엇입니까?

다음 지침을 따르십시오.

https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki

배경은 다음을 참조하십시오.

http://docs.djangoproject.com/en/dev/howto/deployment/ #배포 방법 인덱스

플로리안의 대답은 "WSGI가 무엇인가"에 대한 당신의 질문, 특히 당신이 PEP를 읽는 경우에 대한 부분에 답한다고 생각합니다.

끝을 향해 제기하는 질문에 대해서는 다음과(와)

WSGI, CGI, FastCGI 등은 모두 웹 서버가 코드를 실행하고 생성된 동적 콘텐츠를 제공하기 위한 프로토콜입니다.기본적으로 일반 HTML 파일이 클라이언트에 그대로 전달되는 정적 웹 서비스와 비교해 보십시오.

CGI, FastCGI 및 SCGI는 언어에 구애받지 않습니다.CGI 스크립트는 Perl, Python, C, bash 등으로 작성할 수 있습니다. 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에서 Python으로 변환하고 나가는 과정에서 다시 변환하는 번거로운 단계를 피할 수 있기 때문입니다.그것은 훨씬 더 직접적이고 깨끗하고 효율적인 연결입니다.

또한 요청에 대해 수행해야 할 모든 작업이 함수 호출인 경우 웹 서버 뒤에서 장기간 실행되는 프레임워크를 훨씬 쉽게 만들 수 있습니다.일반 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로 별도의 파이썬 데몬을 실행할 수 있는 경우 Apache에서 사용할 수 있습니다.

WSGI는 웹 서버와 Python 코드가 상호 작용할 수 있는 일련의 규칙을 정의하는 CGI와 매우 유사한 프로토콜로, Pep333으로 정의됩니다.이를 통해 여러 웹 서버가 동일한 응용프로그램 프로토콜을 사용하여 다양한 프레임워크 및 응용프로그램을 사용할 수 있습니다.이것은 매우 유익하고 매우 유용합니다.

만약 당신이 이 공간의 모든 용어에 대해 불분명하고, 그것이 혼란스러운 약자로 가득 찬 것이라면, CGI 대 FastCGI 대 WSGI 등을 논의하는 공식 파이썬 HOWTO 형태의 좋은 배경 독자도 있습니다. http://docs.python.org/howto/webservers.html

이것은 자바의 서블릿 사양과 유사한 파이썬의 간단한 추상화 계층입니다.CGI가 정말 낮은 수준이고 프로세스 환경과 표준 입력/출력에 내용을 덤프하는 반면, 위의 두 가지 사양은 언어로 구성된 http 요청 및 응답을 모델링합니다.그러나 Python에서 사람들은 실제로 구현하는 것에 대해 잘 결정하지 못했기 때문에 참조 구현과 WSGI 지원(예: 붙여넣기)과 함께 다른 기능을 제공하는 기타 유틸리티 유형 라이브러리가 혼합되어 있습니다.물론 제가 틀릴 수도 있어요, 저는 파이썬에 새로 온 사람이에요."웹 스크립팅" 커뮤니티는 Java 사용자들이 시작할 때(정적으로 컴파일되고 배포된 코드에 대해 전용 환경에서 단일 엔터프라이즈 컨테이너를 실행하는 것)와는 다른 방향(공유 호스팅, CGI 레거시, 권한 분리 우려)에서 문제에 직면하고 있습니다.

언급URL : https://stackoverflow.com/questions/219110/how-python-web-frameworks-wsgi-and-cgi-fit-together

반응형