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日志并进行多维度分析。
相关文章
|
1月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
81 1
|
1月前
|
缓存 NoSQL 数据库
高性能Web服务器架构设计
【8月更文第28天】在当今互联网时代,网站的响应速度直接影响用户体验和业务成功率。因此,构建一个高性能的Web服务器架构至关重要。本文将从硬件配置、软件架构以及网络设置三个方面探讨如何提高Web服务器的性能,并提供一些实际的代码示例。
74 0
|
27天前
|
XML 存储 缓存
Squid 缓存服务器配置
Squid 缓存服务器配置
37 0
|
28天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
65 0
|
28天前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
30 0
|
28天前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
37 0
|
30天前
|
JavaScript 前端开发 UED
服务器端渲染新浪潮:用Vue.js和Nuxt.js构建高性能Web应用
【8月更文挑战第30天】在现代Web开发中,提升应用性能和SEO友好性是前端开发者面临的挑战。服务器端渲染(SSR)能加快页面加载速度并改善搜索引擎优化。Vue.js结合Nuxt.js提供了一个高效框架来创建SSR应用。通过安装`create-nuxt-app`,可以轻松创建新的Nuxt.js项目,并利用其自动路由功能简化页面管理。Nuxt.js默认采用SSR模式,并支持通过`asyncData`方法预取数据,同时提供了静态站点生成和服务器端渲染的部署选项,显著提升用户体验。
51 0
|
1月前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
25 0
|
16天前
|
数据可视化 图形学 UED
只需四步,轻松开发三维模型Web应用
为了让用户更方便地应用三维模型,阿里云DataV提供了一套完整的三维模型Web模型开发方案,包括三维模型托管、应用开发、交互开发、应用分发等完整功能。只需69.3元/年,就能体验三维模型Web应用开发功能!
39 8
只需四步,轻松开发三维模型Web应用
|
6天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
29 6