[python] uWSGI의 요점은 무엇입니까?

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

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



답변

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

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

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

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

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

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

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


답변

이 경우 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 사용자에게 문제가 될 수 있습니다.


답변

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

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


답변

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


답변