nginx를 프론트 서버로 사용하고 CSS 파일을 수정했지만 nginx는 여전히 이전 파일을 제공합니다.
나는 nginx를 다시 시작하려고 시도했지만 성공하지 못했지만 Googled가 있지만 그것을 지우는 올바른 방법을 찾지 못했습니다.
일부 기사에서는 캐시 디렉토리를 삭제할 수 var/cache/nginx
있지만 서버에는 해당 디렉토리가 없습니다.
지금 어떻게해야합니까?
cache
하지 설정 파일에서 발견
nginx를 프론트 서버로 사용하고 CSS 파일을 수정했지만 nginx는 여전히 이전 파일을 제공합니다.
나는 nginx를 다시 시작하려고 시도했지만 성공하지 못했지만 Googled가 있지만 그것을 지우는 올바른 방법을 찾지 못했습니다.
일부 기사에서는 캐시 디렉토리를 삭제할 수 var/cache/nginx
있지만 서버에는 해당 디렉토리가 없습니다.
지금 어떻게해야합니까?
cache
하지 설정 파일에서 발견
답변:
나는 똑같은 문제가 있었다-나는 nginx를 Virtualbox에서 실행하고 있었다. 캐싱을 설정하지 않았습니다. 하지만 마치sendfile
로 설정 on
에서 nginx.conf
문제를 일으키는 것을. @kolbyjack은 주석에서 위에서 언급했습니다.
내가 꺼 졌을 때 sendfile
-잘 작동했습니다.
Sendfile은 '한 파일 설명자와 다른 파일 설명 사이의 데이터 복사'에 사용되며 가상 시스템 환경에서 실행하거나 적어도 Virtualbox를 통해 실행할 때 실제 문제가 발생합니다. nginx에서이 구성을 끄면 정적 파일이 다른 방법을 통해 제공되며 변경 사항이 즉시 반영됩니다.
이 버그와 관련이 있습니다 : https://www.virtualbox.org/ticket/12597
파일을 사용하여 파일을 무시하고 다시 캐시 할 수도 있습니다.
proxy_cache_bypass $http_secret_header;
또한 보너스 로이 헤더를 반환하여 캐시 ( 'HIT'반환) 또는 콘텐츠 서버 ( 'BYPASS'반환)에서 가져 왔는지 확인할 수 있습니다.
add_header X-Cache-Status $upstream_cache_status;
캐시 된 파일을 만료 / 새로 고치려면 curl 또는 나머지 클라이언트를 사용하여 캐시 된 페이지를 요청하십시오.
curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"
그러면 항목의 새로운 사본이 반환되고 캐시에있는 내용도 바뀝니다.
proxy_cache_path 를 통해 캐시 영역을 구성한 다음 (예 : 위치 블록에서) 이를 사용 하지 않으면 proxy_cache 를 통해 캐시되지 않습니다.
그러나 nginx의 저자에 따르면 캐시 디렉토리에서 모든 파일을 제거하면 충분합니다.
가장 간단한 방법 : find /path/to/your/cache -type f -delete
[crit] 1640#0: unlink() "/path/to/cache/85/1cc5328db278b328f2c200c65179ad85" failed (2: No such file or directory)
nginx의 캐시 디렉토리를 삭제하거나 특정 파일을 검색 할 수 있습니다.
grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
그리고 하나의 파일 만 삭제하여 nginx를 새로 고칩니다.
grep -lr 'http://mydomain.pl/css/myedited.css$' /var/nginx/cache/*
grep: /var/nginx/cache/*: No such file or directory
Ubuntu 14.04.3 LTS와 nginx / 1.8.1을 사용 하는 다음과 같은 결과를 얻었습니다 . 어떤 생각?
sudo find /var/nginx/cache -type f -exec grep -l '/css/myedited.css' {} \;
이 질문에는 두 가지 답변이 있습니다.
사용하다:
expires modified +90d;
EG :
location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
access_log off;
root /path/to/htdocs;
expires modified +90d;
}
내 nginx 설치에서 나는 다음으로 가야한다는 것을 알았습니다.
/opt/nginx/cache
과
sudo rm -rf *
그 디렉토리에. nginx 설치 경로를 알고 캐시 디렉토리를 찾을 수 있다면 동일하게 작동 할 수 있습니다. 잘못된 디렉토리에 있으면 전체 하드 드라이브를 삭제할 수 있는 명령에 매우주의 하십시오 rm -rf
.
나는 또한이 문제가 있었다.
내 도메인은 cloudflare.com을 합니다 DNS를 을 합니다 (훌륭한 서비스!). 아하! 거기 있었다 :
cloudflare.com-> 캐싱-> 캐시 제거 (모든 것을 제거) 내 문제를 해결했습니다!
우리는 때때로 닦아야하는 매우 큰 nginx 캐시 (기가 바이트)를 가지고 있습니다. 캐시를 즉시 지우고 (Nginx에 관한 한) 디스크 I / O의 기본 응용 프로그램을 고갈시키지 않고 캐시 디렉토리를 제거하는 스크립트를 작성했습니다.
요약해서 말하자면:
다음은 캐시가있는 Ubuntu 16.04 LTS에 맞게 조정 된 스크립트입니다 /mnt/nginx-cache
.
#!/bin/bash
set -e
TMPCACHE=`mktemp --directory --tmpdir=/mnt nginx-cache-XXXXXXXXXX`
TMPTEMP=`mktemp --directory --tmpdir=/mnt nginx-temp-XXXXXXXXXX`
# Move the old cache folders out of the way
mv /mnt/nginx-cache $TMPCACHE
mkdir -p /mnt/nginx-cache
chmod -R 775 /mnt/nginx-cache
chown www-data:www-data /mnt/nginx-cache
mv /mnt/nginx-temp $TMPTEMP
mkdir -p /mnt/nginx-temp
chmod -R 775 /mnt/nginx-temp
chown www-data:www-data /mnt/nginx-temp
# Tell Nginx about the new folders.
service nginx reload
# Create an empty folder.
rm -rf /mnt/empty
mkdir -p /mnt/empty
# Remove the old cache and old temp folders w/o thrashing the disk...
# See http://serverfault.com/questions/546177/how-to-keep-subtree-removal-rm-rf-from-starving-other-processes-for-disk-i
# Note: the `ionice` and `nice` may not actually do much, but why not?
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPCACHE
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPTEMP
rm -rf $TMPCACHE
rm -rf $TMPTEMP
rm -rf /mnt/empty
도움이되는 경우 다음과 같이 Nginx 구성을 사용하십시오.
upstream myapp {
server localhost:1337 fail_timeout=0;
}
proxy_cache_path /mnt/nginx-cache/app levels=2:2:2 keys_zone=app_cache:100m inactive=1y max_size=10g;
proxy_temp_path /mnt/nginx-temp/app;
server {
listen 4316 default;
server_name myapp.com;
location / {
proxy_pass http://appserv;
proxy_cache app_cache;
proxy_cache_valid 200 1y;
proxy_cache_valid 404 1m;
}
}
다른 솔루션이 작동하지 않는 사람들을 위해 CloudFlare 와 같은 DNS 서비스를 사용하고 있는지 확인하십시오 . 이 경우 "개발 모드"를 활성화하거나 "캐시 제거"도구를 사용하십시오.
특정 파일의 캐시를 지우려면 proxy_cache_bypass
지시문을 사용할 수 있습니다 . 이것이 당신이하는 방법입니다
location / {
proxy_cache_bypass $cookie_nocache $arg_nocache;
# ...
}
이제 캐시를 우회하려면 nocache 매개 변수를 전달하여 파일에 액세스하십시오.
http://www.example.com/app.css?nocache=true
app.css?nocache=true
쿼리없이 원본 파일이 캐시 ( app.css
)에 남아있는 동안 단순히 현재 요청 ( )에 대한 캐시를 우회 하지 않습니까?
다음과 같이 nginx.conf에 구성을 추가 할 수 있습니다.
...
http {
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my-test-cache:8m max_size=5000m inactive=300m;
server {
proxy_set_header X- Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_cache my-test-cache;
proxy_cache_valid 200 302 1m;
proxy_cache_valid 404 60m;
proxy_cache_use_stale error timeout invalid_header updating;
proxy_redirect off;
....
}
...
}
위에서 "nginx_cache"라는 이름의 폴더가 / tmp /에 동적으로 생성되어 캐시 된 내용을 저장합니다.
KEY와 일치하는 캐시 파일 만 제거하는 올바른 방법이 있습니다. 예를 들면 다음과 같습니다.
grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf
nginx.conf에 KEY "yahoo / *"와 일치하는 모든 캐시 파일이 제거됩니다.
proxy_cache_key $host$uri;
우리는 많은 것들을 캐싱하기 위해 nginx를 사용합니다. 캐시 디렉토리에는 수만 개의 항목이 있습니다. 항목을 찾아 삭제하기 위해이 프로세스를 단순화하는 몇 가지 스크립트를 개발했습니다. 이 스크립트의 저장소는 아래에서 찾을 수 있습니다.
https://github.com/zafergurel/nginx-cache-cleaner
아이디어는 간단하다. 캐시 키 (캐시 키 및 해당 캐시 파일 포함)를 작성하고이 인덱스 파일 내에서 검색합니다. 실제로 항목을 빠르게 검색하고 (분에서 1 초 미만으로)이를 삭제하는 데 도움이되었습니다.
비슷한 문제가 발생했습니다.
시스템 설정 및 문제 : (virtualbox에서 우분투와 nginx를 사용하는 웹 호스팅입니다-PHP 웹 페이지 새로 고침에 외부 CSS 파일 변경 사항이 반영되지 않았습니다). Windows 컴퓨터에서 웹 사이트를 개발하고 공유 폴더를 통해 파일을 nginx로 전송하고 있습니다. nginx가 CSS 파일의 변경 사항을 선택하지 않는 것 같습니다 (어떻게 든 새로 고치는 것이 도움이되지 않습니다. CSS 파일 이름 변경은 효과가 있습니다)
솔루션 : VM에서 공유 파일 (필자의 경우 css 파일)을 찾으십시오. nano로 열고 Windows 공유의 파일과 비교하십시오 (동일하게 나타납니다). VM에서 nano로 공유 파일을 저장하십시오. 모든 변경 사항이 브라우저에 반영됩니다. 왜 이것이 효과가 있는지 모르겠지만 제 경우에는 그렇게했습니다.
업데이트 : VM 서버를 재부팅 한 후 문제가 발생했습니다. 솔루션의 지침에 따라 CSS가 다시 업데이트에 응답하게했습니다.
proxy_cache
있습니까?