programing

nginx의 캐시를 지우는 방법은 무엇입니까?

topblog 2023. 8. 21. 19:25
반응형

nginx의 캐시를 지우는 방법은 무엇입니까?

나는 nginx to를 프론트 서버로 사용하고, CSS 파일을 수정했지만, nginx는 여전히 이전 파일을 서비스하고 있습니다.

nginx를 다시 시작하려고 했지만 성공하지 못했고 구글에 검색했지만 삭제할 수 있는 유효한 방법을 찾지 못했습니다.

그냥 삭제할 수 : 일부기사캐삭수합있니다다고제할를리렉토디.var/cache/nginx하지만 내 서버에는 그런 디렉터리가 없습니다.

저는 이제 어떡하죠?

Virtualbox에서 nginx를 실행하고 있던 것과 똑같은 문제가 있었습니다.캐시를 설정하지 않았습니다. 하만보엔처럼 .sendfile로 설정되었습니다.onnginx.conf그리고 그것이 문제를 일으켰습니다.@combyjack은 위에 댓글로 언급했습니다.

때 ㅠㅠㅠㅠㅠㅠㅠㅠㅠsendfile그것은 잘 작동했습니다.

그 이유는 다음과 같습니다.

Sendfile은 '한 파일 설명자와 다른 파일 설명자 간에 데이터를 복사'하는 데 사용되며, 가상 시스템 환경에서 실행할 때나 적어도 가상 상자를 통해 실행할 때 실제 문제가 있는 것으로 보입니다.nginx에서 이 구성을 해제하면 정적 파일이 다른 방법을 통해 제공되며 변경 사항이 즉시 반영됩니다.

버그와 관련이 있습니다. https://www.virtualbox.org/ticket/12597

다음을 사용하여 파일 단위로 파일을 바이패스/재캐시할 수도 있습니다.

proxy_cache_bypass $http_secret_header;

또한 이 헤더를 반환하여 캐시에서 가져왔는지('HIT' 반환 예정) 또는 콘텐츠 서버에서 받았는지('BYPASS' 반환 예정) 확인할 수 있습니다.

add_header X-Cache-Status $upstream_cache_status;

캐시된 파일을 만료/해제하려면 curl 또는 rest 클라이언트를 사용하여 캐시된 페이지에 요청합니다.

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

nginx의 캐시 디렉터리를 삭제하거나 특정 파일을 검색할 수 있습니다.

grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*

파일을 하나만 삭제하여 nginx를 새로 고칩니다.

저는 매우 간단한 bash 스크립트를 실행합니다. 이 스크립트는 작업하는 데 10초가 걸리고 완료되면 메일을 보냅니다.

