nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
2013-05-12 09:28
381 查看
来自于http://www.iteye.com/topic/966903
今天工作之余,继续拘捣鼓了一下nginx,尝试了一下,nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL
一,nginx反向代理配置
#tomcat
Java代码
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等静态的东西去访问一台专门的服务器,而动态的请求去访问另一台服务器。就这么简单,上例子:
Java代码
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;
}
}
上面这种方式是通过设定不同的域名,可不可以在同一个域名中,通过判断后缀来将动态与静态请求相分离呢?
Java代码
#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那么可以将上面的静态页面请求修改一下:
Java代码
location /static
{
root html/static;
}
咦这样是不是就好一些了,而且文件的存放也比较有规范了。
三,nginx缓存应用
nginx具有web缓存服务,proxy_cache,但是有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。
nginx安装时需要将ngx_cache_purege加载进去。
Java代码
./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必须在同一个分区之下!
Java代码
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;
Java代码
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)$
{
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 就可以清除图片缓存了。
恩。好了。好像今天是周五了。。。祝大家周未快乐。哈哈。。。。。
今天工作之余,继续拘捣鼓了一下nginx,尝试了一下,nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL
一,nginx反向代理配置
#tomcat
Java代码
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等静态的东西去访问一台专门的服务器,而动态的请求去访问另一台服务器。就这么简单,上例子:
Java代码
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;
}
}
上面这种方式是通过设定不同的域名,可不可以在同一个域名中,通过判断后缀来将动态与静态请求相分离呢?
Java代码
#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那么可以将上面的静态页面请求修改一下:
Java代码
location /static
{
root html/static;
}
咦这样是不是就好一些了,而且文件的存放也比较有规范了。
三,nginx缓存应用
nginx具有web缓存服务,proxy_cache,但是有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。
nginx安装时需要将ngx_cache_purege加载进去。
Java代码
./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必须在同一个分区之下!
Java代码
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;
Java代码
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)$
{
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 就可以清除图片缓存了。
恩。好了。好像今天是周五了。。。祝大家周未快乐。哈哈。。。。。
相关文章推荐
- nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
- nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
- nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
- nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL
- nginx安装第三方ngx_cache_purge模块,purge命令清除静态缓存
- Nginx使用Proxy_cache实现服务器端静态文件缓存
- Nginx+Tomcat实现反向代理、页面缓存、动静分离
- 使用Nginx的proxy_cache缓存功能
- nginx的proxy_cache缓存相关配置
- nginx proxy cache 缓存 流程
- nginx缓存之proxy_cache遇到的坑
- 使用Nginx的proxy_cache缓存功能取代Squid
- 使用Nginx的proxy_cache缓存功能取代Squid
- 使用Nginx的proxy_cache缓存功能取代Squid[原创]
- ASP.NET 客户端静态文件请求设置缓存(Client Cache)
- 使用Nginx的proxy_cache缓存功能取代Squid
- 使用Nginx的proxy_cache缓存功能取代Squid(转)
- nginx内置缓存Proxy_cache
- nginx 使用ngx_cache_purge清除缓存
- nginx利用proxy_cache来缓存文件