IT TIP

Vagrant / VirtualBox / Apache2 이상한 캐시 동작

itqueen 2020. 11. 19. 22:47
반응형

Vagrant / VirtualBox / Apache2 이상한 캐시 동작


Vagrant를 사용하여 Apache2로 Ubuntu 기반 VirtualBox를 실행하고 있습니다.

웹 서버는 무엇보다도 내 / vagrant 디렉토리에서 정적 파일을 제공합니다.

이것은 대부분의 경우 잘 작동합니다. 그러나 공유 폴더의 이미지를 변경하고 웹 사이트를 다시로드하면 이전 버전의 이미지가 제공되지만 잘립니다.

먼저 내 공유 폴더에서 이전 사진을 삭제하고 웹 사이트를 새로 고침하여 사진이 표시되지 않도록 한 다음 새 파일을 저장하고 웹 사이트를 다시로드하면 작동합니다.

이 문제에 대해 아는 사람이 있습니까? 특별히 설치된 것은 없습니다. mod_rewrite가있는 Apache 2와 Mongo가있는 PHP, APC Plugin, MongoDB 및 스크립트가있는 nodeJS 만 있습니다.


여기 에서 답을 찾았습니다 .

JC,

당신이보고있는 것은 아마도 정적 파일을 제공하는 서버가 VirtualBox 파일 시스템에서 깨어진 "sendfile ()"syscall을 사용하고 있기 때문일 것입니다. 서버에서 sendfile () 사용을 비활성화해야합니다. Apache의 경우 :

EnableSendfile 끄기

그리고 nginx의 경우 : sendfile off;

최고, 미첼


이것은 나를 미치게 만들었다! 이 Philipp을 게시 해 주셔서 감사합니다. 구성 파일을 변경하는 방법을 모르는 분들을 위해 제가 한 작업은 다음과 같습니다.

파일을 찾으려면 : $ sudo find -name "nginx.conf"

내 것이 여기 있었다 : ./etc/nginx/nginx.conf

그래서 이것을 수정하기 위해 실행했습니다. $ sudo nano ./etc/nginx/nginx.conf

포함 된 행 변경 sendfile on;에를sendfile off;

잊지 마세요 exitvagrant reload!


이것은 VirtualBox의 오래된 버그입니다 ( # 819 , # 9069 , # 12597 , # 14920 ). vboxvfs는 동기화 된 파일에 대한 mmapped 액세스에 문제가있는 것처럼 보입니다.

이는 VM 외부에서 파일을 편집 할 때 발생할 수 있으며 VM 내에서 동일한 변경을 볼 것으로 예상됩니다.

이 문제를 해결하려면 vhosts 파일 또는 가상 호스트 파일 에서 EnableSendfile옵션 을 비활성화하여 클라이언트에 파일을 전달하는 커널 센드 파일 지원을 비활성화해야합니다.httpd.conf

<Directory "/path-to-nfs-files">
  EnableSendfile Off
</Directory>

이것은 특히 NFS 또는 SMB 마운트 파일의 문제입니다. 변경 후 Apache를 다시로드하십시오.

Nginx(에서 nginx.conf)와 유사합니다.

sendfile off;

다른 해결 방법은 호스트에서 파일을 편집하지 않거나 동일한 파일을 다시 편집하지만 VM 내에서 시도하는 것입니다.


또 다른 해결 방법은 Linux 페이지 캐시 삭제를 포함합니다.

echo 1 > /proc/sys/vm/drop_caches

또는 매초마다 캐시를 ​​지우려면 ( 이 게시물에 따라 ) 다음을 시도하십시오.

watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)

참고 : 숫자 1은 페이지 캐시 해제, 2는 dentries 및 inode, 3은 pagecache, dentries 및 inode를 나타냅니다.


위의 문제는 다음 mmap-test 프로그램으로 복제 할 수 있습니다 mmap-problem.c. 참조 : .


VirtualBox / Docker / Nginx 환경과 비슷한 문제가 있습니다.

Linux 페이지 캐시를 삭제하는 결정 echo 1 > /proc/sys/vm/drop_caches은 잘 작동하지만 어색해 보입니다.

또한 지시자 sendfile off;에서이 nginx.conf문제가 해결되지 않았고 나는 그것을 사용하려고 expires off;지시어 함께 그리고 그것은 성공했다.

그래서 내 결정은

sendfile off;
expires off;

Laravel 5, Barryvdh의 Debugbar 및 gulp.watch를 통한 browserSync를 사용하는 모든 사용자에게이 오류가 발생할 수 있습니다. 브라우저 동기화가 내 요청을 프록시하는 방식 때문에 똑같은 오류가 발생했습니다. 내가 통해 내 dev에 서버를 볼 경우 http://127.0.0.1:3000/laravel/page 나는 오류 가지고 http://127.0.0.1/laravel/page의 오류가 없어.

나는 browserSync에서 우리 친구들과 함께 그것을 신고했습니다. 그들은 멋진 일을합니다. 따라서 해결책 이라기보다는 이유에 가깝습니다. 문제를 해결하는 데 몇 시간을 소비하기보다는 시간을 낭비하기 전에 이것이 문제인지 테스트 해보십시오.

이 문제는 이 문서에서 발견 된 오류 와도 유사합니다 .


이것은 또한 CentOS / VirtualBox 설정에서 CSS 파일과 관련된 이상한 동작의 원인이되었습니다.

You could change the contents of a CSS file in the /vagrant folder, and the browser would show a Status of 200 (instead of a 304), meaning it knew the file was new. But the contents wouldn't have changed.

참고URL : https://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour

반응형

'IT TIP' 카테고리의 다른 글

Spring MVC : 차이점  (0) 2020.11.20
익명 열거 형 사용  (0) 2020.11.19
꿀꺽 꿀꺽에서 카르마 작업 실행 문제  (0) 2020.11.19
더 빠른 해시 조회 또는 이진 검색?  (0) 2020.11.19
mysql 서버 포트 번호  (0) 2020.11.19