开发者学堂课程【企业Web常用架构LAMP-LNMP实战:Nginx作为Web缓存服务器应用案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/385/detail/4835
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;
}
输入www.iivey.com
当发现:failed(失败),加载动态资源找不到。
解决办法:
找日志,看相关的 error 日志,可以把 error 调到最高级别
[ root@localhost f ]# ls
i
ivey.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/{
D
eny
192.168.66.80;
A
llow
192.168.66.0/24;
A
llow
192.16.88.0/16;
D
eny
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, 此变量等同于当前 reques 中的 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,iflocation~^/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.com www.taob.com;
C
harset
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]# c
d
[ 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