> 백엔드 개발 > PHP 튜토리얼 > Apache mod_expires 및 mod_headers를 사용하여 파일 캐싱 및 mod_deflate 압축 출력을 구현하는 방법

Apache mod_expires 및 mod_headers를 사용하여 파일 캐싱 및 mod_deflate 압축 출력을 구현하는 방법

jacklove
풀어 주다: 2023-03-31 13:00:01
원래의
2311명이 탐색했습니다.

1. mod_deflate 모듈을 사용하여 출력 압축(gzip 시작)

Enable mod_deflate

sudo a2enmod deflate
sudo /etc/init.d/apache2 restart
로그인 후 복사

Add

<IfModule mod_deflate.c>
#单独设置需要压缩的类型
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
로그인 후 복사

기본적으로 모든 출력은 http에서 압축되어야 합니다. d.conf , 부분만 제외합니다.

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE #插入过滤器,gzip所有输出
#设置不压缩的类型
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>
로그인 후 복사

2 Apache mod_expires 및 mod_headers를 사용하여 파일 캐싱


Enable mod_expiresmod_headers

sudo a2enmod expires
sudo a2enmod headers
sudo /etc/init.d/apache2 restart
로그인 후 복사

httpd.conf에서 mod_expires를 활용하세요.

<IfModule mod_expires.c>
ExpiresActive on #开启
ExpiresDefault A300 #默认
ExpiresByType text/html A300
ExpiresByType text/css A2592000 # 30天
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>
로그인 후 복사

mod_headers를 사용하여

<IfModule mod_headers.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=18000, public, must-revalidate"
</FilesMatch>
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>
로그인 후 복사


3을 추가하세요. 캐시 제어 설명:


웹 페이지의 캐시는 HTTP 메시지의 "캐시"에 의해 결정됩니다. header -control". 일반적인 값에는 private, no-cache, max-age, must-revalidate 등이 포함됩니다. 기본값은 private입니다. 해당 기능은 다양한 재탐색 방법에 따라 다음과 같은 상황으로 구분됩니다.


(1) 새 창 열기
값은 비공개, 캐시 없음, 재검증 필수이며, 새 창이 열리면 서버에 다시 액세스됩니다.
그리고 max-age 값이 지정되면 이 값 내에서 서버에 다시 액세스하지 않습니다. 예:
Cache-control: max-age=5 (5초 이내에 웹페이지에 다시 액세스한다는 의미) 서버에 가지 마세요)
(2) 주소창에 입력하세요
해당 값이 비공개이거나 재검증이 필요한 경우 서버에 처음 한 번만 접속하고, 다시 접속할 수 없습니다.
값이 no-cache이면 매번 액세스됩니다.
값이 max-age인 경우 만료되기 전에는 다시 액세스할 수 없습니다.
(3) 뒤로 버튼 누르기
값이 private, must-revalidate, max-age이면 다시 액세스되지 않으며,
값이 no-cache이면 매번 다시 액세스됩니다
(4) 새로 고침 버튼을 누르세요
상관없이 왜 반복적으로 액세스합니까?

Cache-Control (기존 헤더, http1.1)
.public: (응답 헤더에만 해당)
응답: 캐시에 알리기 위해 어쨌든 무조건 조건으로 응답을 캐시할 수 있습니다.
.private(응답 헤더만)
응답: 캐셔에게 알립니다(내가 아는 한, 사용자 에이전트를 말하며, 공통의 로컬 캐시를 의미함) 사용자는 시스템 사용자를 의미할 수도 있습니다. 그러나 일부 게이트웨이는 각 최종 사용자를 식별할 수 있으며 특정 필드만 구체적으로 지정할 수 있습니다. private - "username", 응답 헤더에서 username이라는 필드 헤더 내용은 공유 캐시되지 않습니다.
.no-cache:
요청: 원본 요청을 있는 그대로 정확하게 전달해야 한다고 캐셔에게 알립니다. , 캐시된 사본을 직접 사용하여 사람들을 속이지 말라고 캐셔에게 알립니다. 귀하는 내 요청을 전달하고 캐시(있는 경우)를 확인해야 합니다. 해당 명사: 엔드투엔드 다시 로드
      응답: 캐셔가 사본을 캐시하도록 허용합니다. 따라서 실제 값은 캐셔가 항상 캐시의 신선도를 확인하도록 강제하는 것입니다. 신선도가 확인되면 캐시된 복사본을 응답으로 사용할 수 있으며 일반적인 것과 같은 포함된 필드를 지정할 수도 있습니다. application, no-cache=Set-Cookie. 이에 따라 Set-Cookie 필드에 캐시된 콘텐츠를 사용하지 말고 다른 콘텐츠를 캐시할 수 있음을 알려드립니다. store
