
찾을 수 없는 것 같아요충분한선적 서류 비치. 동적 응답을 생성하는 앱이 있지만 여전히 헤더의 이점을 누릴 수 있으므로 Last-Modified
보냅니다.
그러나 전원을 켜면 if_modified_since
( 로 설정됨 before
,http://nginx.org/en/docs/http/ngx_http_core_module.html#if_modified_since)은 비정적 리소스에는 아무런 영향을 미치지 않는 것 같습니다. 예: PHP, Python 앱.
Last-Modified
Nginx가 내 응답 헤더 만 보는 것이 아니기 때문인가요 ? 아래와 같이 올바르게 설정된 것으로 보입니다.
> GET /3.0/view.json?id=2 HTTP/1.1
> Host: xxxxxxxxxxxxx
> Accept: */*
> If-Modified-Since: Sat, 02 May 2015 19:43:02 GMT
>
< HTTP/1.1 200 OK
* Server nginx/1.4.7 is not blacklisted
< Server: nginx/1.4.7
< Date: Fri, 01 May 2015 19:56:05 GMT
< Content-Type: application/json; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Last-Modified: Fri, 01 May 2015 19:56:05 GMT
아니면 내가 간과하고 있는 더 큰 뭔가가 있는 걸까요? if_modified_since
기대치를 설정한 위치와 비교하여 어떻게 구현되는지 궁금합니다 . 나는 응답 헤더만 보고 필요에 따라 상태를 재정의할 것이라고 가정했습니다. 내가 잘못?
답변1
Last-Modified
앱 응답에 헤더를 보내는 것이 시작이지만 If-Modified-Since
앱이 응답해야 304 Not Modified
하고 응답하지 않아야 하기 때문에 들어오는 요청을 제대로 처리하지 못하는 것 같습니다 200 OK
. nginx에서 지시문을 변경하면 역방향 프록시 캐시로 구성하지 않는 한 nginx에서 직접 제공하는 요청, 즉 정적 리소스에만 영향을 줍니다. 이 경우 콘텐츠가 앱에 도달하지 않고 일정 기간 동안 캐시되므로 이 헤더 값과 관련하여 오래된 응답을 제공할 수 있습니다. 켜면 만료된 nginx의 캐시와 앱 사이의 캐시 콘텐츠를 다시 검증하기 위해 헤더를 <X>_cache_revalidate
사용하게 됩니다 (여기서 = Proxy / fastcgi / scgi / uwsgi).If-Modified-Since
<X>
답변2
Nginx의 캐시 구성에 대해 아무 것도 언급하지 않았으므로 캐시를 설정하지 않았다고 가정하겠습니다. 이는 헤더가 If-Modified-Since
동적 응답에 영향을 미치지 않는 이유를 설명합니다.
정적 리소스의 경우 Nginx는 처리 방법을 결정하는 매우 쉬운 방법을 제공합니다 If-Modified-Since
. 즉, 필드의 시간을 파일이 마지막으로 수정된 시간과 비교합니다. 문제 없습니다.
Nginx가 동적으로 생성된 응답에 대해 동일한 작업을 수행하도록 하려는 경우 비교할 것이 없습니다.캐싱을 활성화하지 않는 한.기본적으로 Nginx는 제공된 응답을 기억하지 않습니다. 캐싱을 켜면 Nginx는 들어오는 요청을 이전에 제공된 응답과 비교하는 방법을 가지므로 If-Modified-Since
.
내가 발견했다이 기사Nginx 캐시 설정에 대한 더 자세한 내용을 배우는 데 정말 유용합니다.