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


    摘要: Nginx 反向代理可以缓存 HTTP POST 请求页面吗?  2017-09-05 景峯 Netkiller 本文节选自《Netkiller Web 手札》 作者:netkiller 网站:http://www.netkiller.cn 答案是可以!  因为nginx 使用 url 作为缓存的key ( Nginx 将url地址 md5后作为缓存的 key ),所以默认情况下 Nginx 只能处理 HTTP GET 缓存。

    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 用于缓存的例子:

     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数据到日志会带来安全问题,例如用户密码泄露。

  • 相关阅读:
    树链剖分求LCA
    洛谷P1019 单词接龙
    洛谷P1441 砝码称重
    洛谷P2347 砝码称重
    洛谷P1164 小A点菜
    洛谷P2202 [USACO13JAN]方块重叠Square Overlap
    黑客与画家 第四章
    黑客与画家 第十二章
    记录最近一段的体会
    11.5最小生成树(Minimum Spanning Trees)
  • 原文地址:https://www.cnblogs.com/muhy/p/10506034.html
Copyright © 2020-2023  润新知