nginx의 프록시 동작

nginx의 프록시 동작

나는 squid + apache로 작동하는 아키텍처를 대체하기 위해 다양한 구성으로 nginx를 테스트하고 있습니다. nginx를 사용하여 정적 요청과 로드 밸런싱을 관리할 수 있다는 것을 알고 있지만 명확하게 이해하지 못하는 특정 솔루션에 관심이 있습니다.

나는 모든 요청을 Apache 서버에 전달하기 위해 Proxy_pass 설정과 함께 2개의 nginx 서버(균형)를 사용하고 있습니다. 한 클라이언트가 사이트에 요청을 하면 nginx 서버 중 하나가 이를 처리하여 아파치 서버로 보냅니다. 이제 이 동작이 어떻게 내 시스템을 개선할 수 있습니까? 모든 요청이 아파치를 통과하는 것 같고 전혀 이점이 없는 것 같습니다. 100개의 동시 연결이 nginx를 통과하면 어떻게 되나요? 100개의 연결이 아파치 서버로 연결될 것입니까, 아니면 아파치에 작은 영향을 미칠 수 있는 일종의 내부 동작입니까?

답변1

Nginx는 사이트 연결 속도가 느린 경우 Apache에 도움이 될 수 있습니다. 예를 들어 nginx 상태 머신 아키텍처는 Slowloris DDoS에 취약하지 않습니다.http://isc.sans.org/diary.html?storyid=6601.

답변2

nginx가 많은 기능을 수행할 수 있다는 것을 알고 있지만, 아키텍처의 각 부분을 정말 잘 수행하는 소프트웨어에 아키텍처의 각 부분을 위임하면 어떨까요? 로드 밸런싱을 위한 파운드 또는 haproxy, 역방향 캐싱 프록시를 위한 varnish 또는 squid, 정적 및 동적 콘텐츠를 위한 백엔드에 nginx 및 apache를 각각 포함하는 것 중 일부 또는 전부를 고려하십시오.

즉, 귀하의 질문이 무엇인지 정확히 모르겠습니다. nginx에게 모든 요청을 아파치 백엔드에 전달하라고 지시했습니다("통과"는 요청을 캐싱하지 않는다는 뜻이라고 가정합니다). 캐싱이 없으면 백엔드의 여러 Apache 서버에 로드를 분산시키는 이점이 있습니다. 백엔드 Apache 서버가 하나만 있는 경우 요청을 직접 전달하는 것뿐만 아니라 콘텐츠를 캐싱해야만 이점을 얻을 수 있습니다.

설정 및 수행하려는 작업에 대한 자세한 내용이 도움이 될 것입니다.

답변3

동의함 - nginx가 정적 콘텐츠를 직접 제공하도록 하고 Apache는 PHP 작업만 처리하면 됩니다. 즉, Apache 작업자가 훨씬 적어 궁극적으로 훨씬 더 나은 성능을 의미합니다.

  위치 / {
    프록시_패스 http://backendwww;
  }
  위치 ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ {
    access_log off;
    30일에 만료됩니다.
    루트 /var/www/application_webroot;
    error_page 404 = @fallback;
  }
  위치 @fallback {
    프록시_패스 http://backendwww;
  }
  위치 ~ /\.ht {
    모두 거부하다;
  }

답변4

Zero*에 동의하고 enginx가 모든 정적을 처리하도록 합니다. 그러나 더 간단한 구성은 Apache/PHP에 전달하지 않을 항목을 지정하는 대신 PHP를 백엔드에 전달하는 것입니다. 예:

location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }

관련 정보