Nginx를 사용한 WSGI 대 uWSGi [닫기]


88

Nginx와 함께 WSGI VS uWSGI 를 사용할 때 누구든지 장단점을 설명해 주 시겠습니까 ?

현재 저는 준비한 Django 웹 사이트의 프로덕션 서버를 구축 중이지만 WSGI 또는 uWSGI를 사용할지 결정할 수 없습니다. 각 구성의 차이점을 자세히 설명해 주시겠습니까? 어떤 구성이 가장 잘 확장되어야합니까?

미리 감사드립니다


이 블로그 게시물 은 많은 Python WSGI 서버에 대한 매우 상세한 비교이며, 끝에 요약 및 몇 가지 권장 사항이 있습니다.
Lowe Thiderman 2011 년

또한 일부 서버에 대한 구성을 사용합니다.이 구성을 사용하면 실제로 엉터리이며 가능한 것보다 더 나빠 보입니다. 그 비교에서 무엇을 읽는지주의해야합니다.
Graham Dumpleton 2011 년

25
WSGI는 사양입니다. uWSGI는 WSGI 사양의 구현을 제공합니다. 비교할 수 없습니다. 다른 구현 만 비교할 수 있습니다.
Graham Dumpleton 2011 년

답변:


100

좋아,이 혼란은 여러 소스의 세부 사항이 부족하고 이러한 프로토콜의 이름이 지정되었으며 WSGI가 실제로 무엇인지 때문입니다.

요약:

  1. WSGI와 uwsgi 는 모두 서버가 아닌 ARE 프로토콜입니다. 로드 밸런싱을 위해 웹 서버와 통신하고 특히 순수 HTTP가 제공 할 수없는 추가 기능을 활용하는 데 사용됩니다. 지금까지 Nginx와 Cherokee는이 프로토콜을 구현했습니다.
  2. uWSGI는 서버이고 구현하는 프로토콜 중 하나는 WSGI입니다 (uwsgi 프로토콜을 uWSGI 서버와 혼동하지 마십시오). WSGI는 Python 사양 입니다. WSGI 사양에는 여러 가지 구현이 있으며 응용 프로그램 서버 / 웹 서버 이상의 용도로 사용하기위한 것이지만 WSGI 응용 프로그램 서버가 상당히 적습니다 (즉, 생산 준비가 된 WSGI 호환 웹 서버도있는 CherryPy) , 이미 충분히 혼란스럽지 않았다면!).
  3. uwsgi와 WSGI를 비교하는 것은 오렌지와 사과를 비교하는 것입니다.

3
오타 : "1. uwsgi 는 서버가 아닌 프로토콜입니다." -> "1. WSGI 는 서버가 아닌 프로토콜입니다."
Aman

9
사실, 내가 1에 대해 쓴 내용은 정확하지만 WSGI는 프로토콜이자 uwsgi이므로 두 문장 모두 정확합니다. :). 물론 1의 나머지 컨텍스트 없이는 uWSGI 서버에서 사용하는 프로토콜입니다. wiki.nginx.org/HttpUwsgiModule은 , - "마합니다 (uwsgi 프로토콜을 말한다)을 uWSGI 서버와 uwsgi 프로토콜을 혼동하지"
데릭 리츠에게

4
아, 그래. 나는 당신이 문장 1 "wsgi는 프로토콜이다 .."와 2. "uwsgi는 프로토콜을 구현하는 서버이다"사이에 상충을 그리려고한다고 생각했다.
Aman

2
@DerekLitz, 우리가 할 때 django는 어떤 서버에서 실행 python manage.py runserver됩니까?
Piyush S. Wanare

python manage.py runserverDjango에 내장 된 내부 서버입니다. 아파치, nginx, gunicorn 또는 다른 어떤 것도 아닙니다. Werkzeug 프레임 워크를 사용하는를 django-extensions제공 runserver_plus하지만 서버와 거의 비슷합니다 runserver.
Mike DeSimone

