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數據到日志會帶來安全問題,例如用戶密碼泄露。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM