Nginx 와니스 Nginx Django?


13

django 앱이 있는데 서버 앞에 Varnish를 설정하고 싶습니다. 에서 다른 저기 serverfault 스레드 누군가가 니스의 앞에 Nginx에 퍼팅 제안했다.

캐싱 서버의 Varnish 앞에 Nginx를 넣어야합니까? 그렇다면 앱 서버에서 Nginx를 사용해야합니까?

답변:


10

계층간에로드 밸런싱 기능이있는 대규모 서버 팜이 아니라 총 1-3 개의 프런트 엔드 서버를 이야기하고 있습니까?

nginx를 Vanish 앞에두면 HTTP 압축을 즉시 수행 할 수 있습니다. 이는 성능 모범 사례이지만 생략 할 수 있습니다. (니스의 콘텐츠는 압축되지 않은 상태로 유지되므로 ESI Includes가 작동하므로 Vary 헤더 / 브라우저 일치에 따라 동일한 객체의 여러 캐시 된 버전을 처리 할 필요가 없습니다.)

앱 서버의 nginx와 관련 하여 mod_wsgi 를 사용하는 Apache는 오늘날 새로운 Django 설치를 권장하는 가장 일반적인 방법이 아닌가? Django의 Apache / mod_wsgi보다 nginx / fastcgi를 사용해야하는 매력적인 이유를 모르겠습니다. 하지만 장고 전문가에게 조언을 구해야합니다.

nginx에없는 매력적인로드 밸런싱 기능이있는 Varnish에 대해서는 그 기능이 무엇인지 알 수 없습니까? 바니시는 랜덤 및 라운드 로빈 밸런싱을 가지고 있습니다. nginx에는 라운드 로빈, 클라이언트 IP 및 일관된 해싱이 있습니다. Varnish에는 큰 이점이 보이지 않습니까? VCL 또는 Varnish의 우아한 구성 다시로드 또는 다른 것입니까?

소규모 1-3 서버 설정의 경우, 내가 할 것이라고 생각합니다

광택-> Apache / mod_wsgi / 장고

아니면

오징어-> 아파치 / mod_wsgi / 장고

bandwith가 비싸지 않다면 단순성을 위해 HTTP 압축을 무시하십시오.

최신 정보:

Graham Dumpleton은 아래에 귀중한 의견을 작성했습니다. 그는 VPS의 블로그 또는 캐싱없는 소규모 웹 팜과 같은 매우 일반적인 설정에 대해 언급합니다.

nginx-> Apache / mod_wsgi / 장고

이것은 몇 가지 이유로 매우 좋은 솔루션입니다.

  1. 간단한 설정
  2. 빠른 속도와 최소한의 오버 헤드를 가진 nginx는 정적 파일 제공 및 브라우저 연결 연결 유지를 처리합니다.
  3. Django는 Django의 권장 플랫폼 인 Graham Dumpleton의 우수한 mod_wsgi에서 실행됩니다.

처음에 이것을 언급하지 않은 이유는 OP가 고성능 캐싱 솔루션 인 Varnish를 필요로했기 때문입니다. nginx / Apache / mod_wsgi 콤보는 Varnish와 일치하는 수준의 성능과 유연성으로 캐싱을 수행 할 수 없습니다.


2
많은 사람들이 다양한 좋은 이유로 'nginx-> Apache / mod_wsgi / Django'를 사용할 수도 있습니다.
Graham Dumpleton 2009

4
많은 사람들이 알지 못하는 유스 케이스에서 nginx가 제공하는 다른 것은 nginx가 Apache를 느린 클라이언트로부터 분리한다는 것입니다. 특정 크기의 요청 콘텐츠가 nginx에 의해 스트리밍되지 않기 때문입니다. 대신 요청 헤더와 내용을 버퍼링하고 모든 요청이있을 때만 프록시 요청을 처리합니다. 즉, 요청을 처리하는 데 필요한 모든 정보를 사용할 수있는 경우에만 Apache로 전달합니다. 따라서 Apache / mod_wsgi는 최소한의 시간 동안 사용 중이며 느린 클라이언트에 의해 연결되지 않은 프로세스 / 스레드입니다. 버퍼링 측정은 역순으로 수행되므로 Apache도 더 빨리 완료 할 수 있습니다.
Graham Dumpleton 2009

