可以在一定程度上,减少做事器的处理要求压力。比如对一些图片,css或js做一些缓存,那么在每次刷新浏览器的时候,就不会重新要求了,而是从缓存里面读取。这样就可以减轻做事器的压力。
nginx可配置的缓存又有2种:
1)客户真个缓存(一样平常指浏览器的缓存),分为协商缓存和逼迫缓存,参考深入理解浏览器缓存,请参考深入理解浏览器缓存

2)做事真个缓存(利用proxy-cache实现的,实现反向代理做事器缓存)
在nginx.conf加入如下规则:
server { location ~ \.(html)$ { access_log off; add_header Cache-Control max-age=no-cache; } location ~ \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ { # 同上,通配所有以.css/.js/...结尾的要求 access_log off; add_header Cache-Control max-age=360000; }}
如上缓存配置解析含义如下:
add_header Cache-Control max-age=no-cache的含义
html文件不设置逼迫缓存韶光,协商缓存,利用 Last-Modified。no-cache 会发起来回通信来验证缓存的相应,但如果资源未发生变革,则不会下载,返回304。
add_header Cache-Control max-age=360000的含义
给上面匹配后缀的文件设置逼迫缓存,且缓存的韶光是360000秒,第一次访问的时候,从做事器要求,当除了第一次以外,再次刷新浏览器,会从浏览器缓存读取,那么逼迫缓存一样平常是从内存里面先读取,如果内存没有,再从硬盘读取。
把稳:如上只是不对反向代理的页面进行缓存设置的,但是如果是反向代理后的页面,如上设置是不生效的。比如说我php起了一个做事,然后通过访问nginx反向代理的办法代理到另一个php做事来,上面的配置是不生效的。
办理nginx反向代理缓存不起浸染的问题利用proxy-cache,配置如下:
server { listen 8081; server_name xxx.abc.com; location / { proxy_pass http://localhost:7878; add_header Cache-Control max-age=no-cache; }}
反向代理缓存起浸染配置步骤如下:
第一步:
须要创建一个用于存放缓存文件的文件夹。比如我们这里利用 /data/nuget-cache。比如利用命令:mkdir /data/nuget-cache. 创建缓存目录
第二步:
须要在nginx.conf的http设置部分添加 proxy_cache_path的设置,如下:
http { // ..... 其他的配置 proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h; server { listen 8081; server_name xxx.abc.com; location / { proxy_pass http://localhost:7878; add_header Cache-Control max-age=no-cache; } }}
proxy_cache_path各个配置值的含义解析如下:
proxy_cache_path:指缓存的目录,目录为:/data/nuget-cache。
levels=1:2表示采取2级目录构造;
keys_zone指的是缓存空间名称,叫nuget-cache。缓存内存的空间为20M。
max_size指的是缓存文件可以占用的最大空间为50G.
inactive=168h;默认过期韶光为168个小时,为7天,也可以写成:inactive=7d;
第三步:
我们还须要在server设置部分添加 proxy_cache 与 proxy_cache_valid的设置。如下代码:
http { // ..... 其他的配置 proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h; server { listen 8081; server_name xxx.abc.com; location / { proxy_pass http://localhost:7878; add_header Cache-Control max-age=no-cache; proxy_cache nuget-cache; proxy_cache_valid 168h; } }}
proxy_cache设置的是 proxy_cache_path中的keys_zone的值。
proxy_cache_valid:设置的是缓存过期韶光,比如设置168个小时过期。
第四步(末了一步):
须要在server中再加上如下代码:
proxy_ignore_headers Set-Cookie Cache-Control;proxy_hide_header Cache-Control;proxy_hide_header Set-Cookie;
proxy_ignore_headers的含义是:忽略Cache-Control的要求头掌握,依然进行缓存,
比如对要求头设置cookie后,默认是不缓存的,须要我们增加忽略配置。
反向代理缓存完全配置
http { // ..... 其他的配置 proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h; server { listen 8081; server_name xxx.abc.com; location / { proxy_pass http://localhost:7878; add_header Cache-Control max-age=no-cache; proxy_cache nuget-cache; proxy_cache_valid 168h; proxy_ignore_headers Set-Cookie Cache-Control; proxy_hide_header Cache-Control; proxy_hide_header Set-Cookie; } }}
nginx开启gzip开启gzip配置是在http层加的。基本配置代码如下:
php7进阶到架构师干系阅读
# 开启gzipgzip on;# 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩gzip_min_length 1k;# gzip 压缩级别 1-10 gzip_comp_level 2;# 进行压缩的文件类型。gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 是否在http header中添加Vary: Accept-Encoding,建议开启gzip_vary on;
https://www.kancloud.cn/gofor/gofor
末了,欢迎大家留言补充,谈论~~~