uWSGI의 요점은 무엇입니까?


102

저는 WSGI 사양을 보고 있고 uWSGI 와 같은 서버가 그림에 어떻게 들어 맞는지 알아 내려고합니다 . WSGI 사양의 요점은 nginx와 같은 웹 서버를 Flask를 사용하여 작성하는 것과 같은 웹 응용 프로그램과 분리하는 것임을 이해합니다 . 내가 이해하지 못하는 것은 uWSGI가 무엇인지입니다. nginx가 내 Flask 애플리케이션을 직접 호출 할 수없는 이유는 무엇입니까? 플라스크가 WSGI를 직접 말할 수 없습니까? uWSGI가 그 사이에 들어가야하는 이유는 무엇입니까?

WSGI 사양에는 서버와 웹 앱의 두 가지 측면이 있습니다. uWSGI는 어느쪽에 있습니까?

답변:


141

좋아, 이제 이걸 얻을 것 같아.

nginx가 내 Flask 애플리케이션을 직접 호출 할 수없는 이유는 무엇입니까?

때문에 nginxWSGI 사양을 지원하지 않습니다. 기술적으로 nginx는 WSGI원하는 경우 사양을 구현할 수 있었지만 그렇지 않았습니다.

그렇기 때문에 사양을 구현하는 웹 서버가 필요합니다 uWSGI. 이것이 바로 서버입니다.

참고 uWSGI할 수있는 전체 깃털 http 서버를하고 자신의 잘 작업을 수행합니다. 나는 이것을이 용량으로 여러 번 사용했으며 훌륭하게 작동합니다. 정적 콘텐츠에 대해 매우 높은 처리량이 필요한 경우 서버 nginx앞에 고정 할 수있는 옵션 이 있습니다 uWSGI. 그렇게하면 그들은라는 낮은 수준의 프로토콜을 통해 통신 uwsgi합니다.

"뭐야?! uwsgi라는 또 다른 건?!" 물어. 네, 헷갈리네요. 참조 uWSGI할 때 http 서버에 대해 이야기하고 있습니다. 당신에 대해 말할 때 uwsgi(모두 소문자)가 당신이 얘기 바이너리 프로토콜 것을 uWSGI 서버 가 사용하는 같은 다른 서버와 통신 할 수 nginx. 그들은 이것에 대해 나쁜 이름을 선택했습니다.

관심이있는 사람을 위해 더 구체적인 내용, 약간의 역사 및 몇 가지 예가 포함 된 블로그 기사 를 작성했습니다.


6
Werkzeug를 HTTP 서버로 사용하여 Flask 응용 프로그램을 실행할 수 있지만 프로덕션 준비 설정은 아닙니다. uWSGI 여러 문제를 해결 : * HTTP 파싱 (빠른 C에서)와 WSGI 응용 프로그램과의 인터페이스 * 더 나은 동시성 여러 프로세스 / 스레드에 출시 애플 리케이션 * WSGI 응용 프로그램의 관리자 역할
세르게이 Panfilov

@SergeyPanfilov 문제는 우리가 플라스크를 다루는 uwsgi, 각 프로세스 / 스레드가 플라스크 앱의 한 인스턴스를 생성하는 방법을 모른다는 것입니다. Flask-Executor와 같은 플라스크에서 백그라운드 작업에 대한 일부 구현을 보았으며 요청 내부에 바인딩해야합니다. 문맥 외부에있을 수 없습니다.
TomSawyer

Hasan의 답변을 읽어보세요. 정답에 가깝습니다 ..... http 서버는 대부분 C로 작성되며 http 요청을 파이썬 백엔드로 전달할 수 없습니다 .... 당신의 답변은 메커니즘에 대해 이야기합니다
overexchange

29

이 경우 NGINX는 역방향 프록시로만 작동하며 동적 파일이 아닌 정적 파일을 렌더링 합니다. 요청을 수신하고이를 UWSGI 인 애플리케이션 서버에 프록시합니다.

UWSGI 서버는 WSGI 인터페이스를 사용하여 Flask 애플리케이션을로드합니다. UWSGI가 인터넷의 요청을 직접 수신하도록 만들고 원하는 경우 NGINX를 제거 할 수 있습니다. 대부분 역방향 프록시 뒤에서 사용됩니다.

로부터 문서 :

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

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

즉, WSGI는 기본적으로 Python 애플리케이션 (Flask, Django 등)과 웹 서버 (UWSGI, Gunicorn 등) 간의 계약입니다. 이점은 웹 서버가 PEP-333에 명시된대로 실제로 목표 중 하나 인 WSGI 사양을 준수한다는 것을 알고 있기 때문에 적은 노력으로 웹 서버를 변경할 수 있다는 것 입니다.

그냥 몇 가지 이름을 - 파이썬은 현재와 같은 조프, 돈키호테, 웹웨어, SkunkWeb, PSO, 그리고 트위스트 웹 등 웹 애플리케이션 프레임 워크의 다양한 자랑 1 . 일반적으로 웹 프레임 워크를 선택하면 사용 가능한 웹 서버 선택이 제한되고 그 반대의 경우도 마찬가지이기 때문에 이러한 다양한 선택은 새로운 Python 사용자에게 문제가 될 수 있습니다.


24

전통적인 웹 서버는 Python 애플리케이션을 이해하지 못하거나 실행할 방법이 없습니다. 이것이 WSGI 서버가 들어오는 이유입니다. 반면에 Nginx는 역방향 프록시를 지원하여 요청을 처리하고 Python WSGI 서버에 대한 응답을 다시 전달합니다.

이 링크가 도움이 될 수 있습니다 : https://www.fullstackpython.com/wsgi-servers.html


4
여기에는 nginx, uwsgi 및 flask의 세 가지가 있습니다. WSGI 사양의 맥락에서이 모든 것이 어떻게 결합됩니까? nginx가 서버이고 uwsgi가 앱입니까, 아니면 uwsgi가 서버이고 flask가 앱입니까?
d512

uWSGI는 서버이고 flask는 앱입니다.
Rafiqul Hasan 2016

글쎄, 괜찮다면 내 질문에 대한 내 대답을 확인하고 당신이 어떻게 생각하는지 확인하십시오.
d512

4
웹 서버가 Python 앱을 이해하지 못하는 이유는 무엇입니까? PHP를 이해할 수 있는데, 왜 파이썬이나 다른 언어가 아닐까요?
jdogg

1

간단히 말해서 Nginx 웹 서버에서 CGI 또는 PHP 응용 프로그램을 실행하는 비유를 생각해보십시오. php-fpm과 같은 각각의 핸들러를 사용하여 이러한 파일을 실행할 수 있습니다. 웹 서버는 네이티브 형식으로 이러한 형식을 렌더링하지 않기 때문입니다.


최고의 설명!
tyasird
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.