Nginx 反向代理可以缓存 HTTP POST 请求页面吗?

Nginx 反向代理可以缓存 HTTP POST 请求页面吗? 

2017-09-05 景峯

本文节选自《Netkiller Web 手札》 作者:netkiller 网站:http://www.netkiller.cn

答案是可以! 

因为nginx 使用 url 作为缓存的key ( Nginx 将url地址 md5后作为缓存的 key ),所以默认情况下 Nginx 只能处理 HTTP GET 缓存。

对于 HTTP POST 请求,提交数据放在HTTP Head 头部提交到服务器的, 提交前后URL始终不变,Nginx 无法区分相同网址两次请求的内容有变化。

但是我们可以自定义 缓存 key 例如: "$request_uri|$request_body" 我们将请求地址加上post内容作为缓存的key,这样nginx 便可以区分每次提交后的页面变化。

$request_body 用于缓存的例子:

1proxy_cache_path /tmp/cache levels=1:2 keys_zone=netkiller:128m inactive=1m; 2 3 server { 4 listen 8080; 5 server_name localhost; 6 7 location / { 8 try_files $uri @backend; 9 } 10 11 location @backend { 12 proxy_pass http://node1.netkiller.cn:8080; 13 proxy_cache netkiller; 14 proxy_cache_methods POST; 15 proxy_cache_key "$request_uri|$request_body"; 16 proxy_buffers 8 32k; 17 proxy_buffer_size 64k; 18 proxy_cache_valid 5s; 19 proxy_cache_use_stale updating; 20 add_header X-Cached $upstream_cache_status; 21 } 22 }

2.3.12.11. $request_body - HTTP POST 数据

2.3.12.11.1. 用户日志

将 POST 数据记录到日志中

1log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 2 '$status $body_bytes_sent "$http_referer" ' 3 '"$http_user_agent" "$http_x_forwarded_for" - "$request_body"';

注意:用户登录通常使用POST方式,所以记录POST数据到日志会带来安全问题,例如用户密码泄露。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )