2011-02-17 47 views
2

我使用Nginx作爲Thin實例的反向代理。Thin + Nginx +上傳模塊+上傳進度模塊

我的目標是設置一個Rails(3)應用程序來上傳大文件並對它們做些什麼。

爲此,我遇到了Nginx上傳和上傳進度模塊。

我正在閱讀,大部分是this文章,但這是專門寫在乘客的思想。

如果可能的話,我要找的兩個可能的答案:

1)信息實現這個堆棧(與瘦的,而不是客運)

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; 
     } 

我不知道什麼是客運獨家,以及如何將它寫了一個典型的4名工人/ 3薄膜情況下的conf。

謝謝。

回答

3

首先,您應該使用上傳模塊安裝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; 
    } 
} 
+0

謝謝,這幫了我很多! – maukoquiroga 2011-10-28 03:52:21