當前位置:首頁 » 文件管理 » nginxsquid緩存

nginxsquid緩存

發布時間: 2022-04-02 19:02:05

❶ nginx 緩存怎麼都在tmp

nginx緩存cache的5種方案
1、傳統緩存之一(404)
這個辦法是把nginx的404錯誤定向到後端,然後用proxy_store把後端返回的頁面保存。
配置:

location / {
root /home/html/;#主目錄
expires 1d;#網頁的過期時間
error_page 404 =200 /fetch$request_uri;#404定向到/fetch目錄下
}
location /fetch/ {#404定向到這里
internal;#指明這個目錄不能在外部直接訪問
expires 1d;#網頁的過期時間
alias /html/;
proxy_store會將文件保存到這目錄下
proxy_passhttp://www.jb51.net/;#後端upstream地址,/fetch同時是一個代理
proxy_set_header Accept-Encoding '';#讓後端不要返回壓縮(gzip或deflate)的內容,保存壓縮後的內容會引發亂子。
proxy_store on;#指定nginx將代理返回的文件保存
proxy_temp_path /home/tmp;#臨時目錄,這個目錄要和/home/html在同一個硬碟分區內

}

使用的時候還有要注意是nginx要有許可權往/home/tmp和/home/html下有寫入文件的許可權,在linux下nginx一般會配
置成nobody用戶運行,這樣這兩個目錄就要chown nobody,設成nobody用戶專用,當然也可以chmod
777,不過所有有經驗的系統管理員都會建議不要隨便使用777。
2、傳統緩存之二(!-e)
原理和404跳轉基本一致,但更簡潔一些:

location / {
root /home/html/;
proxy_store on;
proxy_set_header Accept-Encoding '';
proxy_temp_path /home/tmp;
if ( !-f $request_filename )
{
proxy_passhttp://www.jb51.net/;
}
}

可以看到這個配置比404節約了不少代碼,它是用!-f來判斷請求的文件在文件系統上存不存在,不存在就proxy_pass到後端,返回同樣是用proxy_store保存。
兩種傳統緩存都有著基本一樣的優點和缺點:
缺點1:不支持帶參數的動態鏈接,比如read.php?id=1,因為nginx只保存文件名,所以這個鏈接只在文件系統下保存為
read.php,這樣用戶訪問read.php?id=2時會返回不正確的結果。同時不支持http://www.jb51.net/這種形式的首頁和
二級目錄http://www.jb51.net/download/,因為nginx非常老實,會將這樣的請求照鏈接寫入文件系統,而這個鏈接顯然是一
個目錄,所以保存失敗。這些情況都需要寫rewrite才能正確保存。
缺點2:nginx內部沒有緩存過期和清理的任何機制,這些緩存的文件會永久性地保存在機器上,如果要緩存的東西非常多,那就會撐暴整個硬碟空間。為此可以使用一個shell腳本定期清理,同時可以撰寫php等動態程序來做實時更新。
缺點3:只能緩存200狀態碼,因此後端返回301/302/404等狀態碼都不會緩存,假如恰好有一個訪問量很大的偽靜態鏈接被刪除,那就會不停穿透導致後端承載不小壓力。
缺點4:nginx不會自動選擇內存或硬碟作為存儲介質,一切由配置決定,當然在當前的操作系統里都會有操作系統級的文件緩存機制,所以存在硬碟上也不需要過分擔心大並發讀取造成的io性能問題。
nginx傳統緩存的缺點也是它和squid等緩存軟體的不同之特色,所以也可看作其優點。在生產應用中它常常用作和squid的搭檔,squid對
於帶?的鏈接往往無法阻擋,而nginx能將其訪問攔住,例如:http://jb51.net/?和http://jb51.net/在squid上會
被當做兩個鏈接,所以會造成兩次穿透;而nginx只會保存一次,無論鏈接變成http://jb51.net/?1還是http://jb51.net
/?123,均不能透過nginx緩存,從而有效地保護了後端主機。
nginx會非常老實地將鏈接形式保存到文件系統中,這樣對於一個鏈接,可以很方便地查閱它在緩存機器上的緩存狀態和內容,也可以很方便地和別的文件管理器如rsync等配合使用,它完完全全就是一個文件系統結構。
這兩種傳統緩存都可以在linux下將文件保存到/dev/shm里,一般我也是這么做的,這樣可以利用系統內存來做緩存,利用內存的話,清理過期內
容速度就會快得多。使用/dev/shm/時除了要把tmp目錄也指向到/dev/shm這個分區外,如果有大量小文件和目錄,還要修改一下這個內存分區
的inode數量和最大容量:


