고정 서버로 nginx를 실행하고 있습니다. 서버측 폴더 template.xlsx
파일을 업데이트할 때. 다운로드하면 여전히 이전 파일이 반환되므로 template.xlsx
정적 파일을 새 파일로 교체한 것이 확실합니다 . nginx가 새로운 nginx 파일을 반환하도록 만드는 방법은 무엇입니까? 이것은 정적 nginx 구성입니다.
server{
listen 443 ssl;
ssl_certificate /etc/nginx/conf.d/cert/example.com/fullchain1.pem;
ssl_certificate_key /etc/nginx/conf.d/cert/example.com/privkey1.pem;
server_name static.example.com;
location / {
root /usr/share/nginx/html/static;
client_max_body_size 50m;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
index index.html index.htm;
}
}
Docker 컨테이너를 다시 시작해 보았지만 여전히 새 템플릿이 반환되지 않는 것 같습니다.
답변1
기본적으로 nginx는 off
다음을 사용합니다.만료됨지시하다. 이는 nginx가 "Expires" 및 "Cache-Control" 응답 헤더 필드를 추가하거나 수정하지 않음을 의미합니다. 정적 파일의 경우 이는 클라이언트(브라우저)가 두 헤더 없이 리소스를 캐시하는 방법을 자유롭게 선택할 수 있음을 의미합니다(이는 사용자에게 정의되지 않은 동작입니다.HTTP 사양요청을 새로 고치지 않는 한(브라우저에서 F5/Ctrl+F5 또는 If-Modified-Since
클라이언트의 요청 헤더) 설정에 따라 현재 세션에 대한 응답과 같은 성공적인 응답을 저장하거나 고정된 시간 동안 더 오래 저장할 수 있기 때문입니다. ). 머리).If-None-Match
Cache-Control
Pragma
브라우저/클라이언트가 캐시된 파일을 사용할 수 있으므로 nginx(또는 docker 컨테이너)를 다시 시작해도 전혀 도움이 되지 않습니다. 브라우저에서 DevTools(F12) -> 네트워크를 사용하여 다운로드가 시작될 때 정확히 어떤 일이 발생하는지(그리고 브라우저가 요청과 함께 보내고 nginx에서 응답을 받는 헤더가 무엇인지) 모니터링할 수 있습니다.
당신은 할 수 있습니다:
- 해당 파일(위치)에 대한 캐싱을 비활성화하거나 헤더를 사용
expires -1;
하거나 추가합니다Cache-Control: no-cache
(적어도 거의 변경되지 않는 리소스(예: 이미지, 스타일 및 JS)에 대해서는 제외하고 모든 정적 항목에 대해 캐싱을 완전히 비활성화하는 것은 권장되지 않습니다). - 또는 브라우저/클라이언트가 다른 URI로 다시 로드하도록 강제합니다 . 예를 들어 아래와 같은 델타 접미사(또는 간단한 타임스탬프)
template.xlsx?ver=2
를 사용하여 요청을 보냅니다 .?ver=...
- 또는 F5/Ctrl+F5를 사용하여 브라우저/클라이언트를 강제로 다시 로드하도록 합니다(일부 HTTP 클라이언트의 브라우저 또는 헤더인 경우)
Cache-Control: no-cache
.Pragma: no-cache