#!/bin/bash
sudo service nginx stop
sudo rm -rf /var/cache/nginx/*
sudo service nginx start | mail -s "Nginx Purged" me@gmail.com
exit 0

저도 이런 문제가 있었습니다.

  • nginx/cache 폴더를 찾을 수 없습니다.
  • 전송 파일이 꺼졌습니다.

제 도메인은 DNS를 위해 cloudflare.com 을 사용합니다(훌륭한 서비스!).아하! 거기 있었어요.

cloudflare.com -> 캐싱 -> 캐시 삭제 (모든 항목을 삭제했습니다)그게 내 문제를 해결했어요!

이 질문에는 두 가지 답이 있습니다.

  • nginx를 역방향 캐시로 사용하는 경우 1개
  • 헤더 입력으로 브라우저 캐시를 정리하기 위한 또 다른 항목(이 항목)

사용:

expires modified +90d;

예:

location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
    access_log off;
    root /path/to/htdocs;
    expires modified +90d;
}

저는 이것이 유용하다고 생각했습니다.

grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm

검색하고 찾으면 삭제합니다.

때때로 삭제해야 하는 매우 큰 nginx 캐시(기가바이트)가 있습니다.Nginx에 관한 한 캐시를 즉시 삭제한 다음 디스크 I/O를 위한 기본 애플리케이션을 사용하지 않고 캐시 디렉토리를 제거하는 스크립트를 작성했습니다.

요약:

  1. 캐시 폴더를 동일한 파일 시스템의 새 위치로 이동합니다. 이렇게 해도 열려 있는 파일 설명자가 중단되지 않습니다.
  2. 원래 캐시 폴더를 다시 만듭니다(공백).
  3. Nginx 다시 로드(여기서 nginx는 이전 작업자가 진행 중인 요청을 완료할 수 있도록 허용하는 우아한 다시 로드)
  4. 캐시된 이전 데이터 제거

은 Ubuntu .04는 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;
    }
}

nginx 설치 과정에서 다음과 같은 작업을 수행해야 했습니다.

sudo rm -rf /opt/nginx/cache

해당 디렉토리에 있습니다.nginx 설치 경로를 알고 캐시 디렉토리를 찾을 수 있다면 동일한 방법이 사용자에게 적용될 수 있습니다.매우 조심해서 사용하십시오.rm -rf명령, 잘못된 디렉토리에 있는 경우 하드 드라이브 전체를 삭제할 수 있습니다.

다른 솔루션이 작동하지 않는 경우 CloudFlare와 같은 DNS 서비스를 사용하고 있는지 확인합니다.이 경우 "개발 모드"를 활성화하거나 "캐시 정리" 도구를 사용합니다.

proxy_cache_bypass는 앱이 특정 요청에 대해 캐시 가능한 응답을 트리거하지 않으면 큰 타격을 줄 수 있습니다.

예를 들어 앱이 첫 번째 요청마다 쿠키를 보낸다면, curl을 통해 proxy_pass_bypass를 트리거하는 스크립트는 아마도 해당 쿠키를 응답에 가져올 것이고 nginx는 캐시된 항목을 새로 고치기 위해 해당 응답을 사용하지 않을 입니다.

는 nginx 파일에 ./data/nginx/cache/

그래서 나는 그것만 제거했습니다:sudo rm -rf /data/nginx/cache/

이것이 누구에게나 도움이 되기를 바랍니다.

nginx 캐시 파일을 삭제하려고 시도한 적이 있거나 작동하지 않거나 간헐적으로 작동한 적이 있는 사용자는 open_file_cache 설정을 참조하십시오.파일 설명자를 장기간 캐시하도록 설정하고 구성한 경우 디스크에서 삭제한 후에도 Nginx에 캐시된 파일 버전이 표시될 수 있습니다.open_file_cache_valid를 1초로 줄여야 했습니다(이것이 파일 캐시를 완전히 비활성화하는 것과 본질적으로 동일한지는 모르겠습니다).

find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart

올바른 경로를 올바르게 지정해야 합니다.

어떤 KEY와도 일치하는 캐시 파일만 제거하는 올바른 방법이 하나 있습니다.예:

grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf

nginx.conf가 설정된 경우 KEY "yahoo/*"와 일치하는 모든 캐시 파일이 제거됩니다.

proxy_cache_key $host$uri;

특정 파일의 캐시를 지우려면 다음을 사용할 수 있습니다.proxy_cache_bypass지시의이렇게 하면 됩니다.

location / {
    proxy_cache_bypass $cookie_nocache $arg_nocache;
    # ...
}

캐시를 바이패스하려면 nocache 매개 변수를 전달하여 파일에 액세스합니다.

http://www.example.com/app.css?nocache=true

다음과 같이 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/에 동적으로 생성되어 캐시된 콘텐츠를 저장합니다.

저 같은 경우에는.touch그 CSS 파일, 리소스가 변경된 것처럼 보이게 합니다(실제로는).touch마지막 수정 시간 변경을 제외하고 파일에 아무 작업도 수행하지 않음), 따라서 브라우저와 nginx가 최신 리소스를 적용합니다.

일반적인 캐시 문제 상황(브라우저 캐시, 프록시 캐시, 웹 서버 캐시)에서는 링크에 URI 매개 변수를 추가하여 CSS 또는 JS 파일과 같은 드물게 변경되는 캐시 문제에 대한 일반적으로 알려진 결정을 사용할 수 있습니다.

것은 아니다.<link rel="stylesheet" type="text/css" href="https://example.com/stacks.css">

그렇지만<link rel="stylesheet" type="text/css" href="https://example.com/stacks.css?v=3b16a418cc4c">

StackOverflow도 마찬가지입니다.:)

우리는 많은 것들을 캐싱하기 위해 nginx를 사용합니다.캐시 디렉터리에는 수만 개의 항목이 있습니다.항목을 찾아 삭제하기 위해 이 프로세스를 간소화하는 몇 가지 스크립트를 개발했습니다.아래에서 다음 스크립트가 포함된 코드 저장소에 대한 링크를 찾을 수 있습니다.

https://github.com/zafergurel/nginx-cache-cleaner

아이디어는 간단합니다.캐시의 인덱스(캐시 키 및 해당 캐시 파일)를 만들고 이 인덱스 파일 내에서 검색합니다.몇 분에서 몇 초 안에 항목을 찾는 속도를 높이고 그에 따라 항목을 삭제하는 데 큰 도움이 되었습니다.

비슷한 문제를 겪고 있었습니다.

시스템 설정문제: (가상 상자에서 Ubuntu 및 nginx를 사용하여 웹 호스팅 중 - PHP 웹 페이지 새로 고침에 외부 CSS 파일의 변경 사항이 반영되지 않았습니다.)저는 윈도우 머신에서 웹사이트를 개발하고 공유 폴더를 통해 nginx로 파일을 전송하고 있습니다.nginx가 css 파일의 변경 사항을 픽업하지 않는 것 같습니다(어떤 방식으로든 새로 고치는 것은 도움이 되지 않습니다).CSS 파일 이름을 변경하는 것만이 효과가 있었습니다.)

솔루션:VM에서 공유 파일(이 경우 css 파일)을 찾습니다.nano로 열고 Windows 공유에 있는 파일과 비교합니다(동일해 보임).VM에서 공유 파일을 nano로 저장합니다.이제 모든 변경 사항이 브라우저에 반영됩니다.이게 왜 효과가 있는지는 모르겠지만 제 경우에는 효과가 있었습니다.

업데이트: VM 서버를 재부팅한 후 문제가 발생했습니다.솔루션의 지침에 따라 CSS가 업데이트에 다시 응답하도록 했습니다.

이미 많은 답이 나와 있지만, 저는 유용한 추가 사항이 있다고 생각합니다.

저는 Hyper-V로 홈스테드 박스를 운영하고 있으며 nginx에서 대규모 프로젝트를 실행하고 있었습니다.

/etc/의 nginx 폴더에 캐시가 없었습니다.

제가 제 웹사이트를 방문했을 때, 저는 서버의 오래된 뷰와 CSS 파일을 받고 있었습니다.

nginx 구성을 보고 많은 시간을 낭비하는 검색을 한 후에 해결된 것은 PHP 장인을 사용한 것입니다.

artisan이 설치된 폴더에서 다음 명령을 실행합니다 [root dir of laravel project]: phpartisan optimize: clear

이 명령은 모든 캐시를 지우고 웹 페이지를 새로 고쳤을 때 모든 변경 사항으로 최종 업데이트했습니다.

이것이 나처럼 고립된 영혼들에게 도움이 되길 바랍니다 :)

편집: 제가 50개의 명성을 가지고 있었다면 이미 존재하는 답변 중 하나에 대한 코멘트로 이 글을 올렸을 것입니다.[저는 지금까지 43개밖에 없습니다.

이 답변은 주로 요약됩니다.

Expires, Age, Cache-Control are HTTP concepts
다음 링크를 확인하십시오.

nginx settings마찬가지로, 아래 링크를 확인하십시오.

.not cache다음은 도움이 될 수 있습니다. (캐시의 재검증 시간을 단축할 수 있습니다.)

expires    0;
add_header Cache-Control private;

.clear cache:
디렉토리 directory)에서 파일을 합니다./var/nginx/cache/)
nginx - nginx (다시 시작하지 않음) -nginx -s reload
https://forum.nginx.org/read.php?2,2600,2602 을 참조하십시오.

제 경우에는 /etc/php/7.2/fpm/php.ini(Ubuntu)에서 활성화된 opcache였습니다.

opcache.enable=1

0으로 설정하면 서버가 최신 버전의 (php) 파일을 로드합니다.

언급URL : https://stackoverflow.com/questions/6236078/how-to-clear-the-cache-of-nginx

반응형