Nginx作緩存服務器css
1.主配置/etc/nginx/nginx.confhtml
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; include /etc/nginx/conf.d/*.conf; #include proxy.conf; #include upstrem.conf; #include blog.biglittleant.cn.conf; server { listen 80; server_name localhost; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
2.proxy配置/etc/nginx/conf.d/proxy.confnginx
proxy_temp_path /data/cdn_cache/proxy_temp_dir; proxy_cache_path /data/cdn_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g; 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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;
參數解釋:後端
proxy_cache_path: 緩存文件路徑 levels: 設置緩存文件目錄層次;levels=1:2 表示兩級目錄 keys_zone: 設置緩存名字和共享內存大小 inactive: 在指定時間內沒人訪問則被刪除 max_size: 最大緩存空間,若是緩存空間滿,默認覆蓋掉緩存時間最長的資源。每個proxy_cache_path對應一個ngx_http_file_cache_t結構體。 proxy_cache tmp-test: 使用名爲tmp-test的緩存配置 proxy_cache_key $uri :定義緩存惟一key,經過惟一key來進行hash存取 proxy_cache_methods :設置緩存哪些HTTP方法 proxy_cache_min_uses :指定請求至少被髮送了多少次以上時才緩存,能夠防止低頻請求被緩存 proxy_cache_bypass :若是指定的任何一個變量值不爲空,或者不等於0,nginx就不會查找緩存,直接進行代理轉發 proxy_cache_lock/proxy_cache_lock_timeout: 當多個客戶端同時請求同一分內容時,若是開啓proxy_cache_lock(默認off)則只有一個請求被髮送至後端;其餘請求將等待該內容返回;當第一個請求返回時,其餘請求將從緩存中獲取內容返回;當第一個請求超過了proxy_cache_lock_timeout超時時間(默認5s),則其餘請求將同時請求到後端來獲取響應,且響應不會被緩存;啓用proxy_cache_lock能夠應對雪崩效應。
3.upstream配置/etc/nginx/conf.d/upstream.conf緩存
upstream blog.test.cn { server 47.75.246.12:80 weight=10 max_fails=3; }
4.blog.test.cn配置/etc/nginx/conf.d/blog.test.cn.confbash
server { listen 80; server_name blog.test.cn; access_log logs/blog.biglittleant.cn-access.log main; location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf|txt)$ { #Proxy proxy_redirect off; proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://blog.test.cn; #Use Proxy Cache proxy_cache cache_one; proxy_cache_key "$host$request_uri"; add_header Cache "$upstream_cache_status"; proxy_cache_valid 200 304 301 302 8h; proxy_cache_valid 404 1m; proxy_cache_valid any 2d; } location / { proxy_redirect off; proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://blog.test.cn; client_max_body_size 40m; client_body_buffer_size 128k; proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; } }
新建存儲目錄:服務器
mkdir -p /data/cdn_cache
注意:啓動nginx會多出兩個cache的進程。app
第一次請求資源會先從源服務下載在nginx上,再返回給客戶端。第二次請求相同資源時直接從nginx返回給客戶端。3d