下面是Rails应用程序的nginx配置中的代码片段。该网站的本地访问地址为localhost:5478。端口5479-82在服务请求时运行ruby实例来处理流量。该应用程序作为多个面向用户的应用程序的后备api,用于正常操作。
问题是,当从app上传一张xls表时,导入大约需要5分钟,由于操作超时,nginx使用相同的文件在新端口上发出请求。这会导致数据库中的条目重复。增加超时不会有帮助,因为文件的大小和内容是未知的。我想控制特定的网址,这不应该通过反向代理流。我应该使用新的位置块来解决这个问题吗?
upstream rails {
ip_hash;
server 127.0.0.1:5479;
server 127.0.0.1:5480;
server 127.0.0.1:5481;
server 127.0.0.1:5482;
}
server {
listen 5478 default;
server_name _;
root "../protac/public";
add_header X-Frame-Options "SAMEORIGIN";
location ~ ^/assets/ {
root "../protac/public";
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
location ~* / {
# Setup redirection headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
# Pass the request thru
proxy_pass http://rails;
add_header X-Frame-Options "SAMEORIGIN";
}发布于 2020-11-03 03:15:58
当你配置了几个上游服务器时,有一个proxy_next_upstream指令,它控制如果一个请求不能被其中一个服务器处理时发生的情况,默认情况下,如果超时或获取响应时出错,nginx将使用另一个上游服务器重试。
请参阅proxy_next_upstream documentation
如果您不想要此行为,并且针对您的特定情况(上传5分钟),您可以使用proxy_next_upstream_timeout指令,该指令可防止它在指定的时间后尝试新的上游。给它一个合理的低时间来捕捉那些特别长的超时。
或者,您可以为此类上载定义一个特定位置,并为该位置设置proxy_next_upstream off;,以防止仅在该位置上发生此行为。
https://stackoverflow.com/questions/56625962
复制相似问题