文档章节

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

netkiller-
 netkiller-
发布于 2017/09/05 10:53
字数 679
阅读 132
收藏 1

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

2017-09-05 景峯 Netkiller

本文节选自《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 用于缓存的例子:

proxy_cache_path /tmp/cache levels=1:2 keys_zone=netkiller:128m inactive=1m;
 
 server {
  listen 8080;
  server_name localhost;

  location / {
   try_files $uri @backend;
  }
 
  location @backend {
   proxy_pass http://node1.netkiller.cn:8080;
   proxy_cache netkiller;
   proxy_cache_methods POST;
   proxy_cache_key "$request_uri|$request_body";
   proxy_buffers 8 32k;
   proxy_buffer_size 64k;
   proxy_cache_valid 5s;
   proxy_cache_use_stale updating;
   add_header X-Cached $upstream_cache_status;
  }
 }

 

2.3.12.11. $request_body - HTTP POST 数据

2.3.12.11.1. 用户日志

将 POST 数据记录到日志中

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

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

 

Donations (打赏)

We accept PayPal through:

https://www.paypal.me/netkiller

Wechat (微信) / Alipay (支付宝) 打赏:

http://www.netkiller.cn/home/donations.html

 

作者相关文章:

Spring boot with Hive

攻城狮如何选择机械键盘轴体

考研与工作怎么选择

Spring boot with Oauth2

Elasticsearch Cluster 安装与配置

数据库结构版本控制

Spring boot with ELK(Elasticsearch + Logstash + Kibana)

Spring boot with Elasticsearch 5.5.1

怎样将 MySQL 数据表导入到 Elasticsearch

Spring data 数据库建表(一对一,一对多,多对多)

Apache Sqoop 将mysql导入到Hadoop HDFS

Spring boot with Apache Hive

Apache Hive 快速入门

CentOS 7.3 + Server JRE 1.8 + Hadoop-2.8.0

Apache Hbase 快速入门

Spring cloud 之 Feign Client

Spring Cloud Netflix

Spring Cloud Config

Spring boot with Schedule (启用/禁用)

Spring boot with HTTPS SSL

Spring boot with Git version

Spring boot with Docker

Spring boot with Service

Spring boot with PostgreSQL

Struts2 S2-046, S2-045 Firewall(漏洞防火墙)

Linux 系统安全与优化配置

Tomcat 安全配置与性能优化

Linux 系统与数据库安全

 

转载请注明出处与作者声明,扫描二维码关注作者公众好,不定期更新文章

© 著作权归作者所有

共有 人打赏支持
上一篇: 爬虫入门
下一篇: Spring boot with Hive
netkiller-

netkiller-

粉丝 691
博文 259
码字总数 353246
作品 10
深圳
部门经理
私信 提问
nginx配置、反向代理缓存、负载均衡

一、nginx基本配置 nginx开启文件目录浏览功能(web上显示目录) php-fpm配置 静态资源读取 gzip 压缩 二、nginx配置https 1.激活所需要的网站的https获取crt和key证书 2.在nginx配置文件中配...

微笑向暖wx
12/06
0
0
nginx反向代理配置两个不同服务器

1. 什么是反向代理: 反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上...

sollor525
08/02
0
0
Nginx自学手册(四)反向代理和缓存

(一)nginx反向代理 什么是代理服务器 :代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回...

lqbyz
2017/08/08
0
0
nginx反向代理解决跨域问题

nginx的作用 1.代理 2.web静态服务器 代理(proxy) 允许一个网络终端(一般为客户端),通过这个服务于另一个网络终端(一般为服务器)进行非直接的连接;提供代理服务的电脑系统或其他类型的网络终...

funnycoderstar
05/08
0
0
nginx的反向代理,缓存及LNMP的简单使用。

Nginx:是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,是Apache服务器不错的替代品,能够支持高达 50,000 个并发连接数的响应。 Nginx的编译安装: 1:创建普通...

chinahaike
2014/04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
17分钟前
2
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
85
3
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
20
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
29
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部