nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
一,nginx反向代理配置
#tomcat
显然就是用户访问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必须在同一个分区之下!
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 就可以清除图片缓存了。
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;
}
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;
}
相关文章:

深度强化学习的前景:帮助机器掌控复杂性
作者:数据实战派 来源:数据实战派深度强化学习,即机器通过测试其行为后果来学习的方法,是人工智能最有前途和影响力的领域之一。它将深度神经网络与强化学习结合在一起,可以通过训练实现多个步骤的目标。它是自动驾驶汽…

成绩转换(15)
#include<stdio.h> int main() {int n;char ch;while(scanf("%d",&n)!EOF){if(n>100||n<0) continue;if(n>90) chA;else if(n>80) chB;else if(n>70) chC;else if(n>60) chD;else chE;printf("%c\n",ch);} }转载于:https://ww…

pangolin最新版 v2.5.2.975
Pangolin是一款帮助渗透测试人员进行Sql注入测试的安全工具。 所谓的SQL注入测试就是通过利用目标网站的某个页面缺少对用户传递参数控制或者控制的不够好的情况下出现的漏洞,从而达到获取、修改、删除数据,甚至控制数据库服务器、Web服务器的目的的测试…

nginx 的proxy_cache才是王道
nginx 的proxy_cache才是性价比最高的缓存,我目前的配置是LiteSpeednginx,可以参考apachenginx将动态内容交给LiteSpeed或apache来处理,然后利用proxy_cache反向代理全部缓存在硬盘,变成静态内容,大家都知道nginx跑静态内容是有多厉害了吧,所以这样就可以小内存跑大PV.但是这样…

Android 占位符 %1$s %1$d
1、整型,比如“我今年23岁了”,这个23是整型的。在string.xml中可以这样写,<string name"old">我今年%1$d岁了</string> 在程序中,使用 [java] view plaincopy String sAgeFormat getResources().getStrin…

谁说技术男不适合养猫!90后程序员2天做出猫咪情绪识别软件
整理 | 王晓曼出品 | CSDN(ID:CSDNnews)9月1日,一则关于#程序员2天做出猫咪情绪识别软件#的话题登上微博热搜,参与阅读的人数达到了8218.1万,讨论次数1.3万,引发网友们的热议。高手在民间&#…

