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

简介: 快速学习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日志并进行多维度分析。
相关文章
|
16天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
27天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
116 1
|
1月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
407 3
|
1月前
|
前端开发 数据库 UED
构建高性能Web应用的关键技术
本文将介绍构建高性能Web应用的关键技术,包括前端优化、后端优化、数据库优化等方面。通过深入讨论各项技术的原理和实践方法,帮助开发者们提升Web应用的响应速度和用户体验。
|
30天前
|
前端开发 应用服务中间件 nginx
使用Docker快速搭建Web服务器Nginx
本文指导如何使用Docker快速搭建Nginx服务器。首先,通过`docker pull`命令获取Nginx镜像,然后以容器形式运行Nginx并映射端口。通过挂载目录实现本地文件与容器共享,便于自定义网页。使用`docker ps`检查运行状态,访问IP:8088确认部署成功。最后,介绍了停止、删除Nginx容器的命令,强调Docker简化了服务器部署和管理。
49 0
|
8天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
12 1
|
8天前
|
缓存 监控 数据库
Flask性能优化:打造高性能Web应用
【4月更文挑战第16天】本文介绍了提升Flask应用性能的七大策略:优化代码逻辑,减少数据库查询,使用WSGI服务器(如Gunicorn、uWSGI),启用缓存(如Flask-Caching),优化数据库操作,采用异步处理与并发(如Celery、Sanic),以及持续监控与调优。通过这些手段,开发者能有效优化Flask应用,适应大型或高并发场景,打造高性能的Web服务。
|
10天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
13天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
22天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。