- 浏览: 435092 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (144)
- java (32)
- Flex (11)
- linux (15)
- 思维至上 (2)
- 生活 (4)
- spring2.5.5 (3)
- Design pattern (0)
- jdk1.6 (1)
- erlang (14)
- mysql (5)
- nginx (10)
- 互联网 (1)
- 用户体验 (0)
- jvm (8)
- hibernate (0)
- oracle (0)
- mvn (2)
- 23种常用设计模式详细讲解及实例 (1)
- nosql (1)
- mongodb (2)
- thrift (1)
- 负载均衡 (1)
- Objective-c (1)
- fuck (1)
- resin (3)
- log4j (2)
- android (1)
- jps (0)
- lucene (2)
- rsync (1)
- python (1)
- java性能分析 (1)
- spring (1)
- zookeeper (2)
- error (1)
- 算法 (1)
- hudson (1)
- svn (1)
- maven (1)
- svn server (2)
- swap linux (1)
- 协同过滤 (1)
- 邮件系统 (1)
最新评论
-
cheetah747:
我也遇到这个问题了,不过我是直接把第三方jar放到工程文件的l ...
JAVA NoClassDefFoundError: -
dxm1986:
hillfallshore 写道亲 你这是杜撰的小说吗?完全是 ...
面试有感 -
dxm1986:
mengda1027 写道从实习生到高级java到架构师,是在 ...
面试有感 -
dxm1986:
kljjack 写道一个编程十几年,每年看几十本技术书籍,技术 ...
面试有感 -
dxm1986:
轻指飞扬 写道呵呵,挺好玩的~ 我怎么感觉你招人不是很有诚意嘛 ...
面试有感
今天工作之余,继续拘捣鼓了一下nginx,尝试了一下,nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL
一,nginx反向代理配置
#tomcat
upstream tomcat_server{ server 127.0.0.1:8080; } server{ 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那么可以将上面的静态页面请求修改一下:
location /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=1:2 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.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 就可以清除图片缓存了。
恩。好了。好像今天是周五了。。。祝大家周未快乐。哈哈。。。。。
- ngx_cache_purge-1.2.tar.gz (5.7 KB)
- 下载次数: 178
评论
<div class="quote_div">nginx真的比apache强大吗?强大多少?<img src="/images/smiles/icon_redface.gif" alt="">
</div>
<p>apache也有自己的优点,各有强处吧。比如apache安全性比nginx就要好。</p>
听他说这个web server
性能比阿帕奇好几个数量级。
<div class="quote_div">说一下我的目录结构<br>静态文件: root root/html root/css root/js root/img<br>动态文件: 工程名目录testroot root/jsp</div>
<p> </p>
<p> </p>
<pre name="code" class="java">if (!-f $request_filename) # rewrite所有jsp页面为html页面,如果静态文件目录没有该文件
{
rewrite ^/(.*)\.html$ /$1.jsp last;
proxy_pass http://localhost; # 动态网页分发给后台的tomcat服务器
break;
} </pre>
<p> </p>
<p> </p>
<p>你这个rewrite 规则搞错了吧,</p>
<p> </p>
<pre name="code" class="java"> # rewrite所有jsp页面为html页面....
....
rewrite ^/(.*)\.html$ /$1.jsp last;
....</pre>
<p> </p>
<p> 如果一个请求文件不存在,</p>
<p>如果这个文件是<strong>*.htm</strong>l结尾则将其<strong>转换为*.jsp,</strong></p>
<p>而不是你所说的将所有的JSP页面rewrite为HTML页面吧</p>
<p> </p>
<p> </p>
<p>而且你这个缓存写的也不怎么规范,一般是将需要缓存的文件的location标签和不需要缓存的文件的location标签分开才对啊。</p>
<p> </p>
<p> </p>
<pre name="code" class="java">ocation ~ .*\.(gif|jpg|jpeg|png|bmp|swf|<span style="color: #ff0000;"><strong>html</strong></span>)$
{
#<strong><span style="color: #ff0000;">静态文件缓存</span></strong>
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)$ {
#<span style="color: #ff0000;"><strong>JSP动态请求,不缓存</strong></span>
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;
}
</pre>
<p> </p>
<p> </p>
静态文件: root root/html root/css root/js root/img
动态文件: 工程名目录testroot root/jsp
proxy_cache_path c:/nginx/cache levels=1:2 keys_zone=test_cache:10m max_size=2m inactive=1m;
upstream localhost
{
server localhost:18081 weight=1 max_fails=2 fail_timeout=10s;
server localhost:18080 weight=1 max_fails=2 fail_timeout=10s;
}
server
{
listen 80;
server_name localhost;
index index.html index.htm;
root html; #静态文件目录,包括html网页和css,js
#缓存
location /
{
#如果后端的服务器返回502、504、执行超时等错误,
#自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#缓存
#使用上面定义的proxy_cache
proxy_cache test_cache;
#缓存
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,
#存储缓存内容到二级缓存目录内
proxy_cache_key $host$uri$is_args$args;
#缓存
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 302 1m;#一分钟测试
proxy_cache_valid 301 1m;#一分钟测试
proxy_cache_valid any 1m;#其它的保存一分钟
if (!-f $request_filename) # rewrite所有jsp页面为html页面,如果静态文件目录没有该文件
{
rewrite ^/(.*)\.html$ /$1.jsp last;
proxy_pass http://localhost; # 动态网页分发给后台的tomcat服务器
break;
}
}
# tomcat中扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
location ~ .*\.(php|jsp|do|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html
{
root html;
}
}#server结束
<div class="quote_div">css,js,图片缓存正常,html静态页面不起作用,不知道为什么</div>
<p> </p>
<p>不对啊。你是不是配制有问题?贴一下你的配制。</p>
发表评论
-
User agent
2012-04-19 10:28 1120http://en.wikipedia.org/wiki/Us ... -
Nginx agent log 中 IE的浏览器版本
2012-04-19 10:13 2929http://www.useragentstring.com/ ... -
基于nginx access 的log 分析
2012-03-22 17:27 21131 设置 nginx access.log 格式 ... -
nginx 按网站用户尾号设置白名单
2011-12-27 17:48 1804nginx 按网站用户尾号设置白名单 其实这个需求很常 ... -
nginx x-forwarded-for的深度挖掘
2011-08-25 10:21 1335nginx x-forwarded-for的 ... -
nginx转发不带参数
2011-07-23 20:34 3716Nginx: rewrite重定向的参数处理问题 星期日, ... -
Nginx无需重启动态加载配置文件
2011-04-18 21:54 15347重新刷新了一下nginx的配置文件,禁止在403,404等 ... -
nginx proxy_pass location 为正则表达式的问题
2011-04-18 21:35 3687http://blog.helosa.org/2 ... -
神奇的nginx
2011-03-16 15:46 1879一,设置默认图片 ...
相关推荐
proxy_cache机制允许Nginx将从后端服务器获得的静态内容缓存到磁盘上,当相同请求再次发生时,可以直接从磁盘缓存中提供数据,而无需每次都向后端服务器获取。 proxy_cache的基本用法是在Nginx的配置文件中进行设置...
`proxy_cache_path` 指定了缓存存储的路径,`levels` 参数定义了缓存目录的层级,`keys_zone` 设置了一个名为 `cache_one` 的内存缓存区域,大小为 200MB,`inactive` 参数指定了1天内未被访问的缓存将被自动清理,`...
总结来说,本文可能会涵盖Nginx的proxy_cache缓存机制,CDN的基本原理,以及如何通过配置nginx.conf文件来实现这两项功能。同时,可能会提及源码分析和优化策略,帮助读者更好地理解和利用Nginx提升网站性能。
通过这样的配置,当需要更新特定资源时,可以通过发送一个请求到`/purge`接口,Nginx Cache Purge插件会根据请求的URI清除相应的缓存项,确保用户可以立即获取到更新的内容。 总的来说,Nginx Cache Purge是Nginx...
**NGINX反向代理与缓存详解** NGINX是一款高性能的HTTP和反向代理服务器,常用于负载均衡和内容缓存,以提高网站的响应速度和整体性能。在本文中,我们将深入探讨如何利用NGINX进行反向代理和缓存配置,特别是对于...
缓存更新:Nginx提供了多种机制来控制缓存的更新,如`proxy_cache_revalidate`(根据Last-Modified或ETag头验证缓存)、`proxy_cache_bypass`(决定是否跳过缓存)和`proxy_cache_lock`(防止同一资源的并发请求导致...
### Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解 #### 一、Nginx反向代理 **反向代理**是一种网络服务技术,其中客户端不会直接连接到目标服务器,而是通过一个代理服务器进行访问。这种模式下,...
5. **缓存规则**:通过`proxy_cache_key`设置缓存键,决定哪些请求会被缓存。同时,`proxy_cache_methods`指定允许缓存的HTTP方法,通常包括GET和HEAD。 6. **缓存过期策略**:使用`proxy_cache_valid`设置不同响应...
Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于Web服务领域,而缓存机制则能显著提高静态资源的访问速度。ngx_cache_purge 插件就是为了解决动态内容更新时,缓存中旧数据可能导致用户获取到过期信息的问题。...
在现代Web服务架构中,Nginx因其高效、稳定以及丰富的功能而被广泛用作反向代理服务器、负载均衡器和静态内容服务器。本篇文章将探讨如何利用Nginx实现动静分离、缓存功能,并进行基础的负载均衡配置。 一、动静...
### 一、Nginx反向代理配置 反向代理是Nginx的核心功能之一,它充当服务器和客户端之间的中介。当用户请求到达Nginx时,Nginx会根据配置将请求转发到后端服务器处理,然后将响应返回给用户。以下是一个基本的反向...
本文将介绍一个用于批量清除Nginx proxy_cache缓存的bash脚本。 脚本的主要功能分为三部分: 1. 按文件类型清理缓存:用户可以指定一个或多个文件类型,脚本会遍历缓存目录,找到所有匹配指定类型的缓存文件并删除...
**Nginx反向代理详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,广泛应用于互联网领域,尤其在处理高并发场景时表现出色。它以其高效稳定、低内存占用以及丰富的模块化设计而备受赞誉。在这个...
通过proxy_cache_path指令设置缓存目录,proxy_cache指令启用缓存,proxy_cache_bypass和proxy_no_cache控制何时绕过缓存。 4. **安全防护**:Nginx可以通过限制IP、设置速率限制、启用HTTP基本认证等方式增强安全...
Nginx 静态缓存基本配置可以通过 proxy_cache 配置实现。例如: ``` http { ... proxy_cache my_cache; ... server { ... location / { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_...
在构建Web服务时,Nginx因其高性能、轻量级和强大的反向代理及负载均衡能力而被广泛采用。在本教程中,我们将探讨如何利用Nginx搭建一个专门用于处理图片的静态资源缓存服务器。这个过程主要包括Nginx的安装、配置...
成功编译和安装后,你需要编辑 Nginx 的配置文件(通常是 `/etc/nginx/nginx.conf`),添加缓存清除的相关配置,然后重启 Nginx 服务以应用更改。 以下是一个简单的示例配置,展示了如何使用 ngx_cache_purge 模块...