【问题标题】:best way to save nginx request as a file?将nginx请求保存为文件的最佳方法?
【发布时间】:2015-08-23 10:59:35
【问题描述】:

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

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

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

【问题讨论】:

  • 你需要设置一个缓存,然后响应将被写入磁盘。
  • client_body_in_file_only 仅关于 BODY,但您在主题中要求 REQUEST,请澄清。您确定您发布了任何带有正文的请求吗?
  • @alexander 我的愿望是能够发布例如表单并将表单的内容写入文件。它不需要包含请求中的所有数据(例如标头),但内容就足够了,任何格式(原始都可以)。

标签: http logging nginx


【解决方案1】:

这个问题已经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

【讨论】:

  • 谢谢。我现在没有时间检查你的解决方案,但我想你可能还是得到了赏金代表点:)
【解决方案2】:

您的意思是当有人访问和请求文件并存储在硬盘而不是内存上时,为 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

  • levels 在 /path/to/cache/ 下设置两级目录层次结构

  • keys_zone 设置一个共享内存区域,用于存储缓存键和元数据,例如使用计时器

  • max_size 设置缓存大小的上限

  • inactive 指定项目可以在缓存中保留多长时间而不被访问

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多