Apache 연결과 요청

Apache 연결과 요청

기본적인 질문이라면 미리 사과드리며, 아파치 문서와 다른 튜토리얼을 읽어보니 상당히 혼란스럽습니다.

단일 Apache 프리포크 프로세스가 특정 클라이언트에 대한 모든 HTTP 요청을 처리합니까? 그렇게 생각했는데, maxclients를 낮은 숫자로 줄이면 페이지 로드 시간이 크롤링 속도로 빨라집니다. 문제의 서버에서 내가 유일한 클라이언트라는 사실에도 불구하고 이것은 그렇습니다. 이는 TimeOut 창 내에서 모든 요청을 처리하는 대신 각 프로세스가 한 번에 단일 HTTP 요청을 처리하는 것을 제안합니다.

따라서 단일 웹페이지가 완전히 로드되기 위해 15개의 HTTP 요청이 필요한 경우 이를 최적으로 제공하려면 15개의 프리포크 Apache 프로세스가 필요합니까?

답변1

우리가 일반적으로 HTTP 프로토콜에 대해 생각하는 방식은 문제가 되지 않습니다.

최신 브라우저 사용살아 유지한 번에 하나의 요청만 전달할 수 있는 연결; 그런 의미에서 MaxClients 1해당 연결의 각 요청은 다음 연결이 시작되기 전에 완료되므로 사용은 영향을 미치지 않습니다.

그러나 이는 최신 브라우저의 또 다른 특징입니다. 그들은 여러 연결을 사용합니다. 요즘에는 40개의 다른 리소스를 로드해야 하는 HTML 페이지를 보게 될 수도 있습니다. 이미지, 자바스크립트, CSS. 하나의 연결을 통해 전송하기 위해 모든 파일을 단일 파일로 쌓아 두는 것은 효율성 측면에서 별 의미가 없습니다. 대신 동시에 가져오기 위해 소수의 연결(각각은 여전히 ​​단일 파일임)로 분할됩니다.

각 브라우저의 동작에 대한 신뢰할 수 있는 정보 소스를 찾을 수는 없지만내가 찾을 수 있는 것6개의 연결이 거의 정상임을 나타냅니다. 여기가 서버의 동시성이 중요한 역할을 하는 곳입니다. 이러한 6개의 연결 각각은 동시에 리소스를 요청할 수 있으며 서버 관점에서 6개의 다른 클라이언트 역할을 합니다.

답변2

mpm_prefork하나의 연결에만 응답합니다. Apache가 프로세스당 둘 이상의 연결을 제공하도록 하려면 mpm_worker.

최신 브라우저는 파이프라인(여러 동시 연결)과 연결 유지(동일한 연결에서 직렬화된 요청)를 사용하여 처리량과 네트워크 효율성을 높이고 대기 시간을 낮춥니다. 예를 들어 Mozilla Firefox는 다음 network.http.pipeliningnetwork.http.pipelining.maxrequests같이 변경하여 구성할 수 있습니다.about:config

관련 정보