一、nginx 缓存的长处
如图所示,nginx 缓存,能够在肯定水平上,缩小源服务器的解决申请压力。因为动态文件(比方 css,js,图片)中,很多都是不常常更新的。nginx 应用 proxy_cache 将用户的申请缓存到本地一个目录。下一个雷同申请能够间接调取缓存文件,就不必去申请服务器了。毕竟,IO 密集型服务的解决是 nginx 的强项。
二、如何进行设置
先上个栗子:
http{
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
server {
listen 80 default_server;
server_name localhost;
root /mnt/blog/;
location / { }
#要缓存文件的后缀,能够在以下设置。location ~ .*.(gif|jpg|png|css|js)(.*) {
proxy_pass http://ip 地址:90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
add_header wall "hey!guys!give me a star.";
}
}
# 无 nginx 缓存的 blog 端口
server {
listen 90;
server_name localhost;
root /mnt/blog/;
location / {}}
}
复制代码
因为我是 在一台服务器上做试验 (敲重点,做试验),所以用了两个端口80
和90
进行模仿两台服务器之间的交互。
80
端口对接的是一般的域名(http://wangxiaokai.vip
)拜访。90
端口负责解决80
端口代理过去的资源拜访。
相当于90
端口是源服务器,80
端口是 nginx 反向缓存代理服务器。
接下来讲一下配置项:
2.1 http 层设置
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
复制代码
- proxy_connect_timeout
服务器连贯的超时工夫
- proxy_read_timeout
连贯胜利后, 等待后端服务器响应工夫
- proxy_send_timeout
后端服务器数据回传工夫
- proxy_buffer_size
缓冲区的大小
- proxy_buffers
每个连贯设置缓冲区的数量为 number,每块缓冲区的大小为 size
- proxy_busy_buffers_size
开启缓冲响应的性能当前,在没有读到全副响应的状况下,写缓冲达到肯定大小时,nginx 肯定会向客户端发送响应,直到缓冲小于此值。
- proxy_temp_file_write_size
设置 nginx 每次写数据到临时文件的 size(大小)限度
- proxy_temp_path
从后端服务器接管的临时文件的寄存门路
- proxy_cache_path
设置缓存的门路和其余参数。被缓存的数据如果在 inactive 参数(以后为 1 天)指定的工夫内未被拜访,就会被从缓存中移除
2.2 server 层设置
2.2.1 反向缓存代理服务器
server {
listen 80 default_server;
server_name localhost;
root /mnt/blog/;
location / { }
#要缓存文件的后缀,能够在以下设置。location ~ .*.(gif|jpg|png|css|js)(.*) {
proxy_pass http://ip 地址:90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
add_header wall "hey!guys!give me a star.";
}
}
复制代码
- proxy_pass
nginx 缓存里拿不到资源,向该地址转发申请,拿到新的资源,并进行缓存
- proxy_redirect
设置后端服务器“Location”响应头和“Refresh”响应头的替换文本
- proxy_set_header
容许从新定义或者增加发往后端服务器的申请头
- proxy_cache
指定用于页面缓存的共享内存,对应 http 层设置的 keys_zone
- proxy_cache_valid
为不同的响应状态码设置不同的缓存工夫
- expires
缓存工夫
-
- *
这里我设置了 图片
、css
、js
动态资源进行缓存。当用户输出 http://wangxiaokai.vip
域名时,解析失去 ip:port
的拜访地址。port
默认为 80。所以页面申请会被以后 server 截取到,进行申请解决。当解析到上述文件名结尾的动态资源,会到缓存区获取动态资源。如果获取到对应资源,则间接返回数据。如果获取不到,则将申请转发给 proxy_pass
指向的地址进行解决。
2.2.2 源服务器
server {
listen 90;
server_name localhost;
root /mnt/blog/;
location / {}}
复制代码
这里间接解决 90
端口承受到的申请,到服务器本地目录 /mnt/blog
下抓取资源进行响应。
三、如何验证缓存是否无效
仔细的读者应该发现,我在第二段的栗子里,留了个彩蛋 add_header wall "hey!guys!give me a star."
。add_header
是用于在报头设置自定义的信息。所以,如果缓存无效的话,那么动态资源返回的报头,肯定会带上这个信息。
拜访 http://wangxiaokai.vip
后果如下:
四、参考
[1] nginx 文档
[2] nginx 反向缓存代理详解
[3] Nginx 缓存服务器动态文件