Nginx作为Web缓存服务器应用案例| 学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习Nginx作为Web缓存服务器应用案例。

开发者学堂课程【企业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

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

-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,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:2keys_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;

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8天前
|
缓存 监控 定位技术
|
3月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
301 1
|
1月前
|
存储 缓存 监控
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
53 3
|
1月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
62 4
|
1月前
|
存储 缓存 NoSQL
Nginx缓存
Nginx缓存
26 1
|
1月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
144 0
|
27天前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
99 0
|
1月前
|
存储 缓存 NoSQL
构建高性能Web应用:缓存的重要性及其实现
构建高性能Web应用:缓存的重要性及其实现
|
3月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
下一篇
无影云桌面