2
@Graham Dumpleton : 여기에 오게되어 매우 기쁩니다. :-). nginx HTTP 멀티플렉싱 / 스마트 연결 처리에 관해서는 전적으로 동의합니다.
Jesper M

무엇보다도 이러한 포괄적 인 답변을 작성해 준 Jesper와 Graham에게 감사드립니다. 두 개의 앱 서버 앞에로드 밸런싱 서버를 배치 할 계획입니다. 한 대의 서버는 대부분의 트래픽을 처리하고 두 번째 서버는 주로 페일 오버 및 새로운 기능 베타 테스트에 사용됩니다.
Enrico

니스는 어떤 요청이 어떤 백엔드로 전송되는지를 완전히 제어 할 수 있기 때문에 매력적입니다. 바니시는 또한 백엔드 서버 상태를 점검하고 장애 조치는 설정이 간단하며 느리거나 죽은 백엔드를 정상적으로 처리합니다 (두 서버가 모두 죽는 경우).
Enrico

4

니스없이 nginx를 사용하여 컨텐츠를 프록시하고 캐시 할 수 있습니다.


2
니스에는 nginx가 제공하지 않는 매력적인로드 밸런싱 기능이 있습니다.
Enrico

4
예를 들어 어떤 기능이 있습니까?
침묵

4

Nginx, Varnish 및 Apache / mod_wsgi / Django를 성공적으로 사용하고 있습니다. 다음 구성으로 시작했습니다.

Nginx-> Apache / mod_wsgi / 장고

아파치에 상당한 부하가 걸리기 시작하면 Varnish를 추가했습니다.

Nginx-> 광택-> Apache / mod_wsgi / 장고

Nginx를 일종의 "URL 라우터"로 사용합니다. Django 관리자 요청은 Nginx에서 Apache로 직접 전송됩니다. 클라이언트 요청은 Nginx에서 Varnish로 전송되어 Apache의 요청을 캐시하고 앱 서버를 사용할 수없는 경우 캐시에서 "유예"항목을 제공합니다.

내 Nginx 서버는 특정 정적 컨텐츠 (예 : 이미지, CSS 및 자바 스크립트 파일)를 직접 제공합니다.

일반적으로 성능이 우수합니다. 나는 언급해야 할 몇 가지 경고를 발견했습니다.

  1. 사용량이 많은 사이트에서 Varnish를 다시 시작하면 앱 서버에서로드가 급증 할 수 있으므로 Varnish를 최소로 다시 시작하는 것이 가장 좋습니다. (Vnish는 Vgin 파일을 다시 읽는 Nginx / Apache와 같은 "재로드"가없는 것 같습니다). 반대로 Nginx 구성을 다시로드하면 영향이 최소화됩니다. 이러한 이유로, 나는 Nginx에서 대부분의 URL 재 작성과 "라우팅"을한다.
  2. 니스는 Nginx와 Apache 사이에 쉽게 들어갈 수 있습니다. 앱 서버에서 높은 부하를 감지하기 시작하면 기본 구성으로 니스를 추가하면 실제로 차이가 생길 수 있습니다.
  3. Varnish를 사용하는 경우 캐시 무효화를 어떻게 처리 할 것인지 반드시 고려해야합니다.
  4. 내 경험은 니스가 Nginx보다 실패한 백엔드를 조금 더 우아하게 처리한다는 것입니다 (앞서 지적했듯이).

나는 다른 무언가 뒤에 광택을 본 적이 없다. 니스는 일반적으로 URL 라우터를 수행하는로드 밸런서입니다. 당신은이 웹 서버 1 프록시 또는 2 프록시하고있어 그래서 하나의 웹 서버 Q?
ioanb7

2

Nginx-> Varnish-> uWSGI-> Django를 사용하고 있습니다.

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