: 요청: 요청과 응답이 캐시되지 않음을 알립니다. (개인정보 보호상의 이유로 그럴 수도 있습니다.) 응답: 위와 동일합니다..
max-age
: 요청: 이를 기반으로 응답 캐셔가 최신성을 확인하도록 강제합니다. 즉, 이를 자체 Age 값 및 요청 시간과 비교합니다. max-age 값이 초과되면 서버 측 확인에서 해당 기능이 기본적으로 기존 Expires와 유사하다는 것을 확인합니다. 그러나 차이점은 Expires가 특정 날짜 값을 기준으로 비교된다는 것입니다. 일단 캐셔가 자신의 시간이 정확하지 않으면 결과가 잘못될 수 있습니다. Max-age의 우선순위도 더 높습니다.
응답: 보낸 사람이 다르다는 점을 제외하면 위와 비슷합니다. max-stale:
요청: 캐셔가 지정된 시간(초) 이내에 만료되는 오래된 캐시를 보낼 수 있도록 허용합니다.
응답: 위와 동일
.must-revalidate (응답 헤더만) )
        응답: 캐시가 최신 상태인 경우 캐시를 반환하려고 시도하는 대신 재검증을 받아야 함을 의미합니다. no-cache는 신선도 개념을 완전히 무시한다는 점에서 차이가 있습니다. 일반적으로 강제 재검증은 이론상으로는 no-cache와 비교하여 더 많은 트래픽을 절약합니다. 캐셔가 최신이라고 생각하더라도 서버가 업데이트되지 않았다는 보장이 없기 때문에 캐싱 프록시 서버인 경우 다시 시도할 때 원래 서버에 연결할 수 없습니다. -인증, 오래되고 캐시된 복사본을 반환하는 것은 허용되지 않습니다. 대신 504 게이트웨이 시간 초과를 반환해야 합니다.
.
proxy -Revalidatel(응답 헤더만) 응답: Must-Revalidate와 유사합니다. 사용자 에이전트의 캐시를 제거하는 프록시 재검증..
min-fresh
(요청 헤더만)요청: 현재 시간에 min-fresh 값을 더한 값이 캐시 만료 시간을 초과하면 새로운 캐시를 제공할 것이라고 캐셔에게 알립니다. 사실 개인적으로 그 기능은 max-age와 다소 비슷하다고 생각합니다. .하지만 의미상 차이가 있습니다.
.only-if-cached: (요청 헤더만)
요청: 캐시에서 콘텐츠를 가져오길 원한다고 말하세요. 캐시된 응답이 최신입니다.
.s-maxage(응답 헤더만)
      응답: max-age와의 유일한 차이점은 s-maxage가 공유 캐시에만 적용된다는 것입니다. 또한, s-maxage는 max-age..cache-extension보다 우선순위가 높습니다(cache-extension은 일반적인 이름입니다. 이는 모든 사용자 정의 또는 확장 명령, 클라이언트 및 server Cache-Control 관련 지침을 사용자 정의하고 확장할 수 있습니다.) 그러면 실제로 다음과 같이 할 수 있습니다. Cache-Control: max-age=300, custom-directive = xxx, public 이런 식으로 캐시 확장이라는 확장 지시문을 정의합니다. 해당 클라이언트나 서버가 이 지시문을 인식하지 못하면 무시됩니다.
.no-transform
요청: 프록시에 알리지 마세요. jpg와 같은 미디어 유형을 변경하면 png로 변경됩니다. 응답: 위와 동일합니다.

이 문서에서는 Apache mod_expires 및 mod_headers를 사용하여 파일 캐싱 및 mod_deflate 압축 출력을 구현하는 방법을 설명합니다. PHP 중국어 웹사이트에 주목하세요.

관련 권장 사항:


HTML5 히스토리 API 소개

버블링, 이분법 삽입, 빠른 정렬 알고리즘 소개

중단점 이력서 다운로드를 지원하는 PHP 파일 다운로드 클래스 설명 콘텐츠

위 내용은 Apache mod_expires 및 mod_headers를 사용하여 파일 캐싱 및 mod_deflate 압축 출력을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