Nginx服务器作反向代理时的缓存配置要点解析_nginx

这里给出示例,并详解。

http {
[...]
[...]

proxy_cache_path /data/nginx/cache/one levels=1:2  keys_zone=one:10m max_size=10g;
proxy_cache_key "$host$request_uri";

server {
  server_name www.jb51.net jb51.net;
  root /home/www.jb51.net/web;
  index index.php index.html index.htm;
  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host "www.jb51.net";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #开启反向代理缓存,并使用zone name为one的缓存。
    proxy_cache one;
    #设置状态码为200 302过期时间为10分钟
    proxy_cache_valid 200 302 10m;
    #设置状态码404的过期时间为1分钟
    proxy_cache_valid 404   1m;
  }
  #清除缓存
  location ~ /purge(/.*) {
    #允许的IP
    allow 127.0.0.1;
    deny all;
    proxy_cache_purge one $host$1$is_args$args;
  }
}

}

反向代理的缓存主要涉及以下几个命令:

proxy_cache_path proxy_cache_key proxy_cache proxy_cache_valid。
1.proxy_cache_path

这个是设置缓存的目录,语法如下:

复制代码 代码如下:

proxy_cache_path path [ levels = levels ] keys_zone = name : size [ inactive = time ] [ max_size = size ] [ loader_files = number ] [ loader_sleep = time ] [ loader_threshold = time ]

可放置的上下文:
http
参数解释:
[ levels = levels ]:
设置缓存目录层数,如levels=1:2,表示创建两层目录缓存,最多创建三层。第一层目录名取proxy_cache_key md5的最后一个字符,第二层目录名取倒数2-3字符,如:
proxy_cache_key md5为b7f54b2df7773722d382f4809d65029c,则:
levels=1:2为/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
levels=1:2:3为/data/nginx/cache/c/29/650/b7f54b2df7773722d382f4809d65029c
2.keys_zone = name : size:
定义缓存区域名称及大小,缓存名称用于proxy_cache指令设置缓存放置在哪,如proxy_cache one,则把缓存放在zone名称为one的缓存区,即proxy_cache_path指定的具体位置。
3.proxy_cache_key
这个指令是设置以什么参数md5得到缓存的文件名,默认为$scheme$proxy_host$request_uri,即以协议、主机名、请求uri(包含参数)作md5得出缓存的文件名。
proxy_cache_key与下面的清缓存功能(purge cache)有很大关系。
可放置在上下文,http server location
4.proxy_cache
反向代理缓存设置指令,语法proxy_cache zone | off,默认为off。上下文:http server location。
可以放到指定location,这样匹配此location的url才被缓存。
5.proxy_cache_valid
设置指定状态码的缓存时间,语法proxy_cache_valid [ code …] time。
另外,清缓存需要安装插件ngx_cache_purge,安装方法如下:

cd /tmp
wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
tar xzf ngx_cache_purge-2.1.tar.gz
cd /tmp
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar xzf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure --prefix=/usr/local/nginx --add-module=/tmp/ngx_cache_purge-2.1
make && make install

缓存过期时间
在配置的时候,有如下三个地方可以设置缓存过期时间:

1.inactive=1d
2.proxy_cache_valid 200 304 1h
3.expires 10m
其实解释起来很简单:

inactive=1d 是指多久未访问以后清除缓存
proxy_cache_valid 200 304 1h 是指距离缓存产生时间多久以后清除缓存
expires 10m 这个不是控制服务器端的,而是指在Http Response header里指定的过期时间,是给客户端看的。
temp的问题
Nginx进行反代的时候,遇到超出文件大小 proxy_buffer_size 的时候,是一次性把文件都加载到Temp目录,然后再发送给用户。

如果设置了 proxy_buffering off 则不会加载到Temp目录,而是同步的从上游进行加载。

可以通过设置 proxy_max_temp_file_size 参数来设置最大可以缓存的文件大小。

206 和 Byte Range 的问题
Byte Range允许客户端向服务器请求一部分文件,而不是整个文件。大部分支持多线程下载和断点下载的软件都是用的这个功能。这个时候服务器返回的Http Code是206 Partial Requests.

但是Nginx做反代的时候,如果没有好好的设置,这个功能可能会引来Dos攻击。

因为默认做反代的时候,Nginx向后端服务器请求的时候是不会把 Range 参数加上的,而是会去请求整个文件,比方说有一个1G的文件,每次请求1M,Nginx会在每次请求的时候去后端请求一个完整的1G文件,然后取出其中的1M发给客户端,这个时候中间的流量会暴增,导致整个服务器宕机。今天因为这个问题导致我检查了很久。

