首页 文章 正文 Nginx-缓存配置 2024-03-21 870阅读 0评论 一、概述 Nginx具有很强大的缓存功能,可以对请求的response进行缓存,起到类似CDN的作用,甚至有比CDN更强大的功能。同时,Nginx缓存还可以用来“数据托底”,即当后台web服务器挂掉的时候,Nginx可以直接将缓存中的托底数据返回给用户。此功能就是Nginx实现“服务降级”的体现。 Nginx缓存功能的配置由两部分构成:全局定义与局部定义。在http{}模块的全局部分中进行缓存全局定义,在server{}模块的各个location{}模块中根据业务需求进行缓存局部定义。 1.1 http{}模块的缓存全局定义 A、proxy_cache_path 用于指定Nginx缓存的存放路径及相关配置。 B、proxy_temp_path 指定Nginx缓存的临时存放目录。若proxy_cache_path中的use_temp_path设置为了off,则该属性可以不指定。 1.2 location{}模块的缓存局部定义 A、proxy_cache mycache 指定用于存放缓存key内存区域名称。其值为http{}模块中proxy_cache_path中的keys_zone的值。 B、proxy_cache_key $host$request_uri$arg_age 指定Nginx生成的缓存的key的组成。 C、proxy_cache_bypass $arg_age 指定是否越过缓存。 D、proxy_cache_methods GET HEAD 指定客户端请求的哪些提交方法将被缓存,默认为GET与HEAD,但不缓存POST。 E、proxy_no_cache $aaa $bbb $ccc 指定对本次请求是否不做缓存。只要有一个不为0,就不对该请求结果缓存。 F、proxy_cache_purge $ddd $eee $fff 指定是否清除缓存key。 G、proxy_cache_lock on 指定是否采用互斥方式回源。 H、proxy_cache_lock_timeout 5s 指定再次生成回源互斥锁的时限。 I、proxy_cache_valid 5s 对指定的 HTTP 状态码的响应数据进行缓存,并指定缓存时间。默认指定的状态码为200,301,302。 J、proxy_cache_use_stale http_404 http_500 设置启用托底缓存的条件。而一旦这里指定了相应的状态码,则前面proxy_cache_calid中指定的相应状态码所生成的缓存就变为了“托底缓存”。 K、expires 3m 为请求的静态资源开启浏览器端的缓存。 二、 Nginx变量 A、自定义变量 由于Nginx配置文件是perl脚本,所以其是可以使用如下方式自定义变量的。 B、内置变量 Nginx中已经内置定义了很多变量,这些变量的意义如下: $args 请求中的参数; $binary_remote_addr 远程地址的二进制表示 $body_bytes_sent 已发送的消息体字节数 $content_length HTTP请求信息里的"Content-Length" $content_type 请求信息里的"Content-Type" $document_root 针对当前请求的根路径设置值 $document_uri 与$uri相同 $host 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名; $http_cookie cookie 信息 $http_referer 来源地址 $http_user_agent 客户端代理信息 $http_via 最后一个访问服务器的Ip地址 $http_x_forwarded_for 相当于网络访问路径。 $limit_rate 对连接速率的限制 $remote_addr 客户端地址 $remote_port 客户端端口号 $remote_user 客户端用户名, $request 用户请求信息 $request_body 用户请求主体 $request_body_file 发往后端的本地文件名称 $request_filename 当前请求的文件路径名 $request_method 请求的方法,比如"GET"、"POST"等 $request_uri 请求的URI,带参数 $server_addr 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费) $server_name 请求到达的服务器名 $server_port 请求到达的服务器端口号 $server_protocol 请求的协议版本,"HTTP/1.0"或"HTTP/1.1" $uri 请求的URI,可能和最初的值有不同,比如经过重定向之类的
发表评论
还没有评论,来说两句吧...