우리는 개발 플랫폼에서 정적 파일을 제공하기 위해 Nginx를 사용하고 있습니다. 개발 플랫폼이므로 캐싱을 비활성화하여 각 변경 사항이 서버에 전파되도록합니다. VHost의 구성은 매우 간단합니다.
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
HTML 파일 ( http : //static.server.local/test.html )에 액세스 할 때 문제가 없습니다. 파일이 변경되지 않는 한 서버는 수정되지 않은 코드 304 와 200 OK 응답을 반환합니다. 파일이 변경 될 때 수정 된 파일
그러나 Javascript 또는 CSS 파일에서는 다르게 동작하는 것 같습니다. 파일이 변경되면 예상대로 200 OK 응답이 표시되지만 이전 텍스트가 표시됩니다.
Nginx에이 동작을 설명 할 수있는 내부 캐시 메커니즘이 있습니까? 아니면 추가해야 할 구성이 있습니까?
참고로, 파일이 수정되었을 때 Nginx가 반환 한 헤더는 다음과 같습니다 (올바르게 보입니다).
Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54
편집 지시문과 헤더로
다른 설정을 시도한 후 추가 조사를 수행했습니다. 실제로 서버는 VirtualBox 게스트 Ubuntu에 설치되며 Mac OSX 호스트에있는 공유 폴더에서 데이터를 읽습니다.
호스트의 IDE (NetBeans)에서 파일을 편집하면 변경 사항이 나타나지 않지만 게스트에서 직접 편집하면 (VIM 사용) 새로 고쳐집니다.
이상한 점은 HTML 파일과 비슷하게 동작하지 않는다는 것입니다.
꽤 수수께끼입니다.expires
Cache-Control
편집 2 (ANSWER)
실제로, 문제의 원인은 VirtualBox쪽에 있습니다. 또는 VirtualBox와 서버의 "sendfile"옵션간에 충돌이 발생합니다.
이 VirtualBox Hates Sendfile 링크 는 솔루션을 제공합니다. 서버 구성에서 sendfile 플래그를 off로 전환하십시오 .
sendfile off;
이것이 VirtualBox를 개발에 사용하는 다른 사람에게도 도움이되기를 바랍니다. :) VirtualBox 포럼
에 대한 추가 정보가 있습니다 .