我正在运行多个虚拟机(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;
}