代理s3的nginx快取伺服器配置
需求:
實現:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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 /tmp/access.log;
error_log /tmp/error.log debug;
proxy_cache_lock on;
proxy_cache_lock_timeout 60s;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=s3cache:200m max_size=10g;
# 設定Web快取區名稱為s3cache,記憶體快取空間大小為200MB,硬碟快取空間大小為10GB
# place used to buffer large proxied requests to the fs
proxy_temp_path /var/cache/nginx/tmp;
# 注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分割槽
sendfile on;
# set client body size to 50M
client_max_body_size 50M;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
gzip_disable "msie6" ;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/default.conf;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/proxy_cache.conf:
server {
listen 80;
listen [::]:80;
server_tokens off;
server_name youdomain.com;
error_page 403 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
# 實現 / -> /index.html對映
try_files $uri $uri/index.html =404;
location / {
set $s3_bucket 'youprojectname.s3.amazonaws.com';
# 指定s3cache 快取區將被使用(通過proxy_cache_path 設定的)
proxy_cache s3cache;
# cache successful responses for 24 hours
proxy_cache_valid 200 302 24h; #對不同的HTTP狀態碼設定不同的快取時間
# cache missing responses for 1 minutes
proxy_cache_valid 403 404 1m;
proxy_cache_key $uri;
proxy_redirect off;
# need to set the hot to be $backend here so s3 static website hosting service knows what bucket to use
# 設定主機頭和客戶端真實地址
proxy_set_header Host $s3_bucket;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Cache-Status $upstream_cache_status;
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header Set-Cookie;
proxy_ignore_headers "Set-Cookie";
proxy_intercept_errors on;
resolver 8.8.8.8;
resolver_timeout 5s;
proxy_pass http://youprojectname.s3.amazonaws.com/relase/;
}
}
相關指令說明
try_files:
語法:try_files file … uri 或 try_files file … = code
預設值:無
作用域:server location
其作用是按順序檢查檔案是否存在,返回第一個找到的檔案(路徑/uri)或資料夾(結尾加斜線表示為資料夾),如果所有的檔案或資料夾都找不到,會進行一個內部重定向到最後一個引數。
需要注意的是,只有最後一個引數可以引起一個內部重定向,之前的引數只設置內部URI的指向。最後一個引數是回退URI且必須存在,即如果最後一個引數是檔案,那麼這個檔案必須存在,否則會出現內部500錯誤。命名的location也可以使用在最後一個引數中。與rewrite指令不同,如果回退URI不是命名的location那麼
try_files
講解下nginx規範化
所謂規範化,就是先將URI中形如“%XX”的編碼字元進行解碼,再解析URI中的相對路徑“.”和“..”部分, 另外還可能會壓縮相鄰的兩個或多個斜線成為一個斜線,
這也就是如www.xxx.com///index.html 這樣的訪問也能訪問的原因
規範前的url為 www.xxx.com///index.html 儲存在
proxy_cache快取相關指令集
(1)proxy_cache指令 語法: proxy_cache zone_name ;
該指令用於設定哪個快取區將被使用,zone_name的值為proxy_cache_path指令建立的快取區的名稱.
(2)proxy_cache_path指令, 語法 proxy_cache_path path[levels=number] keys_zone=zone_name:zone_size[inactive=time] [max_size=size];
該指令用於設定快取檔案的存放路徑.例:
proxy_cache_path /data0/proxy_cache_dir levels=1:2keys_zone=cache_one:500m inactive=1d max_size=30g ;
path 存放目錄
levels 指定該快取空間有兩層hash目錄,第一層目錄為1個字母,第二層目錄為2個字母,儲存的檔名會類似/data0/proxy_cache_dir/c/29/XXXXXX ;
keys_zone引數用來為這個快取區起名.
500m 指記憶體快取空間大小為500MB
inactive的1d指如果快取資料在1天內沒有被訪問,將被刪除
max_size的30g是指硬碟快取空間為30G
(3)proxy_cache_methods 指令 語法:proxy_cache_methods[GET HEADPOST];
該指令用於設定快取哪些HTTP方法,預設快取HTTP GET/HEAD方法,不快取HTTP POST 方法
(4)proxy_cache_min_uses指令 語法:proxy_cache_min_uses the_number
該指令用於設定快取的最小使用次數,預設值為1
(5)proxy_cache_valid指令 語法: proxy_cache_valid reply_code[reply_code…] time ;
該指令用於對不同返回狀態碼的URL設定不同的快取時間.
例:
proxy_cache_valid 200 302 10m ;
proxy_cache_valid 404 1m ;
設定200,302狀態的URL快取10分鐘,404狀態的URL快取1分鐘.
(6)proxy_cache_key指令 語法: proxy_cache_key line ;
該指令用來設定Web快取的Key值,Nginx根據Key值md5雜湊儲存快取.一般根據