Nginx 代理缓存

官方文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path

一、设置缓存的路径和其他参数

句法: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];
默认: -
语境:http 

#path 存放缓存临时文件

#levels 缓存的层次结构级别,就按照1:2的比例就好了,两层目录级别

#keys_ zone 开辟空间名10m: 开辟空间大小, 1m可存放8000key

#max _size 控制最大缓存大小,超过后Nginx 会启用淘汰规则

#inactive 60 60分钟没有被访问的缓存会被清理(默认情况下,inactive设置为10分钟。)

#use_temp_path=off 临时文件,会影响性能,建议关闭,如果将该值设置为off,则临时文件将直接放置在缓存目录中



二、设置不同响应代码的缓存时间。

句法:	proxy_cache_valid [code ...] time;
默认:	-
内容:	http,server,location

设置不同响应代码的缓存时间。例如,以下指令

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
为代码200和302的响应设置10分钟的缓存,为代码404的响应设置1分钟。

如果仅time指定 缓存
proxy_cache_valid 5m;

另外,any可以指定参数以缓存任何响应



三、服务器响应状态码,将跳转到其他节点的web服务器

Syntax:	proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default:	proxy_next_upstream error timeout;
Context:	http, server, location

指定在哪种情况下将请求传递到下一个服务器:

error: 与服务器建立连接,向服务器传递请求或读取响应头时发生错误;
timeout: 与服务器建立连接,向服务器传递请求或读取响应标头时发生超时;
invalid_header: 服务器返回了空的或无效的响应;
http_500: 服务器返回代码为500的响应;
http_502: 服务器返回响应码为502;
http_503:服务器返回响应,代码为503;
http_504:服务器返回代码为504的响应;
http_403:服务器返回响应,代码为403;
http_404:服务器返回了代码为404的响应;
http_429:服务器返回响应,代码为429(1.11.13);
non_idempotent: 通常,具有请求 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 明确启用此选项将允许重试此类请求;
off: 禁用将请求传递到下一个服务器。

应该记住的是,只有在还没有任何内容发送给客户端的情况下,才有可能将请求传递给下一台服务器。即,如果在响应的传输过程中发生错误或超时,则无法解决该问题。

该指令还定义了与服务器通信的 不成功尝试。的情况下error,timeout并 invalid_header始终被认为不成功的尝试,即使在该指令中没有指定他们。的情况下http_500,http_502, http_503,http_504,和http_429被认为只有当他们在该指令中指定不成功的尝试。的情况下,http_403和http_404 永远不会被视为不成功的尝试。

将请求传递到下一台服务器可能受到 尝试次数 和时间的限制。



四、请求传递到下一台服务器(时间的限制)

句法:	proxy_next_upstream_timeout time;
默认:	proxy_next_upstream_timeout 0;
内容:	http,server,location
该指令出现在版本1.7.5中。

限制将请求传递到 下一个服务器的时间。该0值将关闭此限制。



五、请求传递到下一台服务器(尝试次数)

句法:	proxy_next_upstream_tries number;
默认:	proxy_next_upstream_tries 0;
内容:	http,server,location
该指令出现在版本1.7.5中。

限制将请求传递到下一个服务器的可能尝试次数 。该0值将关闭此限制。



六、代理服务器的请求标头中重新定义

句法: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
		 proxy_set_header Connection close;
内容: http, server, location

允许在传递给代理服务器的请求标头中重新定义或附加字段 。该value可以包含文本,变量,以及它们的组合。当且仅当proxy_set_header 当前级别上未定义任何指令时,这些指令才从上一级继承 。默认情况下,仅重新定义两个字段:

proxy_set_header Host    $proxy_host;   #$proxy_host——>代理服务器的名称和端口
proxy_set_header Connection close; 


七、启用或禁用代理服务器响应的缓冲。

句法:	proxy_buffering on | off;
默认:	proxy_buffering  on;
内容:	http,server,location

启用缓冲后,nginx会尽快从代理服务器收到响应,并将其保存到proxy_buffer_size和proxy_buffers指令设置的缓冲区中 。如果整个响应都无法容纳到内存中,则可以将一部分响应保存到磁盘上的临时文件中。写入临时文件由 proxy_max_temp_file_size和 proxy_temp_file_write_size指令控制。

禁用缓冲后,响应一收到就立即同步传递到客户端。nginx不会尝试从代理服务器读取整个响应。nginx一次可以从服务器接收的最大数据大小由proxy_buffer_size指令设置。



八、代理服务器响应的“位置”和“刷新”标头字段中更改的文本

句法:	proxy_redirect default;
		    proxy_redirect off;
			proxy_redirect redirect replacement;
默认:	proxy_redirect  default;
内容:	http,server,location

default参数 指定的默认替换使用 location和 proxy_pass伪指令的参数。因此,以下两个配置是等效的



九、代理服务器建立连接的超时

句法:	proxy_connect_timeout time;
默认:	proxy_connect_timeout 60秒;
内容:	http,server,location

