我正在通过 nginx (v1.2.9)寻找保存通过http 发送的数据(例如作为POST)尽快(开销最低)的解决方案)。我尝试了以下nginx配置,但没有看到目录中写入的任何文件:
server {
listen 9199;
location /saveme {
client_body_in_file_only on;
client_body_temp_path /tmp/bodies;
}
}
我做错了什么?和/或有没有更好的方法来实现这一目标? (理想情况下,写入的数据应该是每个请求一个文件,如果它本质上是“原始的”则无关紧要。文件的后处理将通过队列中的单独进程完成。)
答案 0 :(得分:3)
这个问题已经answered here:
基本上,您需要合并log_format
和fastcgi_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;
}
}
inactive指定项目在未被访问的情况下可以保留在缓存中的时间
proxy_cache指令激活与父位置块的URL匹配的所有内容的缓存(在示例中为/)。您还可以在服务器块中包含proxy_cache指令;它适用于没有自己的proxy_cache指令的服务器的所有位置块。