mount -o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm

上面的命令在一台有3G內存的機器上使用,因為/dev/shm默認最大內存是系統內存的一半就是1500M,這條命令將其調大成2500M,
同時shm系統inode數量默認情況下可能是不夠用的,但有趣的是它可以隨意調節,這里調節為480000保守了點,但也基本夠用了。
3、基於memcached的緩存
nginx對memcached有所支持,但是功能並不是特別之強,性能上還是非常之優秀。


location /mem/ {
if ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )
{
set $memcached_key "$1";
memcached_pass 192.168.1.2:11211;
}
expires 70;
}

這個配置會將http://jb51.net/mem/abc指明到memcached的abc這個key去取數據。
nginx目前沒有寫入memcached的任何機制,所以要往memcached里寫入數據得用後台的動態語言完成,可以利用404定向到後端去寫入數據。
4、基於第三方插件ncache
ncache是新浪兄弟開發的一個不錯的項目,它利用nginx和memcached實現了一部分類似squid緩存的功能,我並沒有使用這個插件的經驗,可以參考:
http://code.google.com/p/ncache/
5、nginx新開發的proxy_cache功能
從nginx-0.7.44版開始,nginx支持了類似squid較為正規的cache功能,目前還處於開發階段,支持相當有限,這個緩存是把鏈接用md5編碼hash後保存,所以它可以支持任意鏈接,同時也支持404/301/302這樣的非200狀態。
配置:
首先配置一個cache空間:

復制代碼 代碼如下:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=NAME:10m inactive=5m max_size=2m clean_time=1m;

注意這個配置是在server標簽外,levels指定該緩存空間有兩層hash目錄,第一層目錄是1個字母,第二層為2個字母,保存的文件名就會類
似/path/to/cache/c/29/;keys_zone為這個空間起個名
字,10m指空間大小為10MB;inactive的5m指緩存默認時長5分鍾;max_size的2m是指單個文件超過2m的就不緩
存;clean_time指定一分鍾清理一次緩存。

location / {
proxy_passhttp://www.jb51.net/;
proxy_cache NAME;#使用NAME這個keys_zone
proxy_cache_valid 200 302 1h;#200和302狀態碼保存1小時
proxy_cache_valid 301 1d;#301狀態碼保存一天
proxy_cache_valid any 1m;#其它的保存一分鍾
}

ps:支持cache的0.7.44到0.7.51這幾個版本的穩定性均有問題,訪問有些鏈接會出現錯誤,所以這幾個版本最好不要在生產環境中
使用。nginx-0.7下目前所知較為穩定的版本是0.7.39。穩定版0.6.36版也是近期更新,如果在配置里沒有使用到0.7的一些新標簽新功
能,也可以使用0.6.36版。

Nginx緩存的內存佔用問題的一般解決方法
1、前些日子某服務被刷,每分鍾達到上幾百萬請求;當時採用了nginx cache來解決的;但是因為某服務不能緩存太久,當時設置了5s,那麼帶來的問題就是產生大量小文件,而且很快就刪除了。

2、通過

free -m

會發現used是27G;但是通過top查看進程占的內存並沒有那麼多

那內存去哪了?

3、通過查閱資料會發現(cat /proc/meminfo)
Slab: 22464312 kB
SReclaimable: 16474128 kB (這些是內核保持的但是可以釋放的inode和dentry的緩存)
SUnreclaim: 5990184 kB

4、這些內存為什麼會不自動清理呢?
某機房機器系統版本:Linux 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(正常,沒出現內存快到100%的情況)
某機房機器系統版本:Linux 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux (不釋放)

5、通過設置如下參數來設置內存閥值

sysctl -w vm.extra_free_kbytes=6436787
sysctl -w vm.vfs_cache_pressure=10000

❷ nginx配置前端,需要幾台什麼樣的伺服器。什麼樣的系統,什麼樣的配置

兩種前端架構:
lvs -> nginx前端代理 -> squid緩存
lvs -> squid前端緩存 -> nginx中層代理