定义用于与代理服务器建立连接的超时。请注意,此超时通常不能超过75秒。



十、代理服务器的超时

句法:	proxy_send_timeout time;
默认:	proxy_send_timeout 60秒;
内容:	http,server,location

设置用于将请求传输到代理服务器的超时。超时仅在两个连续的写操作之间设置,而不用于整个请求的传输。如果代理服务器在此时间内未收到任何信息,则连接将关闭。



十一、代理服务器超时

句法:	proxy_read_timeout time;
默认:	proxy_read_timeout 60秒;
内容:	http,server,location

定义用于从代理服务器读取响应的超时。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。如果代理服务器在此时间内未传输任何内容,则连接将关闭。



十二、代理服务器读取响应的缓冲区

句法:	proxy_buffers number size;
默认:	proxy_buffers 8 4k | 8k;
内容:	http,server,location

为单个连接 设置用于从代理服务器读取响应的缓冲区的number和size。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。



十三、代理服务器接收到的响应第一部分的缓冲区

句法:	proxy_buffer_size size;
默认:	proxy_buffer_size 4k | 8k;
内容:	http,server,location

设置size用于读取从代理服务器接收到的响应的第一部分的缓冲区的。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。但是,它可以做得更小。建议是proxy_buffers的两倍



十四、启用从代理的服务器响应,限制总size的缓冲区

句法:	proxy_busy_buffers_size size;
默认:	proxy_busy_buffers_size 8k | 16k;
内容:	http,server,location

当缓冲启用从代理的服务器响应,限制总size的缓冲区,可以是正忙于发送到客户端的响应,而响应尚不充分阅读的。同时,其余的缓冲区可用于读取响应,并在需要时将响应的一部分缓冲到临时文件中。默认情况下,size受限于proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的大小 。



十五、一次写入临时文件的数据大小

句法:	proxy_temp_file_write_size size;
默认:	proxy_temp_file_write_size 8k | 16k;
内容:	http,server,location

size当启用了从代理服务器到临时文件的响应的缓冲时,一次 限制写入临时文件的数据的数量。默认情况下,size受proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的限制。临时文件的最大大小由proxy_max_temp_file_size指令设置 。



十六、临时文件的最大大小

句法:	proxy_max_temp_file_size size;
默认:	proxy_max_temp_file_size 1024m;
内容:	http,server,location

如果启用了来自代理服务器的响应的缓冲,并且整个响应不适合proxy_buffer_size和proxy_buffers 指令设置的缓冲区,则可以将一部分响应保存到临时文件中。此伪指令设置size临时文件的最大值。一次写入临时文件的数据大小由proxy_temp_file_write_size指令设置。

零值禁用对临时文件的响应的缓冲。

此限制不适用于将被缓存 或存储在磁盘上的响应。



十七、缓存的共享内存区域

句法:	proxy_cache zone | off;
默认:	proxy_cache off;
内容:	http, server, location

定义用于缓存的共享内存区域。同一区域可以在多个地方使用。参数值可以包含变量(1.7.9)。该off参数禁用从先前配置级别继承的缓存。

十八、proxy哈希表的最大值

句法:	proxy_headers_hash_max_size size;
默认:	proxy_headers_hash_max_size 512;
内容:	http,server,location

设置proxy_hide_header和proxy_set_header 指令size使用的哈希表的最大值。设置哈希表的详细信息在单独的文档中提供 。

十九、size使用的哈希表的存储桶

句法:	proxy_headers_hash_bucket_size size;
默认:	proxy_headers_hash_bucket_size 64;
内容:	http,server,location

设置proxy_hide_header和proxy_set_header 指令size使用的哈希表的存储桶。设置哈希表的详细信息在单独的文档中提供 。

嵌入式变量

该ngx_http_proxy_module模块支持嵌入式变量,可使用proxy_set_header指令来构成标头 
$proxy_host: proxy_pass指令中指定的代理服务器的名称和端口 
$proxy_port: proxy_pass指令中指定的代理服务器的端口 ,或协议的默认端口;
$proxy_add_x_forwarded_for: “X-Forwarded-For”客户端请求标头字段中$remote_addr附加了变量,并用逗号分隔。如果客户端请求标头中不存在“ X-Forwarded-For”字段,则该$proxy_add_x_forwarded_for变量等于该$remote_addr变量

二十、实验测试
1)创建虚拟主机

vim  /etc/nginx/conf.d/vhost.conf
server {
        listen      9090;
        server_name 101.200.157.73;
        access_log logs/vhost.log main;
        location / {
                root    /www/a;
                index  index.html;
        }
}

server {
        listen      9091;
        server_name  101.200.157.73;
        access_log logs/vhost.log main;
        location / {
                root    /www/b;
                index  index.html;
        }
}

自己去生效/www/{a,b}文件下index.html访问文件

重启nginx服务

nginx  -t &&  nginx -s reload

