七、Nginx学习笔记七Nginx的Web缓存服务
user www;
worker_processes 1;
error_log /usr/local/nginx/logs/error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
events {
worker_connections 64;
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
keepalive_timeout 60;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path //usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp; gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on; client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#设定虚拟主机
#include /usr/local/nginx/conf/vhost/aa.test.com;
include /usr/local/nginx/conf/vhost/tomcat.com; }
Nginx.conf
upstream 192.168.1.101 {
server 192.168.1.101:8080;
server 192.168.1.100:8080;
# hash_method crc32;
}
server {
listen 80;
server_name 192.168.1.101;
charset utf-8;
location / {
root html;
index index.html index.htm;
proxy_pass http://192.168.1.101;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
location ~ .(jpe?g|png|gif)$ {
valid_referers 192.168.1.3;
if ($invalid_referer) {
return 403;
}
} location ~ .*\.(gif|jpg|jpeg|bmp|png|js|css|swf|html)?$ # //缓存文件类型
{ proxy_cache cache_one; proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://192.168.1.101;
} }
tomcat7
1.Web缓存的定义.
Web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去
后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL
,Web缓存服务器直接输出内容给客户端,而不是向源服务器再次发送请求.Web缓存降低
了内容源Web服务器,数据库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了
用户体验.
2.Squid介绍
Web缓存服务器中,最著名的要数Squid Cache(简称为Squid),Squid是一个流浪的自由软
件的代理服务器和Web缓存服务器。
Squid可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,
Squid可以为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,
Squid可以通过过滤流量帮助网络安全,到局域网通过代理上网.
3.Nginx的Web缓存服务及和Squid的比较
Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi相关指令集构成
(1)proxy_cache相关指令集用于反向代理时,对后端内容源服务器进行缓存.Nginx的proxy_cache缓存功能,十分稳定,速度不逊于Squid.
(2)fastcgi相关指令集主要用于对FastCGI的动态程序进行缓存.两者功能基本一样.在功能上,
Nginx已经具备Squid所拥有的Web缓存加速功能,清除指定URL缓存功能.而在性
能上,Nginx对多核CPU的利用,胜过Squid不少.另外,在反向代理,负载均衡,健康检查,后
端服务器故障转移,重写,易用性上,Nginx也比Squid强大很多.这使得一台Nginx可以同时
作为"负载均衡服务器"与"Web缓存服务器"来使用.
4.proxy_cache相关指令集
(1)proxy_cache指令 语法: proxy_cache zone_name ;
该指令用于设置哪个缓存区将被使用,zone_name的值为proxy_cache_path指令创建的缓
存区的名称.
(2)proxy_cache_path指令, 语法 proxy_cache_path path [levels=number]
keys_zone=zone_name:zone_size[inactive=time] [max_size=size];
该指令用于设置缓存文件的存放路径.例:
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:500m
inactive=1d max_size=30g ;
path 存放目录
levels 指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层目录为2个字母,
保存的文件名会类似/data0/proxy_cache_dir/c/29/XXXXXX ;
keys_zone参数用来为这个缓存区起名.
500m 指内存缓存空间大小为500MB
inactive的1d指如果缓存数据在1天内没有被访问,将被删除
max_size的30g是指硬盘缓存空间为30G
(3)proxy_cache_methods 指令 语法:proxy_cache_methods[GET HEAD POST];
该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD方法,不缓存HTTP POST 方法
(4)proxy_cache_min_uses指令 语法:proxy_cache_min_uses the_number
该指令用于设置缓存的最小使用次数,默认值为1
(5)proxy_cache_valid指令 语法: proxy_cache_valid reply_code [reply_code...]
time ;
该指令用于对不同返回状态码的URL设置不同的缓存时间.
例:
proxy_cache_valid 200 302 10m ;
proxy_cache_valid 404 1m ;
设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.
(6)proxy_cache_key指令 语法: proxy_cache_key line ;
该指令用来设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存.一般根据$host(域名
),$request_uri(请求的路径)等变量组合成proxy_cache_key .
5.proxy_cache完整示例
(1)首先,把第三方的ngx_cache_purge模块编译安装到Nginx中,用来清除指定URL的缓存
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure
make && make install
cd ../
wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
tar zxvf ngx_cache_purge-1.0.tar.gz
wget http://nginx.org/download/nginx-0.8.32.tar.gz
tar zxvf nginx-0.8.32.tar.gz
cd nginx-0.8.32/
./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0
--prefix=/usr/local/webserver/nginx --with-http_stub_status_module
--with-http_ssl_module
make && make install
cd ../
(2)然后,在同一分区下创建两个缓存目录,分别供proxy_temp_path , proxy_cache_path
指令设置缓存路径.注:两个指定设置的缓存路径必须为同一磁盘分区,不能跨分区.
mkdir -p /data0/proxy_temp_path
mkdir -p /data0/proxy_cache_path
(3)Nginx配置文件(nginx.conf)对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图
片,flash,javascript , css文件开启Web缓存,其他文件不缓存.
示例代码如下:
http{
proxy_temp_path /data0/proxy_temp_path ;
#设置Web缓存区名称为cache_one,内存缓存空间大小为500M,自动清除超过1天没有被
#访问的缓存数据,硬盘缓存空间大小为30G
proxy_cache_path /data0/proxy_cache_path levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=30g ;
server{
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
#使用Web缓存区cache_one
proxy_cache cache_one ;
#对不同HTTP状态码缓存设置不同的缓存时间
proxy_cache_valid 200 304 12h ;
proxy_cache_valid 301 302 1m ;
proxy_cache_valid any 1m ;
#设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名,URI,
#参数"组合成Key
proxy_cache_key $host$uri$is_args$args;
}
#用于清除缓存,假设一个URL为http://my.domain.com/test.gif,通过访问
#http://my.domain.com/purge/test.gif可以清除该URL的缓存
location ~ /purge(/.*)
{
#设置只允许指定的IP或IP段才可以清除URL缓存
allow 127.0.0.1 ;
allow 192.168.0.0/16 ;
deny all ;
proxy_cache_purge cache_one $host$1$is_args$args ;
}
}
}
6.fastcgi_cache相关指令集
(1)fastcgi_cache指令
语法:fastcgi_cache zone_name;
该指令用于设置哪个缓存区将被使用,zone_name的值为fastcgi_cache_path指令创建的
缓存区名称.
(2)fastcgi_cache_path指令
语法:fastcgi_cache_path path [levels=number] keys_zone=zone_name:zone_size
[inactive=time] [max_size=size];
该指令用于设置缓存文件的存放路径,
例:
fastcgi_cache_path /data0/fastcgi_cache_dir levels=1:2
keys_zone=cache_one:500m inactive=1d max_size=30g ;
注意这个指令只能在http标签内配置,
levels指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母,保存的
文件名会类似/data0/fastcgi_cache_dir/c/29/XXXX;
keys_zone参数用来为这个缓存区起名,
500m指内存缓存空间大小为500MB;
inactive的1d指如果缓存数据在1天内没有被访问,将被删除;
max_size的30g是指硬盘缓存空间为30GB
(3)fastcgi_cache_methods指令
语法:fastcgi_cache_methods [GET HEAD POST] ;
该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD 方法,不缓存HTTP POST方法
(4)fastcgi_cache_min_uses指令
语法:fastcgi_cache_min_uses the_number;
该指令用于设置缓存的最小使用次数,默认值为1.
(5)fastcgi_cache_valid指令
fastcgi_cache_valid reply_code [reply_code...] time;
该指令用于对不同返回状态码的URL设置不同的缓存时间.
fastcgi_cache_valid 200 302 10m ;
fastcgi_cache_valid 404 1m ;
设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.
如果不指定状态码,直接指定缓存时间,则只有200,301,302状态的URL缓存5分钟.
(6)fastcgi_cache_key指令
语法:fastcgi_cache_key line ;
该指令用来设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存.一般根据FastCGI服
务器的地址和端口,$request_uri(请求的路径)等变量组合成fastcgi_cache_key。
7.fastcgi_cache完整示例
(1)首先,在同一分区下创建两个缓存目录,分别供
fastcgi_temp_path,fastcgi_cache_path指令设置缓存路径.注:两个指定设置的缓存路
径必须为同一磁盘分区,不能跨分区.
mkdir -p /data0/fastcgi_temp_path
mkdir -p /data0/fastcgi_cache_path
(2)Nginx配置文件(nginx.conf)对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图
片,Flash,JavaScript,CSS文件开启Web缓存,其他文件不缓存.
http{
#fastcgi_temp_path和fastcgi_cache_path指定的路径必须在同一分区
fastcgi_temp_path /data0/fastcgi_temp_path ;
#设置Web缓存区名称为cache_one,内存缓存空间大小为500MB,自动清除超过1天没有被
#访问的缓存数据,硬盘缓存空间大小为30G
fastcgi_cache_path /data0/fastcgi_cache_path levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=30g ;
server{
location ~ .*\.(php|php5)$
{
#使用Web缓存区cache_one
fastcgi_cache cache_one ;
#对不同的HTTP状态码缓存设置不同的缓存时间
fastcgi_cache_valid 200 10m ;
fastcgi_cache_valid 301 302 1h ;
fastcgi_cache_valid an 1m ;
#设置Web缓存的key值,Nginx根据key值md5哈希存储缓存,这里根据"FastCGI服务
#器的IP,端口,请求的URI"组合成Key。
fastcgi_cache_key 127.0.0.1:9000$requet_uri ;
#FastCGI服务器
fastcgi_pass 127.0.0.1:9000 ;
fastcgi_index index.php ;
include fcgi.conf ;
}
}
}
七、Nginx学习笔记七Nginx的Web缓存服务的更多相关文章
- nginx 学习笔记(2) nginx新手入门
这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...
- Nginx 学习笔记(二)Web 服务启用 HTTP/2
个人网站提升为HTTP2.0协议,加速访问 一.条件 1.openssl的版本必须在1.0.2e及以上 2.nginx的版本必须在1.9.5以上 二.编译安装 1.openssl 编译安装 (1)开始 ...
- Nginx 学习笔记(三)proxy_cache 缓存配置和ngx_cache_purge模块
反向代理的缓存清理 一.proxy_cache配置 (1)如何配置和安装,都在这里了:https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Ng ...
- nginx 学习笔记(1) nginx安装
1.nginx安装 根据操作系统的不同,nginx的安装方式也不相同. 1.1 对linux系统来说,nginx.org提供了nginx安装包.http://nginx.org/en/linux_pa ...
- Nginx学习笔记六Nginx的模块开发
1.Nginx配置文件主要组成:main(全局配置)这部分的指令将影响其他所有部分.server(虚拟主机配置)这部分指令主要用于指定虚拟主机域名,IP和端口.upstream(主要为反向代理,负载均 ...
- nginx学习笔记(7)Nginx如何处理一个请求---转载
如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...
- nginx 学习笔记(5) nginx调试日志
为启动一个调试日志,nginx需要在构建时配置城支持调试模式. ./configure --with-debug ... 而且调试级别应该使用err_log指令来设置: err_log /path/t ...
- nginx 学习笔记(3) nginx管理
nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...
- nginx 学习笔记(6) nginx配置文件中的度量单位
容量大小可以用比特(byte),千比特(kilobyte,后缀k或者K)或者兆(megabytes,后缀m或者M),例如:“1024”,“8k”,“1m”. 时间间隔可以用毫秒(millisecond ...
随机推荐
- openstack之cinder
一.cinder概述: 1.F版之前,并没有cinder,对应的组件为nova-volume:以Rest API的形式提供服务 2.cinder目标: 减少nova的复杂性,降低nova的负载,支持多 ...
- React Native-目前最火的前端技术?
做为一名产品经理,你是否遇到过这样的窘境,“帮我把字体调成 16号呗,颜色变成 #FFFF00FF,老大说这里最好改一下”,作为一名 app 的开发只能无奈但心里窃喜的告诉你,“只能等下个版本了,必须 ...
- [Swust OJ 767]--将军回家(Dijkstra算法)
题目链接:http://acm.swust.edu.cn/problem/767/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )
直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...
- Zend Studio 如何配置本地apache服务器使用xdebug调试php脚本
本地环境搭配: apache 2.2 安装位置:D:/program files/Apache Software Foundation/Apache2.2 php 5.2.10 安装位置:C:/php ...
- seajs + easyui [转]
* *content seajs+easyui使用 */ /** * 首先来看看在seajs中jquery和jquery插件如何使用 */ 1.jquery.js define(function(re ...
- 设计模式总结5--命令模式 commend pattern
命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象.就像我们去餐厅,点菜是找服务员,然后服务员去让厨师做菜而不是我们直接找厨师做菜 public interface Commend { ...
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...
- 为了肾六(dp)
为了肾六 时间限制:4000 ms | 内存限制:210535 KB 难度:2 描述 最近肾六很流行,goshawk看身边的朋友都用上了apple.自己还用着W年前的Samsung.于是决定去 ...
- UVA 1160 - X-Plosives 即LA3644 并查集判断是否存在环
X-Plosives A secret service developed a new kind ofexplosive that attain its volatile property only ...