解决方案也很简单,把 Range 加到Header里就行了。

proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_no_cache $http_range $http_if_range;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nginx
, 缓存
, 配置
, 反向代理
nginx配置
nginx反向代理服务器、nginx 反向代理 缓存、nginx的反向代理缓存、nginx 反向缓存、nginx图片缓存服务器,以便于您获取更多的相关知识。

时间: 2024-11-08 18:20:54

Nginx服务器作反向代理时的缓存配置要点解析_nginx的相关文章

Nginx服务器作反向代理实现内部局域网的url转发配置_nginx

情景由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80端口的映射在访问的时候要域名加上端口,比较麻烦.并且公司入口路由最多只能做20个端口映射.肯定以后不够用. 然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用n

自动化Nginx服务器的反向代理的配置方法

  这篇文章主要介绍了自动化Nginx服务器的反向代理的配置方法,反向代理是Nginx服务器的招牌功能,需要的朋友可以参考下 如果可以减少过多的外部隔离的API和简化部署的细节 这会是非常好的. 在以前的文章中,我解释了"一些使用反向代理的好处".在我目前的项目里,我们已经构建分布式面向服务的架构,也显式提供了一个HTTP API,我们使用反向代理将请求路由通过API路由给单个组件.我们选择了Nginx Web这个优秀的服务器作为我们的反向代理,它快速.可靠且易于配置.我们通过它将多个

Nginx为Tomcat服务器作反向代理的配置教程_nginx

web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西. 但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景. apache用的越来越少

Node.js站点使用Nginx作反向代理时配置GZip压缩的教程_nginx

node.js 开发的站点,如果你也是用了nginx实现反向代理. 那么在服务端可以轻松实现 gzip 压缩,让站点浏览更顺畅. 前提条件: node.js + nginx 反向代理. node.js 需要做的工作: express 4.0以下版本: app.use(express.compress()); //主要是这句 app.use(express.json()); app.use(express.urlencoded()); app.use(express.bodyParser());

Nginx服务器的反向代理proxy_pass配置方法讲解_nginx

就普通的反向代理来讲 Nginx的配置还是比较简单的,如: location ~ /* { proxy_pass http://127.0.0.1:8008; } 或者可以 location / { proxy_pass http://127.0.0.1:8008; } Apache2的反向代理的配置是: ProxyPass /ysz/ http://localhost:8080/ 然而,如果要配置一个相对复杂的反向代理 Nginx相对Apache2就要麻烦一些了 比如,将url中以/wap/开

在Nginx服务器上屏蔽IP的一些基本配置方法分享_nginx

采集和防止采集是一个经久不息的话题,一方面都想搞别人的东西,另一方面不想自己的东西被别人搞走. 本文介绍如何利用nginx屏蔽ip来实现防止采集,当然也可以通过iptable来实现. 1.查找要屏蔽的ip awk '{print $1}' nginx.access.log |sort |uniq -c|sort -n nginx.access.log 为日志文件, 会到如下结果,前面是ip的访问次数,后面是ip,很明显我们需要把访问次数多的ip并且不是蜘蛛的ip屏蔽掉,本例当中我们屏蔽掉 165

linux下通过Squid反向代理搭建CDN缓存服务器的配置方法_Linux

案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器.让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题具体操作:CDN代理服务器:系统:CentOS 5.5 主机名:cdn.abc.com IP:192

tomcat-nginx反向代理时,尾部自动生成16位随机字符

问题描述 nginx反向代理时,尾部自动生成16位随机字符 nginx前端+tomcat后端,使用反向代理处理动态脚本.访问时,经常出现在URL后,加上如:?vhyufuvqnhmpepco 这样的随机字符,然后整个页面就无法打开了.有没有人碰到过这种情况??求解答... 解决方案 你的意思是,不用nginx,你的web程序可以增加这个?这种写法很怪异,你试试?rid=vhyufuvqnhmpepco 因为这相当于一个不完整的参数. 解决方案二: 先看这个字符串URL是nginx生成还是你tom

browser-Apache服务器的反向代理问题

问题描述 Apache服务器的反向代理问题 使用Apache2.2进行反向代理,然后第一次进去是正常的,可是点击跳转的话,就出现了这个错误信息: Bad Request Your browser sent a request that this server could not understand. Reason: You're speaking plain HTTP to an SSL-enabled server port. Instead use the HTTPS scheme to