Nginx服務器如何處理相關的圖片
Nginx服務器在進行圖片處理的時候有不少的問題需要我們去詳細的學習。說到訪問權限控制,很多看了Nginx相關文章的朋友都會自然聯想到X-Accel-Redirect這個頭。這個頭有個缺陷,就是所有的訪問都會先經過一個fastcgi來判斷權限。
在下載系統上,用這個方法是非常合適的,但是在訪問量非常大的圖片服務器,單單用這個方法會使大量無需權限判定的圖片也經過一個fastcgi處理,多此一舉并且無端耗費大量的資源。雖然X-Accel-Redirect是一個新的方案,但是并不代表它能很好的解決所有問題,同時也不妨礙繼續思考解決問題的其它辦法。圖片服務器加上權限判斷主要用于博客和相冊這樣的系統。
在網上稍微觀察,可以看到目前大部分的博客相冊等系統并沒有針對圖片本身加入權限判斷,而僅僅是將網頁部分的權限控制住。這樣的話很多網友將其圖片加鎖,實際上此圖片在外部仍有辦法打開。我估計此原因有其一是實現起來有性能問題,其二是諸多網站將圖片放置到CDN上,而CDN并沒有對此有相應的方案的緣故。走了一圈發現只有QQ空間在用帶權限的圖片,而它看上去是直接用fastcgi實現的,性能居然還不錯,佩服一下。下文單純解決性能問題,其思路是在訪問圖片附近放置一個控制文件,通過Nginx判斷決定是否要到fastcgi認證,其原理類似apache的.htaccess。有用到CDN的,因為CDN多數是squid,要加入清理squid緩存的機制。
1、針對單一圖片的控制
如果圖片按照哈希結構放置,那么用戶的圖片加鎖后要把每一張圖片都加上控制文件,如果該用戶圖片較多,寫入時稍嫌多些。比如有一張圖:
- /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服務器在處理圖片是的相關問題。
【編輯推薦】