2016-07-26 3 views
12

나는 WSGI specification을보고 있는데, 서버가 어떻게 uWSGI과 같은 그림인지 알기 위해 노력하고 있습니다. WSGI 스펙의 요점은 nginx와 같은 웹 서버를 Flask을 사용하여 작성하려는 웹 응용 프로그램과 분리하는 것임을 이해합니다. 내가 이해할 수없는 것은 uWSGI가 필요한 것입니다. 왜 nginx 직접 내 Flask 응용 프로그램을 호출 할 수 없습니다? 플라스크가 WSGI에 직접 말할 수 없습니까? 왜 UWSGI는 그들 사이에 들어가야합니까?uWSGI의 요점은 무엇입니까?

WSGI 사양에는 서버와 웹 응용 프로그램이라는 두 가지 측면이 있습니다. UWSGI는 어느쪽에 있습니까?

답변

10

좋아을, 나는 지금이 얻을 생각합니다. 나는 Wikipedia artile에서 다음 설명을 읽어

서버와 응용 프로그램 사이를,이 API의 양쪽을 구현하는 WSGI 미들웨어가있을 수 있습니다. 서버 은 클라이언트로부터 요청을 받고 미들웨어로 전달합니다. 처리 후 응용 프로그램에 요청을 보냅니다. 응용 프로그램의 응답은 미들웨어에 의해 서버 에 전달되고 궁극적으로 클라이언트에 전달됩니다.

구체적으로 말하지는 않지만, 나는 이들 미들웨어 중 하나라고 추측하고 있습니다. 제 생각에 uWSGI는 Flask (또는 원하는 다른 프레임 워크)가 WSGI 사양의 응용 프로그램 측면을 구현하는 방법을 구체적으로 알 필요가 없도록 Flask 응용 프로그램 주위의 어댑터 역할을합니다.

그래서 내 자신의 질문에 대답하기 위해 uWSGI와 Flask가 함께 WSGI의 응용 프로그램을 구성하고 nginx는 웹 서버 쪽입니다.

저는 웹 서버로 uWSGI를 실행할 수 있다고 믿습니다.이 경우 두 가지 역할을 모두 수행 할 수 있지만 대부분의 사람들이 그렇게 할 것입니다.

관심있는 사람에게 더 구체적인 내용, 약간의 기록 및 몇 가지 예가 나와있는 blog article을 작성했습니다.

+0

Werkzeug를 HTTP 서버로 사용하여 Flask 응용 프로그램을 실행할 수는 있지만 프로덕션 준비가되지 않았습니다. uWSGI 여러 문제 해결 : 를 * HTTP (이 C에서 빠르게) 분석 및 WSGI 응용 프로그램과의 인터페이스 * 실행 더 나은 동시성 여러 프로세스에서 응용 프로그램/스레드 * 역할을 WSGI 응용 프로그램의 감독자로 –

6

전통적인 웹 서버는 Python 응용 프로그램을 이해할 수 없거나 Python 응용 프로그램을 실행할 수있는 방법이 없습니다. 그것이 WSGI 서버가 들어오는 이유입니다. 한편 Nginx는 요청을 처리하고 Python WSGI 서버에 대한 응답을 되돌리기 위해 역방향 프록시를 지원합니다.

이 링크는 당신을 도울 수 있습니다 https://www.fullstackpython.com/wsgi-servers.html

+0

nginx, uwsgi, 및 플라스크. WSGI 스펙의 맥락에서이 모든 것이 어떻게 맞습니까? nginx가 서버이고 uwsgi가 응용 프로그램이거나 uwsgi이고 서버가 플라스크입니까? – d512

+0

uWSGI는 서버이며 플라스크는 app입니다. –

+0

음, 괜찮 으면 내 질문에 대한 내 대답을 확인하고 생각을 확인하십시오. – d512

0

NGINX는이 경우 역방향 프록시로만 작동하며 요청을 받아서 응용 프로그램 서버 (UWSGI)로 프록시합니다.

UWSGI 서버는 WSGI 인터페이스를 사용하여 Flask 응용 프로그램을로드합니다. 실제로 UWSGI가 인터넷의 요청을 직접 듣게하고 원하는 경우 NGINX를 제거 할 수 있습니다.하지만 역방향 프록시에서 주로 사용됩니다.

docs에서

:

uWSGI는 웹 서버와 통합하는 여러 가지 방법을 지원합니다. 또한 자체적으로 HTTP 요청을 제공 할 수도 있습니다.

WSGI는 단순한 인터페이스 사양으로, 서버와 응용 프로그램간에 요청과 응답을 전달하기 위해 구현해야하는 메서드를 알려줍니다.Flask 나 Django와 같은 프레임 워크를 사용할 때 이것은 프레임 워크 자체에서 처리합니다.

즉, WSGI는 기본적으로 Python 응용 프로그램 (Flask, Django 등)과 웹 서버 (UWSGI, Gunicorn 등) 간의 계약입니다. 이점은 웹 서버를 약간의 노력으로 변경할 수 있다는 것입니다. 왜냐하면 웹 서버는 실제로는 PEP-333에서 설명한 WSGI 사양을 준수한다는 것을 알고 있기 때문에 실제로는 목표 중 하나입니다.

파이썬은 현재 Zope, Quixote, Webware, SkunkWeb, PSO 및 Twisted Web과 같은 다양한 웹 응용 프로그램 프레임 워크를 자랑합니다. [1]. 일반적으로 말해서 웹 프레임 워크를 선택하면 사용할 수있는 웹 서버를 선택할 수 없으므로 새로운 파이썬 사용자에게는이 다양한 선택이 문제가 될 수 있습니다.

관련 문제