代理s3的nginx缓存服务器配置

来源:互联网 发布:淘宝代理费 编辑:程序博客网 时间:2024/05/12 23:49

需求:

1: 实现代理s3的nginx缓存服务器
2: 实现 / -> /index.html映射,
eg:
http://www.abc.com-> http://www.abc.com/index.html,
http://www.abc.com/abc/ -> http://www.abc.com/abc/index.html,
http://www.abc.com/a/b/ -> http://www.abc.com/a/b/index.html
3: 实现nginx代理服务器的 / 路径到s3的指定目录映射,即 / -> youprojectname.s3.amazonaws.com./release/

实现:

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),若是uri访uri/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 .

原创粉丝点击