我使用nginx作爲前臺服務器,我修改了CSS文件,但nginx仍然在服務於舊的服務器。如何清除nginx的緩存?
我試圖重啓nginx的,沒有成功,我用Google搜索,但沒有找到有效的方法來清除它。
有些文章說,我們可以刪除緩存目錄:var/cache/nginx
,但我的服務器上沒有這樣的目錄。
我應該怎麼辦?
我使用nginx作爲前臺服務器,我修改了CSS文件,但nginx仍然在服務於舊的服務器。如何清除nginx的緩存?
我試圖重啓nginx的,沒有成功,我用Google搜索,但沒有找到有效的方法來清除它。
有些文章說,我們可以刪除緩存目錄:var/cache/nginx
,但我的服務器上沒有這樣的目錄。
我應該怎麼辦?
我有完全相同的問題 - 我跑我在VirtualBox中nginx的。我沒有緩存打開。但看起來像sendfile
被設置爲on
在nginx.conf
這是造成這個問題。 @kolbyjack在評論中提到了它。
當我關掉sendfile
- 它工作得很好。在虛擬機環境中運行時,或者至少當通過VirtualBox的運行
SENDFILE是「一個文件描述符和另一個之間複製數據」用於和顯然有一些真正的麻煩。在nginx中關閉此配置會導致靜態文件通過不同的方法提供服務,並且您的更改將立即反映並且毫無疑問地被反映出來
像宣傳的那樣,但一個鏈接,並約了sendfile的目的,一些信息會比個人帳戶的讚賞。將其從日記條目更改爲事實答案並獲得我的投票。 – 2013-09-06 19:34:44
請參閱本[鏈接](http://jeremyfelt.com/code/2013/01/08/clear-nginx-cache-in-vagrant/) – 2014-01-20 06:49:48
以我的情況下,可替代的解決方法是打開的gzip這些文件類型。無論哪種方式,問題都解決了。 – Dingle 2014-03-23 00:28:27
可以刪除Nginx的緩存目錄或您可以搜索特定的文件:
grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
和刪除只有一個文件到nginx的刷新它們。
要獲得準確的匹配,您可以在搜索詞中追加** $ **。像'grep -lr'http://mydomain.pl/css/myedited.css$'/ var/nginx/cache/*' – 2014-10-17 11:39:48
不幸的是我得到了如下輸出:'grep:/ var/nginx/cache/*:No這樣的文件或目錄我正在使用Ubuntu 14.04.3 LTS和nginx/1.8.1。任何想法? – webtobesocial 2016-02-06 14:46:37
嘗試以下命令來清理/ var/nginx/cache下的文件:'sudo find/var/nginx/cache -type f -exec grep -l'/css/myedited.css'{} \;' – 2017-10-09 20:56:31
除非你通過proxy_cache_path配置緩存區,然後(在一個位置塊例如)使用它,通過: proxy_cache沒有將得到緩存。
如果你沒有,但是,再according to the author of 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)' – 2013-06-30 20:23:14
重複或只是一次?它不應該是一個實際的問題。這可能意味着緩存管理器試圖刪除已刪除的文件。如果重複獲取消息,也許重新加載nginx(nginx -s reload)可能會有所幫助。 (不知道這是否也重新初始化了緩存管理器。) – Gnarfoz 2013-07-02 17:50:37
是的,每次部署更改時,我都會通過腳本自動清除我網站的緩存,重新加載nginx也不會修復它。 – 2013-07-02 21:13:54
在我的nginx的安裝,我發現我不得不去:
/opt/nginx/cache
和
sudo rm -rf *
在該目錄中
。如果你知道你的nginx安裝路徑並且可以找到緩存目錄,那麼你可以使用它。要非常小心與rm -rf
命令,如果你是在錯誤的目錄,你可以刪除你的整個硬盤驅動器。
你需要 – 2016-09-21 15:21:24
後重新啓動NGINX這就是壞的部分 – kidz 2017-09-07 20:51:54
這個問題有兩個答案。
使用:
expires modified +90d;
EG:
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.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 /創建,用於存儲緩存內容。
正確的答案。 – jwg 2017-03-27 15:57:47
您還可以繞過/再高速緩存中的文件使用
proxy_cache_bypass $http_secret_header;
,並作爲獎勵,你可以回到這個頭,看看您是否從緩存中得到它的文件的基礎上(將返回「重災區」 )或從內容服務器(將返回'BYPASS')。
add_header X-Cache-Status $upstream_cache_status;
到期/刷新緩存的文件,使用捲曲或任何其他客戶端做出的緩存頁面的請求。
curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"
這將返回該項目的新副本,它也將替換緩存中的內容。
有一種正確的方法可以僅刪除與任何KEY匹配的緩存文件。例如:
grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf
這將刪除所有緩存文件,這些文件匹配KEY 「雅虎/ *」,如果在nginx.conf設置:
proxy_cache_key $host$uri;
我的服務器上,Nginx的緩存文件夾在/data/nginx/cache/
所以,我只能刪除它:sudo rm -rf /data/nginx/cache/
希望這將幫助任何人。
對於那些誰的其他解決方案不工作,檢查,如果您使用的是DNS服務像CloudFlare。在這種情況下,激活「開發模式」或使用「清除緩存」工具。
find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart
請注意正確指定正確的路徑。
請大家注意,proxy_cache_bypass可以給你傷害的世界,如果你的應用程序不返回,你觸發它特定請求的緩存響應。
例如,如果你的應用程序將與每一個第一次請求一個cookie,然後通過捲曲觸發proxy_pass_bypass腳本可能會得到答案,那個cookie和nginx的將不使用該響應刷新緩存項。
我正經歷着一種類似的問題:
系統設置和問題: (在VirtualBox的我使用Ubuntu和nginx的Web託管 - PHP網頁刷新並沒有反映對外部CSS文件)。我正在開發Windows機器上的網站,並通過共享文件夾將文件傳輸到nginx。這似乎nginx的不拿起的CSS文件的更改(以任何方式不利於刷新更改CSS文件名,僅僅是工作的事情)
解決方案: 虛擬機上查找共享文件(CSS文件在我的情況)。用nano打開並與Windows共享中的文件進行比較(它們看起來相同)。在VM上使用nano保存共享文件。所有更改現在都反映在瀏覽器中。不知道爲什麼這個工程,但它在我的情況。
更新:重新啓動VM服務器後,問題返回。按照「解決方案」中的說明,css響應再次更新
對於那些嘗試刪除nginx緩存文件,並且它沒有工作或間歇性工作的人,請查看您的open_file_cache設置。如果啓用此選項並將其配置爲長時間緩存文件描述符,則Nginx可能仍會看到緩存文件的一個版本,即使您已從磁盤中刪除該文件。我必須將open_file_cache_valid減少到1s(我不確定這是否與完全禁用文件緩存相同)。
我也有這個問題。
我的網域使用cloudflare.com爲DNS(偉大的服務!)。啊哈!在那裏,它是:
cloudflare.com - >高速緩存 - >清除緩存(我清除一切) 這解決了我的問題!
這清除了Cloudflare的邊緣緩存。它不會在您自己的服務器上清除Nginx緩存。 – mahemoff 2017-06-28 11:24:33
作爲一個建議,我認爲是一個有效的答案。 – 2017-08-20 19:44:21
我運行一個非常簡單的bash腳本,完成這項任務需要10秒鐘,並在完成後向我發送郵件。
#!/bin/bash
sudo service nginx stop
sudo rm -rf /var/cache/nginx/*
sudo service nginx start | mail -s "Nginx Purged" [email protected]
exit 0
我們有一個非常大的nginx緩存(千兆字節),我們需要偶爾擦拭。我已經制定了一個腳本,可以立即清除緩存(就Nginx而言),然後刪除緩存目錄而不會讓磁盤I/O的主應用程序捱餓。
總結:
這裏的腳本,針對Ubuntu的LTS 16.04,與位於/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配置的更多細節將會有很大的幫助。你使用'proxy_cache'嗎? – 2011-06-04 12:13:56
不,我只是使用了默認配置,並且我搜索了字符串「cache」,但在配置文件中找不到它。 – Freewind 2011-06-04 15:16:30
默認情況下,Nginx不會緩存。 – 2011-06-04 17:12:37