Nginx作为Web缓存服务器应用案例
内容介绍
一、location应用实例
二、location实现访问控制
三、URL重写应用实例
四、Nginx作为Web缓存服务器应用案例
一、location应用实例
最高优先级“=”、第二“^~/”、第三“~*\”、默认级“location /”
location匹配规则优先级:
location P/(I[ configA]}
location A~ /images/ {[ configC ]
location ~*\.(gifljpglipeglswf)S{
location^~/images/{
[configC]
}
location~*\.(gifljpgljpeglswf)${
[configD]
location/{
[configB]
}
例如:
access_log logs/host.access.log main;
location/a {
alias/usr/local/nginx/html/images/;
}
location/f{
root /usr/local/nginx/html/images/;
location=/ {
proxy_passhttp://192.168.81.236:8080/;
}
location/ {
rookt /usr/local/nginx/html;
Index index.htmlindex.htm;
}
当发现:failed(失败),加载动态资源找不到。
解决办法:
找日志,看相关的error日志,可以把error调到最高级别
[ root@localhost f ]# ls
iivey.png index. Html
[ root@localhost f]# cd
[ root@localhost images]#1s
56a64966N7ed76ac3. Jpg f wK i Om1NUhYXT ik 7AAAMWMryyZ_ C 708. j pg
[ root@localhost images]#cd
[ root@localhost htm1]# 1s
50x. html images index.html info.php test
[ root@localhost htm1]# cd
[ root@loca lhost nginx]# 1s
cl ient body_ temp conf fastcgi temp html logs proxy_ temp sbin scgi_ temp uwsgi temp
[ root@loca lhost nginx]# cd logs
[ root@localhost logs ]# ls
| access. log error. log host.access. log nginx.pid taob.access. log taobao.access. log
查看某个文件不存在,错位原因在加载某些资源找不到。
办法:把文件拷到路径上
[ root@localhost logs]#cd ..
1[root@localhost nginx]ls
client_body_tempconffastcgi_temphtmllogsproxy_tempsbin scgi
[ root@localhost nginx]#cd html/
[ root@localhost html]#ls
5ox.htmlimagesindex.htmlinfo.phptest
[root@localhosthtml]#cp/usr/local/tomcat-7.0.68/webapps/ROOT/tomcattomcat.csstomcat.giftomcat.png
[root@localhosthtml]#cp/usr/local/tomcat-7.0.68/webapps/RoOT/tomcat*
[ root@localhost htm1]#ls tomcat.giftomcat-power.gif
imagesinfo.phptomcat.csstomcat.png tomcat.svg
[rootlocalhost html]#
默认格式:
log_format main
‘$remote_addr - $remote_user[$time_local] "$request" '
‘$status $body_bytes_sent"$http_x_referer"
‘"$http_user_agent" "$http_x_forwarded_for"';
使用日志,将默认状态打开,便于调试,也便于试错。
二、location实现访问控制
介绍“=”,指定方式通过ID方式
location/{
Deny 192.168.66.80;
Allow 192.168.66.0/24;
Allow 192.16.88.0/16;
Deny all;
}
location~^/(WEB-INF)/{
deny all;
}
常用方式就是使用IP方式或者IP段的方式使用。
三、URL重写应用实例
可以和日志对比来看
正则表达式匹配:
~表示区分大小写匹配
~*表示不区分大小写匹配
!~和!~*分别表示区分大小写不匹配及不区分大小写不匹配
文件及目录匹配:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和1-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
在Nginx配置文件中,有很多内置变量,这些变量经常和if指令一起使用。常见的内置变量有如下几种:
$args,此变量与请求行中的参数相等
$document_root,此变量等同于当前请求的root指令指定的值
$uri,此变量等同于当前request中的URI.
$document_uri, 此变量与$uri含义一样。
$Shost,此变量与请求头部中“Host"行指定的值一致。
$limit_rate,此变量用来设置限制连接的速率。
$request_method,此变量等同于request的method,通常是“GET”或“POST”。$remote_addr,此变量表示客户端IP地址。
$remote_port,此变量表示客户端端口。
$remote_user,此变量等同于用户名,ngx_http_auth_basic_module来认证。
$request_filename,此变量表示当前请求的文件的路径名,由root或alias和URIrequest组合而成。
$request_uri,此变量表示含有参数的完整的初始URI。
$queny_string.此变量与$args含义一致。
(1)301重定向技术:
Server{
Listen 80;
server_namewww.taobao.com;
#charsetkoi8-r;
access_log logs/taobao.access.log main;
rewrite^/(.*)$ http://www.taob.com/S1 permanent;
(2)if指令应用实战
语法:if(condition){...}
默认值:none
使用字段:server,location
例子:
server{
listen 80;
server_namewww.tb.com;
access_log logs/host.access.logmain;
location/{
root /var/www/html;
indexindex.htmlindex.htm;
}
location~*\.(gif|jpg|jpeg|png|bmp|swf|html|css|js)$ {
root /usr/local/nginx/www/img;
}
if(!-f$request_filename)
{
root /apps/images;
}
}
lbcation~*\.(jsp)${
root /webdata/webapp/www/ROOT;
if(!-f$request_filename)
{
root /usr/local/nginx/www/jsp;
}
proxy_pass http://127.0.0.1:8888;
}
}
大概介绍:
定义一个server,首先定义一个端口,端口是80,server name就是接跟着的一个域名,access log 就是指定访问的一个虚拟日志, main为日志的一个关键字,定义location,定义完成之后,第一个命令意思是要查找相关的一些图片时,要去相应目录中寻找,找不到依次下一路径寻找,这为静、动态路径寻找,还有静态路径。
(3)rewrite指令实战
语法:rewrite regexflag
默认值:none
使用字段:server,location,if
location~^/best/{
rewrite^/best/(.*)$/test/$1 break;
proxy_pass http://www.taob.com;
}
访问best时,会显示proxy_pass。
用做跳转、域名不改变、隐藏某些文件等
当用户访问www.taobao.com应用best,他都会调度到www.taob.com下的test目录中。
四、Nginx作为Web缓存服务器应用案例
从http:/labs.frickle.com/nginx_ngx_cache_purg/下载ngx_cache_purge插件,下载的文件ngx_cache_purge_2.1.tar.gz,然后进行解压即可,过程如下:
[root@ngxserver app]#wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
[root@ngxserver app]#tar zxvf -C/app/ngx_cache_purge-2.1.tar.gz
接着,开始编译安装Nginx,过程如下:
[root@ngxserver app]#tar zxvf nginx-1.4.7.tar.gz
[root@ngxserver app]#cd nginx-1.4.7/
[root@ngxserver app]#./configure--user=www--group=www --prefix=/usr/local/nginx\
>--add-module=/app/ngx_cache_purge-2.1
>--with-http_stub_status_module--with-http_ssl_module
[root@ngxserver app]#make
[root@ngxserver app]#make install
完成安装后,可以通过“/usr/ocal/nginx/sbin/nginx -v"命令查看已安装的Nginx的版本和加载的模块信息。
proxy_cache_path
/backup/proxy_cache_dir
levels=1:2
keys_zone=cache_one:4096m
inactive=1d max_size=3g
proxy cache path缓存的路径、目录
#gzip on;
Proxy -cache path/backup/proxy-cache-dir levels=1:2 kevs zone=cache one:4096m inactive=1d max_sproxy cache,path/backup/ proxy _cacr
proxy temp path /backup/proxy_temp_dir;
server {
listen 8o;
server namewww .iivey.com;
#charset koi8-r;
若服务器有多个磁盘,做好是保证proxy_cache_path和缓存目录在一个路径上
另一个配置
location / {
proxy cachecache_ one;
proxy_cache_valid 2d304 12h;
proxy_cache_key $host$uri$is_args$args;
proxy_set_ header Host$host;
proxy_set_header X-Forwarded-For$remote_addr;
proxy pass http:/l127.0.0.1: 8080;
expires1d;
root/usr/ local/tomcat-7.0.68/webapps/ROOT;
indexindex.html index.htm;
}
location ~ / purge(/.*)
{
Allow 127.0.0.1;
首先通过proxy-cache做一个引用,引用的cache -one就是刚刚引用的一个cache的名称,cache valid就是对什么进行缓存以及缓存的时间,proxy key就是对哈希算法的一个补偿
leves缓存的等级和方式用“:”来分级
proxy_cache_path:用于设置缓存的目录,后面跟缓存路径。最好将缓存目录放在一个独立的硬盘上。
levels=1:2: levels用来设置目录深度,这里是两层目录深度,第一层是一个字符,第二层#是两个字符。
keys_zone:用来设置web缓存区名称,这里是cache_one,后面的”4096m“表示内存缓存空间大小为4G。
inactive:表示自动清除缓存文件的时间,”1d“表示1天没有被访问的内容自动清除,还可以使用分钟或小时计时,例:”5m“表示5分钟后自动清除,”5h“表示5小时后自动清除。
max_size:表示硬盘缓存空间可使用的最大值,默认情况下经常访问的文件将被放到内存中进行缓存,而在内存缓存空间不足时,nginx会将不经常访问的数据从内存写到磁盘
proxy_temp_path用于指定临时缓存文件的存储路径,这里需要注意的是,proxy_temp_path和proxy_cache_path指定的路径必须在同一磁盘分区
server{
Listen 80;
server_name www.tb.comwww.taob.com;
Charset UTF8;
access_log logs/cms.access.log main;
location/ {
proxy_cache cache_one;
反向代理缓存设置指令,语法为"proxy_cache zone off ,默认值为off,需要将proxy_ cache指令放到location字段,这样匹配此location的url才能被缓存
proxy_cache_valid 200 304 12h;#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_key $host$uri$is_args$args;#这个指令是设置以什么样的参数得
到缓存的文件名,默认:“$scheme$proxy_host$request_uri”,表示以协议、主机名、请求
uri(包含参数)作md5得出缓存的文件名。这是以域名、URI、参数组合成web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
expires 1d;超时的时间。
}
下面这段用于配置手动清除缓存策略,清除的方法为:
如果一个URL为http://www.tb.com/2014/0413/3.html,通过访问
http://www.tb.com/purge/2014/0413/3.html即可清除该URL的缓存
location~/purge(/.*)
{
allow 127.0.0.1;
#表示只允许指定的IP或段才可以清除URL缓存。
allow 192.168.88.0/24;
location~.*\.(jsp|php|jspx)?$ #设置不做缓存的内容,设扩展
名
以.jsp、.php、.jspx结尾的动态应用程序不缓存
{
proxy_set_headerHost $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
access_log off;
}
}
清除也可以进行限制,proxy-cache-purge可以指定清除的缓存。
缓存后不会更新。
如何清空缓存:保持前缀,返回原状后刷新页面,多用在:静态资源。
Nginx数据缓存
常用方法:把硬盘的读取换到内存里
如何知道清除缓存,访问www.iivey.com,打开页面
access_loglogs/ host.access.logmain;
[ root@localhost conf]# cd /backup/ proxy
proxy_cache dir/ proxy_temp_dir/
[root@localhost conf]it cd /backup/proxy_cache_dir/[ root@localhost proxy_cache dir]#1l
total 32
drwx------ 3 nobody nobody 4096 Mar 10 16:37 3drwx------ 4 nobody nobody 4096 Mar 10 16:37 4
drwx------ 4 nobody nobody 4096 Mar 10 16:38 5
drwx------ 3 nobody nobody 4096 Mar 10 16:37 6
drwx------ 3 nobody nobody 4096 Mar 10 16:37 bdrwx------ 3 nobody nobody 4096 Mar 10 16:37 c
drwx------ 3 nobody nobody 4096 Mar 10 22:02 d
drwx------ 3 nobody nobody 4096 Mar 1016:37 f
[ root@localhost proxy_cache_ dir] cd d
[ root@localhost d]ls
26
[root@localhost d]#t cd 26
[root@localhost 26]#ll
total 24
-rw------- 1 nobody nobody 22058 Mar 10 22:02 948d32a7e2a
-rw------- 1 nobody nobody 22058 Mar 10 22:02 948d32a7e2ac38460885c245[root@localhost 26]# cd /usr/ local/tomcat-7.0.68/webapps/
[root@localhost webapps]#ls
admindocsexampleshost-manager
[root@localhost webapps]# cd ROOT/
[ root@localhost ROOT]#ls
[root@localhost ROOT]#t cd ..
[root@localhost webapps]#ls
admindocsexampleshost-manager managerROOTwapweb
[root@localhost webapps]# cd web
[ root@localhost web]#ls
index.jsp
[ root@localhost web]# c d..
-bash: c: command not found
[ root@localhost web] ls
index.jsp
[rootlocalhost web]t cd
[ root@localhost web]# cd
[ root@localhost webapps ]# ls
admin docs examples host - manager manager ROOT wap web
[ root@loca lhost webapps]# cd wap
[ root@localhost wap]# ls
index. Jsp
[ root@localhost wap]# cd
[ root@localhost webapps ] # 1s
admin docs examp les host- manager manager ROOT wap web
[root@loca lhost webapps ]# cd ROOT /
[ root@localhost ROOT ]# 1s
打开文件,之后修改文件内容,证明文件能够被缓存
[ root@localhost ROOT ]#cd /backup/proxy-cache-dir/
[ root@localhost proxy-cache-dir]#11