ruby-on-rails - Nginx 在大文件上传时随机失败

标签 ruby-on-rails nginx

我有一个存储在 DigitalOcean 的 Rails 应用程序。在大文件上传 (~70Mb) 期间,我的 Nginx 有时会失败(比如每 3 次失败一次)。我还有后台导入进程在运行(但我不确定它是否与问题有关)。

我收到 502 错误,在日志中我看到 在从上游读取响应 header 时上游永久关闭连接

我的 nginx.conf 看起来与此类似:

upstream backend {
  server unix://var/www/my_app/shared/tmp/sockets/puma.sock;
}

server {
  listen 80;

  root /var/www/my_app/current/public;

  client_max_body_size 600m;
  proxy_connect_timeout 1200s;
  proxy_send_timeout 1200s;
  proxy_read_timeout 1200s;

  client_header_timeout 1200s;
  client_body_timeout   1200s;
  client_header_buffer_size 1024k;
  client_body_buffer_size 600m;

  send_timeout 1200s;

  keepalive_timeout 1200s;

  large_client_header_buffers 8 1024k;

  fastcgi_read_timeout 1200s;

  error_log /var/www/my_app/current/log/nginx.error.log info;
}


http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 1200s;
  types_hash_max_size 2048k;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}

谁能建议 Nginx 一直失败的原因是什么以及如何修复它?

最佳答案

通常不应在请求期间执行文件上传,因为您永远无法保证文件会在请求超时之前完成上传。你应该使用 Active Job在后台上传文件,然后在文件上传后提醒用户。

关于ruby-on-rails - Nginx 在大文件上传时随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39002253/

相关文章:

ruby-on-rails - 如何将 ActionController::RoutingError 分类为 Sentry 中的错误

ruby-on-rails - date.today Rails 2.3.9 的命名范围

ruby-on-rails - Rails 3.2.8 模型 before_save 在服务器负载过重的情况下无法正常工作

django - uwsgi 服务的静态文件的 Nginx 缓存

nginx - 在端口 80 上监听,但无法在 centos 7.1 上使用 nginx 从公共(public)访问

ruby-on-rails - 我如何解析一个 Excel 文件,它会给我提供与视觉上完全一样的数据?

ruby-on-rails - Ruby 在文件中查找字符串并打印结果

docker - 在Nginx/nginx代理容器中使用Nextcloud以及其他服务

php - Web 浏览器是否以不同方式缓存 HTML 文件和 PHP 生成的文件?

ssl - 如何配置 Let's Encrypt 的 ssl_trusted_certificate?