一、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缓存服务器动态文件