Nginx作为Web缓存服务器应用案例

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一、location应用实例二、location实现访问控制三、URL重写应用实例四、Nginx作为Web缓存服务器应用案例

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

image.png

 

当发现: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用来判断是否存在目录

-e1-e用来判断是否存在文件或目录
-x
!-x用来判断文件是否可执行
Nginx配置文件中,有很多内置变量,这些变量经常和if指令一起使用。常见的内置变量有如下几种:
$args,
此变量与请求行中的参数相等
$document_root,
此变量等同于当前请求的root指令指定的值
$uri,
此变量等同于当前request中的URI.
$document_uri,
此变量与$uri含义一样。
$Shost,
此变量与请求头部中“Host"行指定的值一致。
$limit_rate,
此变量用来设置限制连接的速率。
$request_method,
此变量等同于requestmethod,通常是“GET”或“POST”。$remote_addr,此变量表示客户端IP地址。
$remote_port,
此变量表示客户端端口。

$remote_user,此变量等同于用户名,ngx_http_auth_basic_module来认证。
$request_filename,
此变量表示当前请求的文件的路径名,由rootaliasURIrequest组合而成。
$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,首先定义一个端口,端口是80server name就是接跟着的一个域名,access log 就是指定访问的一个虚拟日志, main为日志的一个关键字,定义location,定义完成之后,第一个命令意思是要查找相关的一些图片时,要去相应目录中寻找,找不到依次下一路径寻找,这为静、动态路径寻找,还有静态路径。

 

3rewrite指令实战
语法: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_pathproxy_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字段,这样匹配此locationurl才能被缓存
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;超时的时间。
}
下面这段用于配置手动清除缓存策略,清除的方法为:

如果一个URLhttp://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

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
缓存 监控 定位技术
|
2月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
186 61
|
1月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
147 9
|
1月前
|
存储 编解码 应用服务中间件
使用Nginx搭建流媒体服务器
本文介绍了流媒体服务器的特性及各种流媒体传输协议的适用场景,并详细阐述了使用 nginx-http-flv-module 扩展Nginx作为流媒体服务器的详细步骤,并提供了在VLC,flv.js,hls.js下的流媒体拉流播放示例。
197 1
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
70 3
|
3月前
|
存储 缓存 监控
|
3月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
73 3
|
3月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
126 4
|
3月前
|
存储 缓存 NoSQL
Nginx缓存
Nginx缓存
34 2
|
3月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
61 3