符合RESTful的接口规范
把api放在专属域名下,要带版本号 api的url中应该只有名词,和数据库的表或文档资源相对应;对资源(collection)的具体操作类型则由http方法动词表示 (安全性:不改变资源状态,类似只读&…

Nginx proxy_cache 使用示例
原文出处:http://blog.chenlb.com/2010/04/nginx-proxy-cache.html 动态网站使用缓存是很有必要的。前段时间使用了 nginx proxy_stroe 来保存静态页面,以达到缓存的目的。当然 proxy stroe 用来做缓存是不够好的方案。 缓存这一块当然还有 squid 之类的…

Lync 小技巧-49-Lync 自动备份-批量管理-用户(免费视频)
自从2010年开始,自从Lync Server 2010开始,我都在研究Lync 自动备份和批量管理用户,当年都做成功,做标准过.不过都是图片,未写博客,为什么呢?有可能你有这样那样的假设,但是今天可以…

数学很差的人能当程序员吗?
【CSDN 编者按】作者在大学时代受《程序员》杂志的启发,从数学专业投身计算机编程,毕业后进入软件开发行业。过去9年,他去过大厂敲代码,也曾在创业公司带过团队,一直从事“下一代”软件技术的研发,对于网上…

Nginx 学习笔记(六)引入线程池 性能提升9倍
原文地址:https://www.cnblogs.com/shitoufengkuang/p/4910333.html 一、前言 1、Nignx版本:1.7.11 以上 2、NGINX采用了异步、事件驱动的方法来处理连接。这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用…

Nginx源代码分析 - 日志处理
我看Nginx源代码的时候,感觉整个系统都在传递log指针。log在nginx里是比较关键的。日志和内存分配是最基础的两个起点代码,最好是在自己写的程序框架中早点完善并实现。以免未来要用大量的精力调整。1. 日志的源代码位置日志的源代码在src/code/ngx_log.…

strom.yaml配置
2019独角兽企业重金招聘Python工程师标准>>> 配置storm.yaml storm发行版在conf/storm.yaml包含了一些配置信息。你可以在这里看到默认配置。storm.yaml里面的配置比default.xml的优先级要高, 下面是要运行storm集群所必须的配置: 1. storm.zookeeper.se…

用 Python 快速制作海报级地图
作者:费弗里 来源:Python大数据分析 1 简介 基于Python中诸如matplotlib等功能丰富、自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了。 …

关于VS2012如何安装Windows Phone Toolkit
最近也是碰到很多问题,在编程的时候。这个问题是我遇到的比较棘手的一个,问了一堆人都说得很是模糊,最后还是琢磨出来了,深感欣慰。写下来以防以后忘记了怎么操作的,也期望能帮助到遇到同样问题的你。 首先让我先说了几…

论Oracle 11g数据库备份与恢复策略
11G中有个新特性,当表无数据时,不分配segment,以节省空间解决方案:1、insert一行,再roolback就会产生segment了该方法是在空表中插入一行数据,再删除,就会产生segment。则在数据库导出时可以导出…

使Apache实现gzip压缩
众所周知,在HTTP1.1中支持gzip压缩,这样可以缩小页面的容量从而加快页面的显示速度。可以使用常用HTTP抓包工具来检测一下你的站点是否开始了gzip压缩。 Apache默认的http.conf配置文件中没有开启gzip压缩,apache1.3.x可以用mod_gzip进行优化…

脸书 AI 识别误将黑人标记为「灵长类动物」
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 最近,Facebook用户在观看一段以黑人为主角的视频时,会看到一个自动生成的提示,询问他们是否愿意“继续观看灵长类动物的视频”。 视频的内容其实是几个黑人和警察发…

Forefront for OCS2007之部署
1. 前提准备①OCS服务器②创建一个域账户,用于Forefront IM通告。帐户还将用于运行 ForefrontRTCProxy 服务用来截取来自 Office Communications Server SIP 通信进行扫描。此帐户必须满足以下要求:该帐户必须被为ForefrontRTCProxy服务授予 “ 运行为服…

Memcached在大型网站中应用
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采…

iOS开发-照片选择
本来想做个注册登录的表单的,想想还是先做个简单的头像选择,一般情况下不管是内部管理系统还是面向公众的互联网公司,注册登录是免不了的,用户头像上传是免不了的,尤其是企业用户,上传了自己的图片才感觉自…

打造一流创新环境:协作、开放、可持续
作者 | 微软亚洲研究院院长 周礼栋 毋庸置疑,人类是群居物种。早在两千多年前,亚里士多德便在其著述《政治学》里揭示了人类群居共利协作的趋向:个体组成家庭,家庭组成村落,村落组成城池,城池组成国家和社会…

Ansible源码解析 Inventory组概念
group.py 作者 煮酒品茶 一个组的Class,包含对外方法以及属性如下。 组做为inventory的子节点,会有嵌套组,组变量,组内主机,子组,父组的一些概念 [ name, hosts, vars, child_groups, parent_groups, depth…

Hadoop简要介绍
本文大部分内容都是从官网Hadoop上来的。其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了。我的这一个系列的Hadoop学习笔记也是从这里一步一步进行下来的,同时又参考了网上的很多文章,对学习Hadoop中遇到的问题进行了归纳总结。 …

超 40W 奖金池等你来战!第二届“长沙银行杯”腾讯云启创新大赛火热来袭!...
HEY!你在等待一个机会提升自己的能力吗?现在机会来啦!第二届“长沙银行杯”腾讯云启创新大赛如约而至!现在,让更多人见证你的创新能力和新鲜想法第二届“长沙银行杯”腾讯云启创新大赛由长沙银行联合腾讯云、腾讯云启共…

(转)AppCan中调用系统浏览器打开网页
<!DOCTYPE html> <html> <head> <style>body{ background:#fff; font-size:30px;}</style> <meta charset"utf-8"> <script> function openUrl(url){if(uexWidgetOne.getPlatform()0){//IOS设备uexWidget.loadApp(url,,);…

Python optionParser模块的使用方法
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数; 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、…

squid命中率分析参数注释
默认squid配置文件里面已经加上acl all src 0.0.0.0/0.0.0.0acl manager proto cache_objecthttp_access allow all#cachemgr_passwd pass allhttp_access allow Manager all 3.0直接看这里基本的使用方法*取得squid运行状态信息: squidclient -p 80 mgr:info //注…

库克退休前的最后一战:不是苹果汽车而是……
整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 上个月库克迎来了他担任苹果 CEO 十周年的日子,我们也为此统计了一份成绩单;而下一个十年,库克可能不会再陪苹果完整走过了:今年 4 月库克在采访中表示…

VIM技巧:显示行号
在vi的命令模式下输入":set nu",就有行号了,取消行号输入":set nonu"。 命令只对当前文档有效,如果想使vi打开文档时默认显示行号,可以修改vi的配置文件。 # vi ~/.vimrc 在这个文件中,添加 set n…