Nginx做緩存服務器
Nginx配置
1.主配置/etc/nginx/nginx.conf
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.conf
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.conf
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的進程。

第一次請求資源會先從源服務下載在nginx上,再返回給客戶端。第二次請求相同資源時直接從nginx返回給客戶端。

