目录
- 概述
- nginx缓存配置(未使用代理的)
- 解决nginx反向代理缓存不起作用的问题
- 反向代理缓存完整配置
- nginx开启gzip
- php7进阶到架构师相关阅读
概述
这是关于php进阶到架构之Nginx进阶学习的第六篇文章:nginx缓存以及gzip配置
- 第一篇:5分钟搞懂nginx的location匹配规则
- 第二篇:nginx rewrite规则详解
- 第三篇:5分钟上手nginx分流实战
- 第四篇:Nginx跨域配置
- 第五篇:深入理解浏览器缓存
- 第六篇:nginx缓存以及gzip配置
nginx缓存配置(未使用代理的)
nginx配置缓存的优点:
可以在一定程度上,减少服务器的处理请求压力。比如对一些图片,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层加的。基本配置代码如下:
# 开启gzip
gzip 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.cwhello.com/114288.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除