访问9090端口
在这里插入图片描述

访问9091端口
在这里插入图片描述

2)创建负载代理机器

vim  /etc/nginx/conf.d/upstream.conf

在这里插入图片描述

proxy_cache_path   /soft/cache   levels=1:2 keys_zone=code_cache:512m  max_size=10g  inactive=60  use_temp_path=off;

upstream cache {
        server 101.200.157.73:9090;
        server 101.200.157.73:9091;
}


server {
         listen  9092;
         server_name 101.200.157.73;
         access_log logs/upstream.log main;
         location / {
              proxy_pass    http://cache;
              proxy_cache   code_cache;
              proxy_cache_valid  200 302 10m;   #为代码为200302的响应设置10分钟的缓存
              proxy_cache_valid  301  404 1h;   #代码301404的响应设置1小时缓存。
              proxy_cache_valid  any  1m;       #其他代码应设置1分钟缓存。
              add_header Nginx-Cache "$upstream_cache_status";  #主要查看是否被命中,缓存是否成功
              proxy_next_upstream   error  timeout http_500 http_502 http_503 http_504 http_403 http_404 http_429;     #服务器响应状态码,将跳转到其他节点的web服务器,ip$remote_addr——客户地址
              include  /etc/nginx/proxy_params;  #加载proxy_params文件
             # proxy_set_header Host $host;   #默认情况下反向代理是不会转发请求的Host头部。如果需要转发,就要添加此条配置
             # proxy_set_header X-Real-IP $remote_addr;   #在web服务器端获得用户的真实,ip$remote_addr——客户地址
             # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #如果客户端请求标头中不存在“ X-Forwarded-For”字段,则该$proxy_add_x_forwarded_for变量等于该$remote_addr变量。
             # proxy_connect_timeout 30;       #代理服务器建立连接的超时
             # proxy_send_timeout 60;          #请求传输到代理服务器的超时(仅在两个连续的写操作之间设置超时)
             # proxy_read_timeout 60;          #请求传输到代理服务器的超时(仅在两个连续的读操作之间设置超时)
             # proxy_buffering on;             #开启响应缓存(默认为on)
             # proxy_buffers 4 32k;            #为单个连接 设置用于从代理服务器读取响应的缓冲
             # proxy_buffer_size  64k;         #读取从代理服务器接收的响应的第一部分的缓冲区
             # proxy_busy_buffers_size  64k;   #系统很忙时可以使用的proxy_buffers大小,官方推荐的大小是proxy_buffers的两倍
             # proxy_temp_file_write_size 64k; #当启用从代理服务器到临时文件的响应缓冲时, 限制一次写入临时文件的数据。默认情况下,size由proxy_buffer_size和proxy_buffers指令设置的两个缓>冲区限制
             #proxy_max_temp_file_size 1024m;  #默认值未1024m,临时文件的最大大小

        }
}

查看/etc/nginx/proxy_params配置文件
在这里插入图片描述

vim  /etc/nginx/proxy_params
proxy_set_header Host $host;               #默认情况下反向代理是不会转发请求的Host头部。如果需要转发,就要添加此条配置
proxy_set_header X-Real-IP $remote_addr;   #在web服务器端获得用户的真实,ip$remote_addr——客户地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #如果客户端请求标头中不存在“ X-Forwarded-For”字段,则该$proxy_add_x_forwarded_for变量等于该$remote_addr变量。
proxy_connect_timeout 30;       #代理服务器建立连接的超时
proxy_send_timeout 60;          #请求传输到代理服务器的超时(仅在两个连续的写操作之间设置超时)
proxy_read_timeout 60;          #请求传输到代理服务器的超时(仅在两个连续的读操作之间设置超时)
proxy_buffering on;             #开启响应缓存(默认为on)
proxy_buffers 4 32k;            #为单个连接 设置用于从代理服务器读取响应的缓冲
proxy_buffer_size  64k;         #读取从代理服务器接收的响应的第一部分的缓冲区
proxy_busy_buffers_size  64k;   #系统很忙时可以使用的proxy_buffers大小,官方推荐的大小是proxy_buffers的两倍
proxy_temp_file_write_size 64k; #当启用从代理服务器到临时文件的响应缓冲时, 限制一次写入临时文件的数据。默认情况下,size由proxy_buffer_size和proxy_buffers指令设置的两个缓>冲区限制
proxy_max_temp_file_size 1024m;  #默认值未1024m,临时文件的最大大小lient_body_buffer_size 16k;

再次重启nginx服务

nginx  -t &&  nginx -s reload

3)访问测试
第一次访问:
在这里插入图片描述

第二次访问:
第二次访问

第三次访问:(按照负一定载均衡我们会刷新其他web页面,默认rr调度算法)
在这里插入图片描述

查看下是否有存储目录文件:
在这里插入图片描述

目前Nginx 代理缓存, 简单就这样。 具体定义存放结构自己定义—— http,server,location。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值