1.web資源防盜鏈
盜鏈概念
盜鏈是指在自己的頁面上展示一些並不在自己服務器的內容
防盜鏈工作原理
通過referer或者簽名,網站可以檢測目標網頁訪問的來源頁,一旦檢測到來源頁不是本站即進行阻止或者返回指定頁面
解決方案1
Referer
nginx 模塊ngx_http_referer_module用於阻擋來源非法的域名請求
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
valid_referers none blocked bobo.com
if ($invalid_referer)
{
return 403
}
}
缺點:可以進行偽裝referer
解決方案2
使用第三方HttpAccessKeyModule模塊實現NGINX防盜鏈
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature "bobo$remote_addr";
}
缺點:要在每個資源后面加個簽名
2.減少http請求次數
為什么要減少http請求次數
HTTPl連接產生的開銷
域名解析->TCP連接->發送請求->等待->下載資源->解析時間
解決方案1
圖片地圖
使用標簽
解決方案2
CSS精靈
通過指定css的backgroud-image和backgroud-position來顯示元素
解決方案3
合並腳本和樣式表
使用外部js和css文件引用方式
解決方案4
圖片使用base64編碼減少頁面的請求數
使用外部js和css文件引用方式
3.瀏覽器緩存和壓縮優化技術
HTTP緩存機制
1.200 from cache: 直接從本地緩存中獲取響應,最快速,最省流量,因為根本沒有向服務器發送請求
2.304 not modify:協商緩存,瀏覽器在本地沒有命中情況下請求頭發送一定的校驗數據到服務端,如果服務端數據沒有改變瀏覽器從本地緩存響應,返回304,快速,發送的數據小,只返回一些基本的響應頭信息,數據量很小,不發生實際響應體
3.200 OK:以上兩種緩存全都失敗,服務器返回完整響應,沒有用到緩存,相對最慢。
NGINX配置
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
expires 30d; //緩存30天
}
前端代碼和資源的壓縮
js代碼壓縮常用工具:UglifyJs, YUI Compressor, Closure Compiler
css代碼壓縮常用工具:YUI Compressor, CSS Compressor
html代碼壓縮常用工具:htmlcompressor
圖片壓縮
常用工具:tinypng, JpegMini, ImageOptim
gzip壓縮
location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$
{
gzip on|off //是否開啟
gzip_buffers 32 4K | 16 8K //緩沖
gzip_comp_level [1-9] 推薦6 壓縮級別(級別越高,壓的越小,越浪費CPU資源)
gzip_disable //什么樣的uri不進行gzip壓縮
gzip_min_length 200 //開始壓縮的最小長度
gzip_http_version //開始壓縮的http協議版本
gzip_types text/plain application/xml //對哪些類型的文件用
gzip_proxied//設置請求者代理服務器,該如何緩存內容
gzip_vary on|off //是否傳輸gzip壓縮標志
}
4.使用CDN加速
什么是CDN,全稱:Content Delivery Network 內容分發網絡
使用CDN的優勢
5.建立獨立的圖片服務器
獨立的必要性:
1.分擔web服務器的I/O負載,將耗費資源的圖片服務分離出來,提高服務器的性能和穩定性,
2.能夠專門對圖片服務器進行優化,為圖片服務設置有針對性的緩存方案,減少帶寬成本,提高訪問速度,
3.提高網站可擴展性,通過增加圖片服務器提高圖片的吞吐能力
采用獨立域名:
1.同一域名下瀏覽器的並發連接數有限制,突破瀏覽器的連接數限制(同一域名下瀏覽器並發連接數2-6個)
2.由於cookie的原因,對緩存不利,大部分web cache 都只能緩存不帶cookie的請求,導致每次的圖片請求都不能命中cache
3.如何進行圖片上傳和圖片同步,NFS共享方式,利用FTP同步
6.動態語言層的並發處理
進程,線程,協程,同步阻塞,異步非阻塞,
php並發編程實踐:swoole 消息隊列 接口的並發請求(curl_multi_init)
7.數據庫緩存層優化
1 為什么的要使用數據庫緩存
極大地j解決數據庫服務器的壓力
提高應用數據的響應速度
常見的緩存形式:內存緩存,文件緩存
是為了讓客戶端很少,甚至不訪問數據庫服務器進行數據的查詢,高並發下,能最大程度降低對數據庫服務器的壓力
2 使用redis,memcache緩存查詢數據
8.MySQL數據優化
9.Web服務器的負載均衡,請求分發