/ 中存储网

Nginx反向代理配置动静态请求分离和proxy_cache缓存的清除

2013-10-29 16:50:01 来源:IT技术网

一,nginx反向代理配置

 #tomcat

upstream tomcat_server{

server 127.0.0.1:8080;

}

erver{

listen

80;

server_name www.wolfdream.com;

location

/ {

proxy_redirect

off;

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://tomcat_server;

}

显然就是用户访问www.wolfdream.com(需要设置本地localhost,将www.wolfdream.com指向nginx所在IP)的时候(或将www.wolfdream.com直接写在nginx所在的IP地址),将请求转到到后台的tomcat服务器,即127.0.0.1:8080,并将请求到的数据转发给client

二,动静态请求相分离

神马意思?图片,JS,HTML等静态的东西去访问一台专门的服务器,而动态的请求去访问另一台服务器。就这么简单,上例子:

server {

listen 192.168.154.128:80;

server_name image.wolfdream.com;

index index.html; #proxy_pass http://tomcat_server; #charset koi8-r; #access_log logs/host.access.log main;

location

/ {

root html;

#index index.html index.htm;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~

.*.(gif|jpg|jpeg|png|bmp|swf)$

{

valid_referers none blocked

192.168.154.128 192.168.154.1;

if ($invalid_referer)

{

rewrite ^ /403.jpg break;

} if (!-f $request_filename) {

rewrite ^ /404.jpg last;

}

expires 30d

;

}

#error_page 404 /404.html; # redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /404.jpg {

root html;

}

}

tomcat

upstream tomcat_server{

server

127.0.0.1:8080;

}

server{

listen

192.168.154.128;

server_name www.wolfdream.com;

location

/ {

proxy_redirect

off;

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://tomcat_server;

}

}

上面这种方式是通过设定不同的域名,可不可以在同一个域名中,通过判断后缀来将动态与静态请求相分离呢?

#tomcat

upstream tomcat_server{

server 127.0.0.1:8080;

}

server{

listen

192.168.154.128;

server_name www.wolf.com;

location ~

.*.(gif|jpg|jpeg|png|bmp|swf)$

{

root html

;

}

location ~

.*.(jsp|do)$ {

proxy_redirect

off;

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://tomcat_server;

}

OK!同一个域名,根据后缀不同,请求不同的服务,实现动态静态请求相分离。仔细想一想,如果又出现了一种静态的文件,比如*.abc ,那难道又去修改那个配制文件吗?显然不太合理,所以可以考虑将所有的表态文件放在同一个根目录下面,比如/static那么可以将上面的静态页面请求修改一下:

ocation /static

{

root html

/static;

}

咦这样是不是就好一些了,而且文件的存放也比较有规范了。

三,nginx缓存应用

nginx具有web缓存服务,proxy_cache,但是有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。

nginx安装时需要将ngx_cache_purege加载进去。

./configure --user=www --group=www --add-module=/root/dxm/nginx/ngx_cache_purge-1.2   

其中,/root/dxm/nginx/ngx_cache_purge-1.2为ngx_cache_purge解压路径(附件中提供ngx_cache_purge tar包下载)

现在来一段实例,实现图片缓存:

话说proxy_tem_path,与proxy_cache_path必须在同一个分区之下!

proxy_temp_path /usr/local/nginx/proxy_temp;  

proxy_cache_path /usr/local/nginx/proxy_cache_path levels=: keys_zone=cache_one:200m inactive=1d max_size=1g;

upstream tomcat_server{

server 127.0.0.1:8080;

}

server{

listen

192.168.154.128;

server_name www.server110.com;

location ~

.*.(gif|jpg|jpeg|png|bmp|swf)$

{

proxy_cache cache_one

;

proxy_cache_methods GET HEAD POST;

proxy_cache_min_uses 1;

proxy_cache_valid 200 302 10m;

proxy_cache_valid 404 1m;

proxy_cache_valid any 1m;

proxy_cache_key "$host:$server_port$uri$is_args$args";

proxy_redirect

off;

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://tomcat_server;

}

location ~

.*.(jsp)$ {

proxy_redirect

off;

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://tomcat_server;

}

location ~

/purge(/.*)

{

allow 192.168.154.128;

allow 192.168.154.1;

deny all;

proxy_cache_purge cache_one $host:$server_port$1$is_args$args;

}

恩,静态页面缓存,动态请求不缓存!

大家看一下最后一段的那个purege配置,很显然,表示哪些IP可以手动清除指定的URL

比如,www.wolfdraem.cn/1.jpg可以访问到我的图片,那么用www.wolfdream.cn/purge/1.jpg  就可以清除图片缓存了。