游戏咨询网站建设目标是什么,网站各个级别建设费用,怎么做网站版面分析,做网站培训1 nginx缓存的流程 客户端需要访问服务器的数据时#xff0c;如果都直接向服务器发送请求#xff0c;服务器接收过多的请求#xff0c;压力会比较大#xff0c;也比较耗时#xff1b;而如果在nginx缓存一定的数据#xff0c;使客户端向基于nginx的代理服务器发送请求如果都直接向服务器发送请求服务器接收过多的请求压力会比较大也比较耗时而如果在nginx缓存一定的数据使客户端向基于nginx的代理服务器发送请求可以有效节省时间。 如图所示基于nginx缓存客户端访问的流程是客户端向nginx发送请求url。nginx检查自身缓存目录里有无要访问的数据如果有则将缓存的数据发送给客户端。如果没有则nginx向服务器发送请求向服务器请求数据服务器将数据发送给nginx后nginx自身缓存的同时将数据转发给客户端。那么下一次有客户端有相同的数据请求时就可以像有的情况一样直接由nginx发送给客户端。
2 必备基础知识
2.1 listen和server_name
用户请求发来之后同server{}下的listen和server_name进行匹配如果匹配成功那么将请求交给当前server里的location块来处理。 这里的listen和server_name自然是nginx所在服务器的端口和地址。如果nginx部署在内网服务器虽然客户端发送请求的是外部地址和端口但是这里还是要设置成内网的地址。
2.2 location块
2.2.1基本配置
server块可以同时配置多个location
server{listen port;server_name localhost;location /{}location /abc{}...
}location:用来设置请求的URI
2.2.2 匹配
uri变量是待匹配的请求字符串可以不包含正则表达式也可以包含正则表达式那么nginx服务器在搜索匹配location的时候是先使用不包含正则表达式进行匹配找到匹配度最高的一个然后在通过包含正则表达式的进行匹配如果能匹配到直接访问匹配不到就使用刚才匹配度最高的那个location来处理请求。 用于不包含正则表达式的uri前必须与指定的模式精确匹配
/只要以ip:port/abc开头的全部都能访问
location /abc{}location /abc{}
# 精确匹配
# ip:port/abc、ip:port/abc?p1TOM可以匹配
# ip:port/abcd不能匹配~:正则匹配
location ~/abc{}root
location /abc{root html;# root为资源存放的目录inedx index.html;}2.2.3 地址匹配优先级
location / { } 因为所有的地址都以 / 开头所以这条规则将匹配到所有请求 比如访问 / 和 /abc, 则 / 匹配 /abc 也匹配\n但后面前缀路径会和最长字符串优先匹配最长匹配 location /abc/ { } 匹配任何以 /abc/ 开头的地址匹配符合以后还要继续往下搜索其它 location只有其它 location后面的前缀路径没有匹配到时才会采用这一条 location /abc/def { } 匹配任何以 /abc/def 开头的地址匹配符合以后还要继续往下搜索其它 location只有其它 location后面的前缀路径没有匹配到时才会采用这一条。 因此匹配优先级精准一般/ 都是一般的情况下哪个location后跟的地址长度长哪个优先级高比如 location /abc/def {}location /abc {}location / {}
3 指令解析
3.1 proxy_cache_path指令
3.1.1 语法
proxy_cache_path path [levelsa:b:c] keys_zonezone_name:zone_size [inactivetime] [max_sizesizes]path可以是/usr/local/proxy_cache
3.1.2 levels
levels可以将字符串密文与缓存目录进行结合指定缓存空间对应的目录最多可以设置三层每层取值为1或2 levels1:2 缓存空间有两层目录一层是1个字母二层是2个字母 如果字符串密文为dsciwbdciow87y8hwdh29 那么levels1:2最终的存储目录为/usr/local/proxy_cache/9/h2
3.1.3 keys_zone
可以指定缓存区的名称与大小 keys_zoneimpar:300m 缓存区名称为impar大小为300m.
3.1.4 inactive
指定缓存的数据多久未被访问会被删除的时间 inactive 2d 2d表示2天
3.1.5 max_size
设置最大的缓存空间如果缓存空间存满会覆盖目前缓存时间最长的数据 max_size10g
3.1.6 配置位置
http中server外
3.3 proxy_cache
该指令用来开启或关闭缓存如果是开启则自定使用哪个缓存区来缓存 开启
proxy_cache zone_name关闭
proxy_cache off位置http、server、location里
3.4 proxy_cache_key
该指令用来设置web缓存中的key值nginx会根据key值的MD5进行哈希缓存 位置同上
3.5 proxy_cache_valid
该指令用来对不同返回状态码的URL设置不同的缓存时间 位置同上
proxy_cache_valid 404 1m;
proxy_cache_valid 202 302 1m;
proxy_cache_valid any 1m;1该设置从上到下进行如果在上面的步骤中被设置如404202302就不会更改最后的any只能设置除404202302以外的状态。 2nginx缓存代理中常有情况nginx尚未缓存某数据但是客户端发出请求该数据的信息nginx往往只能先回复404。但是稍后nginx从服务器请求到了该数据后客户端再请求该数据那按照原理必然要返回该数据而不是404。因此之前请求对应的返回状态码应该有一个“限定有效的时间”。这就需要靠proxy_cache_valid来设置了。
3.6 proxy_cache_min_uses
该指令用来设置资源被访问多少次后会被缓存
proxy_cache_min_uses number位置同上
3.7 proxy_cache_methods
该指令用户设置缓存哪些http方法
proxy_cache_methods methodmethod可选方式为GET, HEAD, POST. 默认方式为GET, HEAD。 位置同上。
4 add_header 可选项
1下面的可选项不是必须的只是方便在测试的时候查看是否命中缓存
add_header nginx-cache $upstream_cache_status;效果 2add_header Access-Control-Allow-Methods 明确了客户端所要访问的资源允许使用的方法或方法列表可以是GET,OPTIONS,POST,HEAD,PUT,DELETE
3add_header Accept-Ranges 此字段的值表示可用于定义范围的单位可以是bytes
4add_header Access-Control-Allow-Origin *; 表示服务器可以接受所有的请求源Origin,即接受所有跨域的请求。
5add_header Access-Control-Allow-Headers 可支持的请求首部名字。请求头会列出所有支持的首部列表用逗号隔开。 示例
add_header Access-Control-Allow-Headers *;注意以下这些特定的首部是一直允许的Accept, Accept-Language, Content-Language, Content-Type这些被称作simple headers无需特意声明它们。
参考
[1]nginx教程nginx教程 [2]Access-Control-Allow-HeadersAccess-Control-Allow-Headers [3]Access-Control-Allow-Origin [4]Accept-Ranges [5]NGINX缓存详解二之服务端缓存