【问题标题】:Thin + Nginx + Upload Module + Upload Progress ModuleThin + Nginx + 上传模块 + 上传进度模块
【发布时间】:2011-02-17 15:06:46
【问题描述】:

我使用 Nginx 作为 Thin 实例的反向代理。

我的目标是建立一个 Rails (3) 应用程序来上传大文件并对其进行处理。

为此,我遇到了 Nginx 上传和上传进度模块。

我大部分时间都在阅读this 的帖子,但那是在Passenger 中专门写的。

如果可能,我正在寻找两个可能的答案:

1) 信息实现此堆栈的示例(使用 Thin 而不是乘客)

2) 我该如何重写的具体信息:

   location ^~ /progress {
         # report uploads tracked in the 'proxied' zone
         upload_progress_json_output;
         report_uploads proxied;
       }

       location @fast_upload_endpoint {
         passenger_enabled on;
         rails_env development;
       }

       location / {
         rails_env development;
         passenger_enabled on;
       }

我不知道什么是Passenger Exclusive,以及如何为典型的4个worker / 3个瘦实例conf编写它。

谢谢。

【问题讨论】:

    标签: ruby-on-rails nginx thin


    【解决方案1】:

    首先,您应该安装带有上传模块的 nginx。站点的 nginx 配置:

    upstream uploader_cluster {
      server unix:/tmp/thin.uploader.0.sock;
      server unix:/tmp/thin.uploader.1.sock;
      server unix:/tmp/thin.uploader.2.sock;
      server unix:/tmp/thin.uploader.3.sock;
      server unix:/tmp/thin.uploader.4.sock;
    }
    
    server {
         listen 80;
         server_name ***.com;
    
         charset off;
         client_max_body_size 1000m;
    
         access_log /var/www/uploader/log/access.log;
         error_log /var/www/uploader/log/error.log;
    
         root /var/www/uploader/public;
         index index.html;
    
         location / {
             proxy_redirect     off;
             proxy_set_header   Host             $host;
             proxy_set_header   X-Real-IP        $remote_addr;
             proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    
             if (-f $request_filename/index.html) {
                 rewrite (.*) $1/index.html break;
             }
    
             if (-f $request_filename.html) {
                 rewrite (.*) $1.html break;
             }
    
             if (!-f $request_filename) {
                 proxy_pass http://uploader_cluster;
                 break;
             }
         }
    
         location ~*uploads$ {
            if ($request_method = GET) {
              proxy_pass http://uploader_cluster;
              break;
            }
    
            # pass request body to here
            upload_pass @upload_photos;
    
            # Store files to this directory
            # The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
            # i.e. make sure to create /vol/uploads/0 /vol/uploads/1 etc.
            upload_store /vol/uploads 1;
    
            # set permissions on the uploaded files
            upload_store_access user:rw group:rw all:r;
    
            # Set specified fields in request body
            # this puts the original filename, new path+filename and content type in the requests params
            upload_set_form_field upload[file_name] "$upload_file_name";
            upload_set_form_field upload[file_content_type] "$upload_content_type";
            upload_set_form_field upload[file_path] "$upload_tmp_path";
            upload_aggregate_form_field upload[file_size] "$upload_file_size";
    
            upload_pass_form_field "^fb_sig_user$|^aid$|^batch_id$|^album_name$|^album_visible$|^caption$|^tags$|^complete$";
    
            upload_cleanup 400 404 499 500-505;
         }
    
         location @upload_photos {
            proxy_pass http://uploader_cluster;
         }
    }
    

    【讨论】:

    • 谢谢,对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2020-07-07
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多