反向代理的缓存及buffer
一、代理缓存设置
(1)定义缓存在http{}加入:
Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http
例如:
proxy_cache_path /cache/nginx/ levels=1:2:3 keys_zone=cpe:32m inactive=20m;
#缓存路径,几级子目录,每级子目录多少字段,缓存名字,缓存空间大小
(2)使用缓存(缓存可以定义多组,需要的时候可以调用一个或者多个)
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
例如:
proxy_cache cpe;
#使用cpe缓存
(3)缓存的方法设置
Syntax: proxy_cache_methods GET | HEAD | POST …;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
例如:
proxy_cache_methods GET HEAD;
#缓存方法为GET HEAD的;
(4)被请求多少次才会被缓存
Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location
例如:
proxy_cache_min_uses 1;
#请求最小一次就缓存;
(5)删除缓存proxy_cache_purge
(6)proxy_cache_revalidate:缓存到起后是否重新检验
Syntax: proxy_cache_revalidate on | off;
Default: proxy_cache_revalidate off;
Context: http, server, location
proxy_cache_revalidate on;
#缓存到期后重新检查后,重新启用;
(7)缓存过期后,无法连接后端,是否使用过期的缓存,如何使用
Syntax: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off …;
Default: proxy_cache_use_stale off;
Context: http, server, location
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_403 http_404;
#为下面情况,可以使用过期缓存
(8)按时间定义不同缓存的相应码的
Syntax: proxy_cache_valid [code …] time;
Default: —
Context: http, server, location
例如:
proxy_cache_valid 200 302 10m;
#缓存状态码为:200 302 10分钟;
proxy_cache_valid 301 1h;
#缓存状态码为:301的一小时;
proxy_cache_valid any 1m;
#缓存其它的1分钟;
(9)缓存配置案例
(1)创建缓存文件夹
# mkdir -pv /cache/nginx/
# chown -R nginx:nginx /cache/nginx/
(2)编辑配置文件在httpd段加入
# vim nginx.conf
proxy_cache_path /cache/nginx/ levels=1:2:3 keys_zone=cpe:32m inactive=20m;
#缓存路径,几级子目录,每级子目录多少字段,缓存名字,缓存空间大小
(3)在location中使用缓存,编辑配置文件server.conf在location段中加入使用缓存配置
# vim /etc/nginx/conf.d/server.conf
proxy_cache cpe;
#使用cpe缓存
(4)缓存优化配置,编辑配置文件server.conf在location段中加入使用缓存配置;
# vim /etc/nginx/conf.d/server.conf
proxy_cache_valid 200 302 10m;
#缓存状态码为:200 302 10分钟;
proxy_cache_valid 301 1h;
#缓存状态码为:301的一小时;
proxy_cache_valid any 1m;
#缓存其它的1分钟;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_403 http_404;
#为下面情况,可以使用过期缓存。
proxy_cache_revalidate on;
#缓存到期后重新检查后,重新启用;
proxy_cache_min_uses 1;
#请求最小一次就缓存;
proxy_cache_methods GET HEAD;
#缓存方法为GET HEAD的;
二、代理buffer相关配置
(1)proxy_buffering 启用或禁用缓存代理服务器的响应。
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
proxy_buffering启用的时候,代理nginx服务收到上游服务器的响应,将立即被放入缓冲里(由the proxy_buffer_size 和 proxy_buffers 定义)。如果整个缓冲无法完全放入缓冲区里,一部分将被存到磁盘的临时文件中(由proxy_max_temp_file_size和 proxy_temp_file_write_size定义)。
proxy_buffering关闭的时候,nginx将立即传递相应给客户端。nginx将不试图读取整个响应了。nginx最大每次从服务器收到的数据大小由proxy_buffer_size指定。
proxy_buffering也可以通过从响应报文header:”X-Accel-Buffering” 传递”yes” or “no” 启用或者关闭。 也可以被proxy_ignore_headers参数忽略掉。
(2)proxy_buffer_size 从代理后端服务器取得的第一部分的响应内容大小;
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里小的响应header通常位于这部分响应内容里边.默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.
(3)proxy_buffers 设定每个连接的缓冲数量以及大小。
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
默认情况等于内存窗口大小4k或者8k,基于平台配置。
(4)proxy_busy_buffers_size
Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k;
Context: http, server, location
(5)典型配置
编辑配置文件在http{}加入:
# vim nginx.conf
proxy_buffer_size 8k;
#代理首部缓冲大小
proxy_buffers 4 128k;
#单个连接缓冲大小
proxy_busy_buffers_size 256k;
#忙时缓冲大小
proxy_temp_file_write_size 256k;
#临时文件大小
proxy_max_temp_file_size 128m;
#最大临时文件大小