[server] uWSGI를 사용할 때 왜 nginx가 필요한가요?

Django 응용 프로그램을 배포하려고 할 때 uWGSI와 협력하도록 nginx를 구성하는 방법에 대한 많은 자습서가 있습니다.

하지만 왜이 키트에 nginx가 필요합니까? uWSGI 자체는 WSGI Python 애플리케이션을 제공 할 수 있으며 정적 파일을 제공 할 수 있으며 SSL도 수행 할 수 있습니다. 어떤 uWSGI가 할 수없는 nginx는 무엇을 할 수 있습니까?



답변

당신은하지 않습니다.

어쨌든 간단한 대답 입니다. 필요 하지 않습니다 . uWSGI 자체는 유능한 서버입니다.

그러나 nginx와 같은 다른 서버는 uWSGI에서 지원하지 않는 추가 기능 (예 : Expires 또는 E-Tag 조합을 통한 정적 자원 처리 개선)뿐만 아니라 더 길고 더 안전합니다 (아마도) 서버 및 네트워크로드를 크게 줄일 수있는 헤더, gzip 압축, 사전 압축 gzip 등) 또한 Django 애플리케이션 앞의 nginx와 같은 서버는 동적 컨텐츠의 캐싱을 구현하여 서버로드를 줄이며 CDN (일반적으로 동적 컨텐츠와는 잘 어울리지 않음)의 사용을 용이하게합니다. ). 정적 컨텐트 자체를 처리하면서 동적 컨텐트에 대한 프록시 요청을로드 밸런싱 된 응용 프로그램 서버 클러스터로 리버 싱하여 완전히 별도의 서버에서 nginx를 사용할 수도 있습니다.

예를 들어, 내 블로그 (워드 프레스 인 동안 nginx가 앞에 있음)는 24 시간 동안 게시물을 캐시하고 5 분 동안 인덱스 페이지를 캐시하도록 조정됩니다. 실제로 대부분의 시간에 충분한 트래픽을 볼 수는 없지만, 작은 VPS 날씨로 인해 가끔씩 급상승 할 수있는 급격한 급상승 (예 : 기사 중 하나를 선택했을 때의 트래픽 급증) 수천 명의 팔로어가있는 트위터 사용자가 많은 사람들이 트위터를 수천 명의 팔로어에게 리트 윗했습니다.

내가 “맨손으로”uWSGI 서버를 운영하고 있었다면 (그리고 WordPress가 아닌 Django 사이트라고 가정 할 때) 서버가 제대로 작동했거나 추락하여 화상을 입었을 수 있습니다. . 그 하중을 처리하기 위해 nginx를 앞에두면 실제로 도움이 될 수 있습니다.

말 그대로, 많은 트래픽을 보지 못하는 작은 사이트를 운영하고 있다면 nginx 또는 그 밖의 다른 것이 필요하지 않습니다. 원하는 경우 uWSGI를 사용하십시오. 트래픽을 많이 볼 수 있습니다 다른 한편, 만약 … 음, 당신은 여전히 uWSGI을 할 수 있습니다,하지만 당신은 적어도 부하에 도움이 그것의 앞에 무엇인가를 고려해야한다. 실제로, 완성 된 사이트에서 다른 구성을 실제로로드 테스트하여 예상되는로드에서 가장 적합한 것이 무엇인지 결정하고 그 결과물을 사용해야합니다.


답변

IMO, 웹 사이트를 랩 대신 인터넷에 넣으면 차이가있을 수 있습니다.

네트워크 속도가 느린 개방형 웹 브라우저를 가진 다른 국가의 사용자가 웹 사이트에 액세스한다고 가정하십시오. uWSGI는 해당 Http 연결을 스레드에서 처리합니다. 이 스레드는 네트워크 속도가 느려서 전체 HTTP 요청을 기다리는 데 꽤 오랜 시간이 걸릴 수 있습니다. 스레드 풀 크기가 100 인 경우 100 명의 사용자가 그렇게 느리다고 상상하면 어떻게 될까요? 다른 HTTP 요청을 처리 할 유휴 스레드가 없습니다.

그러나 Nginx와는 상당히 다릅니다. Nginx는 ‘리액터 패턴’으로 설계되었습니다. 구글 ‘리액터 패턴’이 어떻게 작동하는지 볼 수 있습니다. 즉, 저속 연결은 다른 Http 요청을 처리하는 데 영향을 미치지 않습니다.


답변