用Nginx搭建CDN服務器方法-開啓Nginx緩存與鏡像,自建圖片服務器

利用Nginx的proxy_cache搭建緩存服務器一:編譯ngx_cache_purge
一、Nginx的Proxy_cache是根據Key值md5哈希存儲緩存,支持任意的Key,例如你能夠根據」域名、URI、參數」組合成key,也支持非200狀態碼,如404/302等。
二、要利用Nginx的Proxy_cache,你須要在Nginx編譯進ngx_cache_purge 模塊,執行:nginx -V,查看有沒有ngx_cache_purge 字樣,沒有的話須要本身手動編譯。
Nginx搭建CDN手動編譯css


三、這裏以Oneinstack編譯ngx_cache_purge 模塊做爲操做演示,若是你用的是其它的LNMP包能夠參考,基本過程是差很少的。命令以下:html

cd /root/oneinstack/src #進入安裝包目錄
nginx -V
tar xzf nginx-1.10.3.tar.gz #根據上面查看到的nginx版本選擇解壓包

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_cache_purge-2.3.tar.gz
cd /root/oneinstack/src/nginx-1.10.3

# 下面的./configure 後加的參數,你能夠直接複製剛剛用nginx -V獲得的參數,而後在最後加上–add-module=../ngx_cache_purge-2.3便可,參考:
./configure –prefix=/usr/local/nginx –user=www –group=www –with-http_stub_status_module –with-http_v2_module –with-http_ssl_module –with-http_gzip_static_module –with-http_realip_module –with-http_flv_module –with-http_mp4_module –with-openssl=../openssl-1.0.2k –with-pcre=../pcre-8.39 –with-pcre-jit –with-ld-opt=-ljemalloc –add-module=../ngx_cache_purge-2.3

make

mv /usr/local/nginx/sbin/nginx{,$(date +%m%d)}
cp objs/nginx /usr/local/nginx/sbin #oneinstack,其它的能夠不用這個操做

nginx -t
service nginx restart

四、安裝完成後,再次nginx -V你就能夠看到Nginx已經成功編譯進了ngx_cache_purge 了。nginx

2、利用Nginx的proxy_cache搭建緩存服務器二:修改Nginx配置文件
一、先找到你的Nginx配置文件:nginx.conf(路徑通常是在/usr/local/nginx/conf/nginx.conf),在配置文件Http中加入如下代碼:(注意修改路徑爲你本身的路徑)緩存

proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_cache_path /data/wwwroot/pic.freehao123.com levels=1:2 keys_zone=cache_one:200m inactive=30d max_size=5g;
proxy_temp_path /data/wwwroot/pic.freehao123.com/temp;

二、操做以下圖:服務器

三、而後在你的虛擬主機的nginx.conf(路徑通常是/usr/local/nginx/conf/vhost/pic.freehao123.com.conf),在server listen 80 和 listen 443 ssl http2 都加入下面命令:負載均衡

location /{
proxy_pass https://www.freehao123.com;
proxy_redirect off;
proxy_set_header Host www.freehao123.com;
proxy_cache cache_one;
proxy_cache_valid 200 302 304 365d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
add_header Images-Cache 「$upstream_cache_status from $host」;
add_header Pragma public;
add_header Cache-Control 「public, must-revalidate, proxy-revalidate」;
access_log off; log_not_found off; expires max;
}

四、將配置文件保存從新上傳,而後執行:ide

nginx -t
service nginx restart

五、先執行檢查Nginx配置是否正確,確認沒有問題的就是重啓Nginx了。tornado

六、若是你想緩存gravatar頭像,那麼代碼就是:網站

location /avatar{
proxy_pass http://cn.gravatar.com;
proxy_redirect off;
proxy_set_header Host cn.gravatar.com;
proxy_cache cache_one;
proxy_cache_valid 200 302 304 365d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
add_header Images-Cache 「$upstream_cache_status from $host」;
add_header Pragma public;
add_header Cache-Control 「public, must-revalidate, proxy-revalidate」;
access_log off; log_not_found off; expires max;
}

七、如今打開你的二級域名:pic.freehao123.com,你就能夠看到已經正確緩存了圖片了。搜索引擎

八、這裏再給出另外一個Nginx緩存代碼,實現效果和上面是同樣的。

#先在Nginx配置中寫入如下命令:
proxy_temp_file_write_size 128k;
proxy_temp_path /data/wwwroot/pic.ucblog.net/temp;
proxy_cache_path /data/wwwroot/pic.ucblog.net levels=1:2 keys_zone=cache_one:500m inactive=7d max_size=5g;