squid在前面的優點:
Squid作純代理比較穩當
前端少一級代理,響應速度會快,出問題的可能性要小
功能有限,不會常被調整
容易為人接受,只是為了擴充功能而增加中層代理
一般的配置簡便,比如增加一個二級域名,只需配置一個指向。
增加的nginx可擴展功能,增加對應用服務的負載均衡等。

squid在前面的缺點:
squid支持的負載均衡配置復雜
容災問題
更新緩存要遍歷所有機器
squid只支持單cpu,所以浪費cpu

nginx在前面的優點:
分流、負載均衡功能強大,可以細致定義
可精細定製access_log
nginx的錯誤日誌更詳細
可讓squid只緩存無壓縮版本,由nginx壓縮,這樣可優化squid緩存容量
nginx可分擔部分無實時性要求的緩存

nginx在前面的優點:
nginx目前還有部分bug。
功能強,所以可能經常被調整
nginx代理用的短鏈接方式
單機上安裝nginx+squid的cpu消耗比純squid和純nginx之和要大一倍,但也不算高
容易遭到質疑,不易被接受。

❸ 前端nginx作為緩沖,將所有的訪問都傳給後端,這樣可以嗎

樓主的情況 我可以解答,我們原來用nginx做代理,代理後端的apache,結果評論的ip全是一樣的,也就是都是代理的ip,呵呵,你想要的就是這樣的結果吧
nginx 配置下面就會得到客戶的真實ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
,你只要配置的時候不加這個就可以了

❹ nginx靜態代理怎麼用

body{ line-height:200%; } 動靜態網頁分離,就是讓動態PHP等程序網頁去訪問PHP Web伺服器,讓緩存頁、圖片、javaScript、CSS、Flash去訪問Squid等緩存伺服器。 在配置Nginx負載均衡與反向代理之前,我們首先來看一看NetScaler等硬體四/七層負載均衡交換機是如何實現負載均衡的如圖6-6所示。 NetScarder的七層負載均衡是基於TCP的,可以用於Web Server、MySQL資料庫、右鍵伺服器等大多數基於TCP伺服器的負載均衡。Nginx的七層負載僅支持HTTP、郵件協議,能夠實現Web Sserver、右鍵伺服器的負載均衡。在Web伺服器集群應用中,可以通過Nginx負載均衡,來實現並代替NetScaler七層負載均衡的部分功能。對於以上的Netscaler負載均衡架構我們可以用以下的Nginx負載均衡架構來代替其中的Web伺服器部分,如圖6-7所示。

❺ nginx緩存和squid哪個好

squid沒用過,不好說,nginx現在好多公司都在用,我們現在也在用

❻ nginx和squid的反向代理的區別

SQUID是功能最全面的,但是架構太老,性能不咋的Varnish速度一般,但是內存緩存也限制了其容量,緩存頁面和圖片一般是挺好的Nginx本來是反向代理/web伺服器,用了插件可以做做這個副業,不過也越來越專業了ApacheTrafficServer是另外一個cache,也有不少用戶使用。

❼ nginx squie如何做https

你使用443埠看看能不能訪問如果能訪問就在設置一次全站強制跳轉到https裡面估計你沒有設置強制跳轉

❽ nginx緩存性能怎麼樣

