NGINX를 통해 HTTP 응답을 무기한 캐싱합니다
-
20-12-2019 - |
문제
NginX가 내 자산 (JS, CSS) 중 일부를 영원히 또는 적어도 오랫동안 캐시하도록 말하려고합니다.
아이디어는 자산 번들이 /assets/
URI 접두어 (예 : /assets/foo-{fingerprint}.js
)로 컴파일되어 게시되면 거기에 머물 것이고 변경 될 필요가 없습니다.
인터넷은 다음 규칙을 작성해야합니다.
location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
gzip_static on; # there's also a .gz of the asset
expires max;
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
break;
}
.
HTTP 코드 304 "수정되지 않음"으로 응답 할 것으로 기대할 것으로 기대하지만, 내가 얻는 것은 매번 일관된 HTTP 200 (OK)입니다.
나는 다른 접근 방식을 시도했다, 예를 들어,
a) 과거의 일정한 지점으로 수정 시간을 명시 적으로 설정합니다.
add_header Last-Modified "Thu, 01 Jan 1970 00:00:00 GMT";
.
b) If-None-Match
점검으로 전환;
add_header ETag $1;
if_modified_since off;
.
그러나 필요에 따라 실제로 작동하는 유일한 것은 다음과 같습니다.
add_header Last-Modified "Thu, 01 Jan 2030 00:00:00 GMT";
if_modified_since before;
.
나는 잃어버린다.이것은 내가 생각한 모든 것에 반하는 것입니다.제발 도와주세요.
해결책
당신에게 잘못된 조언을주기 때문에 당신은 당신의 인터넷을 바꿔야합니다.
위치에서 모든 add_header
라인을 제거하십시오 (잉여 brake
뿐만 아니라) :
location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
gzip_static on; # there's also a .gz of the asset
expires max;
}
.
및 True 인터넷에서 문서를 읽으십시오. http://nginx.org/r/expires 및 HTTP:/TOOLS.IETF.ORG/HTML/RFC2616
다른 팁
내 구성의 일부분이 보입니다.연구 중에 브라우저가 조건부 글꼴 헤더 (e-tag, last-modified)를 사용하여 요청을 검증하기 위해 브라우저가 휴리스틱 한 분석을 사용한다는 것을 깨달았습니다.백 엔드 응답에 많은 의미가 있으므로 서버 리소스를 저장하려면이를 처리 할 수 있습니다.
그러나 정적 파일 (JS, CSS, 이미지)의 측면에서는 조건부 얻기 유효성 검사없이 브라우저를 똑바로 멀리 멀리 할 수 있습니다.변경 사항이있는 경우 파일 이름을 업데이트하는 경우 유용합니다.
구성 의이 부분은 다음과 같습니다.
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
.