#再在虛擬主機的Nginx配置中寫入如下命令:
先在server listen 80 和listen 443代碼前面加入:
upstream gravatar {
server secure.gravatar.com:443;
}
#再在server listen 80 和listen 443 裏面加入:
location / {
proxy_pass_header Server;
proxy_set_header Host cn.gravatar.com;
proxy_set_header Accept-Encoding 」;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass https://gravatar;
proxy_cache cache_one;
proxy_cache_valid 200 304 365d;
proxy_cache_key $host$uri$is_args$args;
expires max;
}

九、在VPS主機上,你能夠看到proxy_cache生成的哈希文件,就表示緩存已經成功了。

3、利用Nginx的proxy_store搭建鏡像服務器:修改Nginx配置方法
一、Nginx的proxy_store做用是直接把靜態文件在本地硬盤建立並讀取,相似於七牛或者又拍這樣的鏡像CDN功能,首次訪問會自動獲取源站的靜態圖片等文件,以後的訪問就是直接從CDN服務器讀取,加快了速度。
二、直接修改Nginx的虛擬主機配置文件(這裏以img.freehao123.com.conf爲演示),加入如下代碼:

location / {
expires 3d;
proxy_set_header Accept-Encoding 」;
root /data/wwwroot/img.freehao123.com;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /data/wwwroot/img.freehao123.com/temp;
if ( !-e $request_filename) {
proxy_pass https://www.freehao123.com;
}
}

三、再次保存配置上傳,而後重啓Nginx。你能夠看到img.freehao123.com請求的圖片等靜態文件已經成功從源站中得到到了。

四、在VPS主機上的存目錄中也能夠看到proxy_store已經完整地將圖片等靜態文件的目錄都保存下來了,至關於一個網站的鏡像存儲CDN了。

五、這裏還有一個使用,效果和上面是同樣的,記得替換好路徑,代碼以下:

upstream http_tornado {
server www.freehao123.com:443;
}

server {
# 省略其餘配置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {
root /opt/data/product/blog/cache;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /opt/data/product/blog/cache;
if ( !-e $request_filename) {
proxy_pass http://http_tornado;
}
}
}

4、Nginx的proxy_store和proxy_cache有什麼區別?

一、鏡像與緩存的區別。從上面的介紹咱們也能夠看出來,proxy_store至關於鏡像一個網站了,第二次訪問圖片等靜態文件是直接讀取CDN服務器上的,大大減輕了源站的負擔。proxy_cache至關於緩存,即把請求生成Key,第二次訪問就能夠加快速度了。


二、proxy_store適合靜態,proxy_cache適合動態。proxy_store是將圖片完整保存在CDN服務器上,因此它更適合於圖片CDN加速,而proxy_cache是緩存生成Key,更加適合動態網站加速,可用於負載均衡,減輕服務器負擔。

5、搭建鏡像CDN服務器後要作的事情?
一、第一,由於搭建鏡像CDN服務器是完整地複製了源站的文件和URL,因此爲了不被搜索引擎誤認爲抄襲重複站,咱們能夠給CDN站加上Robots.txt,阻止搜索引擎收錄。命令以下(容許收錄圖片,其它不容許爬取):

User-agent: Baiduspider
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: 360Spider
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: Baiduspider-image
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: 360Spider-Image
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: Sosospider
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: sogou spider
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: YodaoBot
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: Googlebot
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: Bingbot
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: Slurp
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: MSNBot
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: googlebot-image
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: googlebot-mobile
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: yahoo-blogs/v3.9
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: psbot
Allow: /wp-content/uploads/*.jpg$
Allow: /wp-content/uploads/*.png$
Allow: /wp-content/uploads/*.gif$
Disallow: /

User-agent: *
Disallow: /

二、第二,作好Nginx防盜鏈。若是你的CDN服務器流量不怎麼夠的話,建議仍是作好防盜鏈措施,同時還能夠幫你減輕服務器負擔。在你的虛擬主機配置文件中加入如下代碼:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked freehao123.com *.freehao123.com *.google.cn *.google.com *.google.com.hk image.baidu.com *.baidu.com;
if ($invalid_referer) {
rewrite ^/ https://www.freehao123.com;
#return 403;
}
}

三、第三,設置好Nginx默認圖片。這個主要是針對緩存Gravatar頭像的,當源站服務器不存在某一個圖片或者文件時,咱們能夠給Nginx設置一個默認的圖片或者連接,這樣緩存看起來就完美了。

location /avatar {

try_files $uri /avatar/set-avatar.png;

}

#或者使用:
location /{

try_files $uri /set-avatar.png;

}

四、效果見下圖:

文章出自:freehao123.com

相關文章
相關標籤/搜索