将nginx请求保存为文件的最佳方法?

时间:2015-06-08 20:14:41

标签: http logging nginx

我正在通过 nginx (v1.2.9)寻找保存通过http 发送的数据(例如作为POST)尽快(开销最低)的解决方案)。我尝试了以下nginx配置,但没有看到目录中写入的任何文件:

server {
  listen 9199;
  location /saveme {
    client_body_in_file_only on;
    client_body_temp_path /tmp/bodies;
  }
}

我做错了什么?和/或有没有更好的方法来实现这一目标? (理想情况下,写入的数据应该是每个请求一个文件,如果它本质上是“原始的”则无关紧要。文件的后处理将通过队列中的单独进程完成。)

2 个答案:

答案 0 :(得分:3)

这个问题已经answered here

基本上,您需要合并log_formatfastcgi_pass。然后,您可以使用access_log指令来指定应将保存的变量转储到的位置。

location = /saveme {
  log_format postdata $request_body;
  access_log  /var/log/nginx/postdata.log  postdata;
  fastcgi_pass php_cgi;
}

它也适用于您的方法,但我认为您缺少client_body_buffer_size和`client_max_body_size

答案 1 :(得分:0)

你的意思是当有人访问并请求文件并存储在硬盘而不是内存时,为HTTP帖子保存缓存吗? 我可能会建议使用proxy_cache_path和proxy_cache。 proxy_cache_path指令设置缓存的路径和配置,proxy_cache指令激活它。

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
                 inactive=60m use_temp_path=off;
server {
...
    location / {
        proxy_cache my_cache;
        proxy_pass http://my_upstream;
    }
}
  • 缓存的本地磁盘目录名为/ path / to / cache
  • 级别在/ path / to / cache /
  • 下设置两级目录层次结构
  • keys_zone设置共享内存区域,用于存储缓存键和元数据,例如使用计时器
  • max_size设置缓存大小的上限
  • inactive指定项目在未被访问的情况下可以保留在缓存中的时间

    proxy_cache指令激活与父位置块的URL匹配的所有内容的缓存(在示例中为/)。您还可以在服务器块中包含proxy_cache指令;它适用于没有自己的proxy_cache指令的服务器的所有位置块。