Nginx - 通过反向代理上传文件时缓存/处理数据

Nginx - 通过反向代理上传文件时缓存/处理数据

我正在运行多个虚拟机(Proxmox),每个虚拟机的存储量都有限。由于我还运行文件上传服务,因此我关心反向代理是否需要超过 30GB 的存储空间。

我有 1 个反向代理,它重定向到 3 个 Web 服务器。

如果有人向网络服务器上传 50GB 的数据,是否会使用反向代理的存储(或缓存?)?

答案1

是的。默认情况下,nginx 将缓存请求主体。因此,如果您在 5 台服务器上上传 50 GB,那么您的反向代理将必须存储所有 50 GB。(假设上传同时进行)

您可以使用指令禁用此proxy_request_buffering功能。这对负载平衡有一些影响,例如如果第一个服务器发生故障,则无法将请求发送到下一个服务器。

代理连接还有特定要求,因此我建议阅读文档以了解完整的详细信息:https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering

答案2

您的帖子有些不清楚。我认为您指的不是 nginx fastcgi 缓存,但也可能是指。

Nginx 会按照您的要求执行操作。如果您使用 proxy_pass,那么我的理解是它只是将连接传递给下一个服务器,它不会接收上传然后自行发送。即 nginx 充当连接代理。

如果您谈论的是 nginx fastcgi 缓存,那么您只需禁用它即可。以下以两种方式禁用缓存 - 用于 POST 和基于一组规则。使用您认为合适的任何位。

server {
  ...
  set $skip_cache 0;
  if ($request_method = POST) {
    set $skip_cache 1;
  }
  if ($query_string != "") {
    set $skip_cache 1;
  }
  # Don't cache uris containing the following segments.
  if ($request_uri ~* "/wp-admin/|/admin-*|/purge*|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") {
    set $skip_cache 1;
  }
  # Don't use the cache for logged in users or recent commenters
  if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|code") {
    set $skip_cache 1;
  }

  location ~ \.(hh|php)$ {
    fastcgi_cache CACHE_NAME;
    fastcgi_cache_valid 200 1440m;

    fastcgi_cache_methods GET HEAD;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
  }

相关内容