Nginx服務(wù)器如何處理相關(guān)的圖片
Nginx服務(wù)器在進行圖片處理的時候有不少的問題需要我們?nèi)ピ敿毜膶W(xué)習(xí)。說到訪問權(quán)限控制,很多看了Nginx相關(guān)文章的朋友都會自然聯(lián)想到X-Accel-Redirect這個頭。這個頭有個缺陷,就是所有的訪問都會先經(jīng)過一個fastcgi來判斷權(quán)限。
在下載系統(tǒng)上,用這個方法是非常合適的,但是在訪問量非常大的圖片服務(wù)器,單單用這個方法會使大量無需權(quán)限判定的圖片也經(jīng)過一個fastcgi處理,多此一舉并且無端耗費大量的資源。雖然X-Accel-Redirect是一個新的方案,但是并不代表它能很好的解決所有問題,同時也不妨礙繼續(xù)思考解決問題的其它辦法。圖片服務(wù)器加上權(quán)限判斷主要用于博客和相冊這樣的系統(tǒng)。
在網(wǎng)上稍微觀察,可以看到目前大部分的博客相冊等系統(tǒng)并沒有針對圖片本身加入權(quán)限判斷,而僅僅是將網(wǎng)頁部分的權(quán)限控制住。這樣的話很多網(wǎng)友將其圖片加鎖,實際上此圖片在外部仍有辦法打開。我估計此原因有其一是實現(xiàn)起來有性能問題,其二是諸多網(wǎng)站將圖片放置到CDN上,而CDN并沒有對此有相應(yīng)的方案的緣故。走了一圈發(fā)現(xiàn)只有QQ空間在用帶權(quán)限的圖片,而它看上去是直接用fastcgi實現(xiàn)的,性能居然還不錯,佩服一下。下文單純解決性能問題,其思路是在訪問圖片附近放置一個控制文件,通過Nginx判斷決定是否要到fastcgi認證,其原理類似apache的.htaccess。有用到CDN的,因為CDN多數(shù)是squid,要加入清理squid緩存的機制。
1、針對單一圖片的控制
如果圖片按照哈希結(jié)構(gòu)放置,那么用戶的圖片加鎖后要把每一張圖片都加上控制文件,如果該用戶圖片較多,寫入時稍嫌多些。比如有一張圖:
- /data/image/a/z/asdfqerqwegasd.jpg
寫上一個空文件:
- /data/image/a/z/asdfqerqwegasd.jpg.lock
然后在Nginx配置判斷:
- location / {
- root /data/image/;
- if ( -f "${request_filename}.lock" )
- {
- #rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
- return 403;#test
- }
- }
以上就是對Nginx服務(wù)器在處理圖片是的相關(guān)問題。
【編輯推薦】