Nginx緩存對於不少人來說都不是很明朗的一個知識。那麼好我們就借介紹有關優點和缺點的機會把大家帶進Nginx緩存的世界。希望大家在文中能找到自己相關的使用方法。
兩種Nginx緩存都有著基本一樣的優點和缺點:
缺點1:不支持帶參數的動態鏈接,比如read.php?id=1,因為Nginx緩存只保存文件名,所以這個鏈接只在文件系統下保存為read.php,這樣用戶訪問read.php?id=2時會返回不正確的結果。同時不支持http://www.sudone.com/這種形式的首頁和二級目錄http://www.sudone.com/download/,因為Nginx緩存非常老實,會將這樣的請求照鏈接寫入文件系統,而這個鏈接顯然是一個目錄,所以保存失敗。這些情況都需要寫rewrite才能正確保存。
缺點2:Nginx緩存內部沒有緩存過期和清理的任何機制,這些緩存的文件會永久性地保存在機器上,如果要緩存的東西非常多,那就會撐暴整個硬碟空間。為此可以使用一個shell腳本定期清理,同時可以撰寫php等動態程序來做實時更新。
缺點3:只能緩存200狀態碼,因此後端返回301/302/404等狀態碼都不會緩存,假如恰好有一個訪問量很大的偽靜態鏈接被刪除,那就會不停穿透導致後端承載不小壓力。
缺點4:Nginx不會自動選擇內存或硬碟作為存儲介質,一切由配置決定,當然在當前的操作系統里都會有操作系統級的文件緩存機制,所以存在硬碟上也不需要過分擔心大並發讀取造成的io性能問題。
Nginx傳統緩存的缺點也是它和squid等緩存軟體的不同之特色,所以也可看作其優點。在生產應用中它常常用作和squid的搭檔,squid對於帶?的鏈接往往無法阻擋,而Nginx能將其訪問攔住,例如:http://sudone.com/?和http://sudone.com/在squid上會被當做兩個鏈接,所以會造成兩次穿透;而Nginx只會保存一次,無論鏈接變成http://sudone.com/?1還是http://sudone.com/?123,均不能透過Nginx緩存,從而有效地保護了後端主機。
Nginx緩存會非常老實地將鏈接形式保存到文件系統中,這樣對於一個鏈接,可以很方便地查閱它在緩存機器上的緩存狀態和內容,也可以很方便地和別的文件管理器如rsync等配合使用,它完完全全就是一個文件系統結構。
這兩種傳統緩存都可以在linux下將文件保存到/dev/shm里,一般我也是這么做的,這樣可以利用系統內存來做緩存,利用內存的話,清理過期內容速度就會快得多。使用/dev/shm/時除了要把tmp目錄也指向到/dev/shm這個分區外,如果有大量小文件和目錄,還要修改一下這個內存分區的inode數量和最大容量:
mount -o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm
上面的命令在一台有3G內存的機器上使用,因為/dev/shm默認最大內存是系統內存的一半就是1500M,這條命令將其調大成2500M,同時shm系統inode數量默認情況下可能是不夠用的,但有趣的是它可以隨意調節,這里調節為480000保守了點,但也基本夠用了。

❾ varnish / squid / nginx cache 有什麼不同

squid是緩存伺服器科班出生
varnish是覺得squid性能不行,純內存緩存伺服器方案
nginx cache是屬於不務正業,得益於nginx強大的性能
SQUID 是功能最全面的,但是架構太老,性能不咋的

Varnish 是內存緩存,速度一流,但是內存緩存也限制了其容量,緩存頁面和圖片一般是挺好的
Nginx 本來是反向代理/web伺服器,用了插件可以做做這個副業,但是本身不支持特性挺多
ATS 目前是一個不錯的選擇
1. Squid功能全而大,適合於各種靜態的文件緩存,國內的top2CDN廠商是基於拿squid做的商業改造,但受限於僅支持單進程(雖然squid3.2也開始支持SMP了:htt p: / /w iki.squid-cach e.o rg/Features/SmpScale),因此一般會在前端掛一個HAProxy或nginx做負載均衡跑多個實例。

2.Varnish由於是內存cache,所以對小文件如css,js,小圖片啥的支持很棒,sina的就是用的varnish,後端的持久化緩存可能採用的是squid或ats
3.nginx的代理功能只是它的一個模塊功能,功能相對前兩者目前還完全無法替代,但未來充滿期待。

熱點內容
excel腳本語言 發布:2024-11-01 03:13:27 瀏覽:922
雲伺服器漏洞軟體 發布:2024-11-01 03:12:18 瀏覽:790
c語言放音樂 發布:2024-11-01 03:12:16 瀏覽:55
backup是什麼文件夾 發布:2024-11-01 03:09:20 瀏覽:917
整理解壓 發布:2024-11-01 03:07:50 瀏覽:79
查看存儲過程是否編譯通過 發布:2024-11-01 03:06:29 瀏覽:991
sql循環insert 發布:2024-11-01 03:06:25 瀏覽:575
m9加密 發布:2024-11-01 03:06:24 瀏覽:269
手機郵件連接不上伺服器怎麼回事 發布:2024-11-01 03:04:11 瀏覽:780
matlab如何將多個m文件編譯 發布:2024-11-01 02:48:23 瀏覽:255