32

일반적으로 기본 웹 서버와 별도의 프로세스에서 Python을 실행하는 것이 가장 좋습니다. 이렇게하면 웹 서버는 정적 콘텐츠를 매우 빠르게 제공하는 많은 작은 스레드를 가질 수 있으며, 별도의 Python 프로세스는 크고 무겁고 각각 자체 Python 인터프리터를 실행합니다. WSGI큰 Python 인터프리터로 nginx 스레드를 모두 부풀리기 때문에 평범한 것은 나쁩니다. flupor gunicorn또는 uWSGIbehind를 사용하는 nginx것이 훨씬 낫습니다 .nginx를 사용하여 단순히 콘텐츠를 제공하고 동적 콘텐츠를 제공하기 위해 가져온 무거운 Python 스레드 수에 관계없이 실행할 작은 가벼운 nginx 스레드 수를 선택할 수 있기 때문입니다. 사람들은 현재 매우 만족해 보이지만 gunicorn이 세 가지 옵션 중 어느 것이 든 잘 작동 할 것입니다.

앞으로도로드가 심각해지기 시작할 때 Python을 다른 서버로 옮길 수 있습니다.


1
귀하의 답변에 약간 혼란 스럽습니다. 그가 nginx 내부에서 어떤 종류의 WSGI 구현도 실행한다고 언급 한 것을 볼 수 없습니다. 그는 메인 wsgi.org 사이트를 참조했습니다. WSGI와 uWSGI 간의 원래 비교는 uWSGI가 WSGI 사양의 구현이기 때문에 처음에는 약간 어리석은 일입니다. 당신은 혼란스러운 방식으로 일반적인 WSGI 용어를 사용하여 '큰 Python 인터프리터로 모든 nginx 스레드를 부풀립니다'라고 말합니다. WSGI 사양 자체는이를 수행 할 수 없으며 구현 만 가능합니다.
Graham Dumpleton 2011 년

1
nginx + mod_wsgi (플러그 가능한 모듈)와 nginx + uWSGI (애플리케이션 서버 컨테이너)를 비교한다면 이치에 맞을 수 있습니다.
clime 2013

따라서 Nginx를 사용하여 Python 웹 앱을 실행할 때 Manlio Perillo의 mod_wsgi는 데드웨어이고 권장되지 않으므로 좋은 솔루션은 gunicorn 또는 uWSGI를 사용하는 WSGI 또는 Flup을 사용하는 FastCGI입니다.
Gulbahar 2013 년

19

여기 http://flask.pocoo.org/docs/deploying/uwsgi/ 가 혼란을 해소하는 좋은 대답 이라고 생각합니다 . 이 질문은 어리석은 일이 아닙니다. 두 용어를보고 mod_PHP 외부에서 작동하는 방식에 대한 사전 정보가없는 모든 사람에게 발생합니다 (예 : PHP 또는 사람들에 대한 내용 없음).

이 사이트는 nginx의 좋은 배포 예제뿐만 아니라 무엇이 필요한지, 차이점이 무엇인지 실용적인 용어로 설명하는 데 효과적입니다.


편의를 위해 Flask wiki의 설명이 여기에 인용되어 있습니다.

uWSGI는 nginx, lighttpd 및 cherokee와 같은 서버의 배포 옵션입니다. 다른 옵션은 FastCGI 및 독립형 WSGI 컨테이너를 참조하십시오. uWSGI 프로토콜과 함께 WSGI 응용 프로그램을 사용하려면 먼저 uWSGI 서버가 필요합니다. uWSGI는 프로토콜이자 응용 프로그램 서버입니다. 응용 프로그램 서버는 uWSGI, FastCGI 및 HTTP 프로토콜을 제공 할 수 있습니다.

가장 많이 사용되는 uWSGI 서버는 uwsgi이며이 가이드에서 사용할 것입니다. 따라하기 위해 설치했는지 확인하십시오.

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