Apache/Ubuntu Linux에서 캐싱을 활성화하는 방법은 무엇입니까?

Apache/Ubuntu Linux에서 캐싱을 활성화하는 방법은 무엇입니까?

나는 자주(10분 이하마다) 업데이트되고 많은 트래픽을 발생시키는 대용량(수 메가바이트) XML 파일을 가지고 있습니다. 대역폭과 서버 부하를 줄이기 위해 일부 캐싱을 구현하고 싶습니다. Apache 문서를 보면 mod_expires, mod_headers 및 mod_cache(및 변형)의 다양한 조합이 포함된 어지러운 구성 옵션 배열이 보입니다. 나는 원을 그리며 달리게 되었고 결과는 내가 기대했던 것과 다릅니다.

무엇을 변경해야 할지 알고 있으면 다양한 구성 파일을 편집하는 것이 편합니다. 하지만 지금은 어둠 속에서 이리저리 샅샅이 뒤지고 있는데 그게 결코 편한 기분이 아니거든요. 그래서 아마도 내가 원하는 것을 설명하면 여기 누군가가 내 손을 잡고 "이것이 바로 당신이 해야 할 일입니다."라고 말할 수 있을 것입니다.

주기적으로 "stuff.xml"이라는 이 파일이 업데이트되고 새 버전이 디렉토리에 복사됩니다. 외부 URL은 예를 들어 다음과 같습니다.http://example.com/stuff.xml. 이해하세요, 이 부분은 효과가 있습니다. 파일을 요청할 때마다 예상한 결과를 얻습니다. 하지만 파일이 크고 대역폭을 절약하고 싶기 때문에 먼저 If-Modified-Since 헤더를 사용하여 조건부 GET 의미 체계를 구현하고 싶습니다. 어떻게 해야 하나요? mod_headers 및 mod_expired를 활성화하고 <FilesMatching>온라인에서 본 수많은 예에서 권장되는 대로 httpd.conf에 섹션을 추가했지만 조건부 GET 요청을 수행할 때 동작이 변경되지 않았습니다. 나는 항상 전체 문서에 대해 상태 200을 얻습니다. 그렇다면 이것을 어떻게 구현해야 할까요?

그러면 불필요한 전송이 줄어들 것입니다. 또한 전송되는 데이터의 양을 제한하고 싶습니다. 이것이 XML이므로 gzip으로 압축하면 50% 이상 비용을 절약할 수 있습니다. 다음 단계는 어떻게든 파일을 gzip으로 압축하고, 너무 어렵지 않으면 메모리에 저장하는 것입니다. 그러면 액세스별 데이터 전송이 줄어들고 디스크 전송도 줄어듭니다. 그렇다면 이러한 유형의 캐싱을 어떻게 구현합니까?

미리 감사드립니다.

답변1

다음을 사용하여 캐싱을 설정했습니다.mod_expires, <VirtualHost> 정의 내

ExpiresActive on
ExpiresByType text/xml "modified plus 5 minutes"   

다음을 사용하여 압축을 설정할 수 있습니다.mod_deflate

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/xml 

답변2

If-Modified-Since가 작동하지 않는 이유에 대해서는 구성의 관련 부분을 게시해야 한다고 생각합니다(Apache를 다시 시작했다고 가정합니다). 또한 동일한 IP(동일한 사용자일 수 있음)가 해당 XML 파일을 여러 번 가져오는지 확인하기 위해 로그를 빠르게 구문 분석할 수도 있습니다. 매번 새로운 사용자가 항상 또는 대부분인 경우 클라이언트 측 캐시는 서버의 로드를 줄이는 데 도움이 되지 않습니다.

압축에 대해서는 다음을 살펴보고 싶습니다.mod_deflate 및/또는 mod_gzip. 여기Linux Journal의 오래된 비교입니다.

메모리 캐싱의 경우 캐싱할 가치가 있을 만큼 충분히 액세스되면 OS가 이미 캐싱하고 있을 것입니다. 파일에 IO 문제나 나쁜 대기 시간이 없다면 OS가 해당 작업을 수행할 것이라고 믿습니다.

관련 정보