1. 程式人生 > >代理s3的nginx快取伺服器配置

代理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那麼argsargs,則必須明確宣告。

try_files uriuri/index.html =404; 首先嚐試訪問uri(eg:http://www.abc.com/abc//abc/uri),若是uriuri/index.html(即,若/abc/ 找不到則訪問/abc/index.html),uriuri/index.html都找不到的時候返回404。

講解下nginx規範化

所謂規範化,就是先將URI中形如“%XX”的編碼字元進行解碼,再解析URI中的相對路徑“.”和“..”部分, 另外還可能會壓縮相鄰的兩個或多個斜線成為一個斜線,
這也就是如www.xxx.com///index.html 這樣的訪問也能訪問的原因
規範前的url為 www.xxx.com///index.html 儲存在requesturiurlwww.xxx.com/index.htmluri中 nginx會壓縮相鄰的兩個或多個斜線成為一個斜線

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雜湊儲存快取.一般根據host(),request_uri(請求的路徑)等變數組合成proxy_cache_key .