[Seaside] Using nginx file upload module

Johan Brichau johan at inceptive.be
Wed Jun 15 19:03:32 UTC 2011


Hi Nick,

Thanks for this.

I wonder: did you register a 'fileupload' handler in the seaside backend? 

We can now get it to work when we put the file upload module on the / location, but I wonder if that is a good solution. 
Your nginx config still catches only a location that matches 'fileupload'.

On 15 Jun 2011, at 13:14, Nick Ager wrote:

> Hi Johan,
> 
> Sorry for the delay. I have the Nginx file upload module working. In case it's still useful here's the relevant portions of my nginx configuration:
> 
>     upstream seaside {
>        server 127.0.0.1:9001;
>        server 127.0.0.1:9002;
>        server 127.0.0.1:9003;
>        fair;
>     }
> 
>     server {
>        listen 80 default;
>        server_name www.getitmade.com; 
>        # server_name _;
>        root /var/www;
> 
>        location / {
>             try_files $uri @seaside;
>         }
> 
>        # ensure that files are searched for locally and not passed to the
>        # Gems if the file isn't found on the disk
>        location ~* \.(gif|jpg|jpeg|png|css|html|htm|js|zip)$ {
> 
>        }
> 
>        location ~ fileupload {
>            # Pass altered request body to this location
>            upload_pass   @seaside;
> 
>            # if there's no upload file in this request, nginx generates a 405 - we use this
>            # to pass the request onto the 'normal' seaside processing
>            # The way this is achieved in the other location directives is through a "try_files" method
>            # however using "try_files" results in the other directives never being processed
>            error_page 405 415 = @seaside;
> 
>            # Store files to this directory
>            # The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
>            upload_store /var/nginx/temp 1;
> 
>            # Set the file attributes for uploaded files
>            upload_store_access user:rw group:rw all:rw;
> 
>            # Set specified fields in request body
>            upload_set_form_field $upload_field_name.name "$upload_file_name";
>            upload_set_form_field $upload_field_name.content_type "$upload_content_type";
>            upload_set_form_field $upload_field_name.path "$upload_tmp_path";
> 
>            # Inform backend about hash and size of a file
>            # upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";
>            upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
> 
>            # seaside automatically assigns sequential integers to fields with callbacks
>            # we want to pass those fields to the backend 
>            upload_pass_form_field "^\d+$";
> 
>            # we don't want files hanging around if the server failed to process them.
>            upload_cleanup 500-505;
> 
>            # file upload progress tracking - 30s is the timeout (progress tracking is
>            # available 30s after the upload has finished)
>            # this must be the last directive in the location block.
>            track_uploads proxied 30s;
>        }
> 
>        # used to report upload progress - defined by the Nginx Upload Progress Module
>        # see http://wiki.nginx.org/HttpUploadProgressModule
>        location  /progress {
>           report_uploads proxied;
>        }
> 
>        location @seaside {
>           include /etc/nginx/fastcgi_params;
>           fastcgi_intercept_errors on;
>           fastcgi_pass seaside;
>        }
> 
>       location /nginx_status {
>          # copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/
>          stub_status on;
>          access_log   off;
>          allow 127.0.0.1;
>          deny all;
>       }
> 
>        error_page 404 /errors/404.html;
>        error_page 403 /errors/403.html;
>        error_page 500 502 503 504 /errors/50x.html;
>     }
> 
> 
> 
> 
> On 12 June 2011 10:28, Johan Brichau <johan at inceptive.be> wrote:
> Hi all,
> 
> I'm calling for people who have got the nginx file upload module to work in their seaside apps...
> 
> We are trying to use the Nginx file upload module but are stuck when the request needs to get passed on to seaside.
> We are using a configuration with a separate '/upload' location that gets handled by the file upload module. The request then needs to get passed to the upstream backend (seaside) but that request still has the URI '/upload' and we do not seem to get it rewritten to the '/seasideapp' URI.
> 
> 
> Is there anyone who has this working completely and could give us some advice on how solve this?
> 
> The relevant parts of our nginx conf look like this:
> We also tried with a named location, but according to the docs, that makes the request arguments be dropped (and we need the _s & _k args for seaside...)
> 
> Johan
> 
> ----
> 
>        location / {
>                         include fastcgi_params;
>                         fastcgi_pass seaside;
>                }
> 
>        # Upload form should be submitted to this location
>        location /upload {
> 
>                # Pass altered request body to this location
>                upload_pass /backend;
>                upload_pass_args on;
> 
> 
>                #Pass all fields of the form
>                upload_pass_form_field ".*";
> 
>                # Store files to this directory
>                upload_store /var/www/documents/;
> 
>                # Set specified fields in request body
>                upload_set_form_field $upload_field_name.name "$upload_file_name";
>                upload_set_form_field $upload_field_name.content_type "$upload_content_type";
>                upload_set_form_field $upload_field_name.path "$upload_tmp_path";
> 
>                upload_cleanup 400 404 499 500-505;
>                        }
> 
>        location /backend
>        {
>                rewrite ^/upload/(.*) /seasideapp/$1 last;
>        }_______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> 
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside



More information about the seaside mailing list