[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