I'm having some issues with Django-Filebrowser and from what I can tell 
they seem to be related to Nginx. The two primary issues I'm having is that 
Django-Filebrowser fails to load directories with large amounts of Amazon 
S3 files in the mezzanine admin and I get an http error when trying to 
upload large files (500Mb) to Amazon S3 through filebrowser. I have 
multiple directories with 400+ large audio files (several hundred MB each) 
hosted on S3 that when I attempt to load in mezzanine admin/media-library, 
my server returns an nginx 500 (bad gateway) error. I didn't have any 
issues with this until the directories started getting bigger. I can also 
upload normal sized files (images, small audio files, etc.) without any 
issue. It's not until I try to upload large files that I get an error.

It's probably worth noting a few things:

   1. I only use Amazon S3 to serve the media files for the project, all 
   static files are served locally through nginx. 
   2. All django-filebrowser functionality works correctly in directories 
   that will actually load. (with the exception of large file uploads) 
   3. I created a test directory with 1000 small files and 
   django-filebrowser loads the directory correctly. 
   4. In the nginx.conf settings listed below (proxy buffer size, 
   proxy_connect_timeout, etc), I've tested multiple values, multiple times 
   and I can never get the pages to consistently load. Now that the 
   directories are larger, I'm can't even get them to load. 
   5. I've tried adding an additional location in my nginx conf for 
   "admin/media-library/" with increased timeouts, and other settings I've 
   tried... but nginx still did not load these large directories correctly. 

I believe my primary issues are an nginx or possible gunicorn issue as I 
have no trouble loading these directories or uploading large files in a 
local environment without nginx/gunicorn. My nginx error log throws the 
following error:

> 2014/11/24 15:53:25 [error] 30816#0: *1 upstream prematurely closed 
> connection while reading response header from upstream, client: 
> xx.xxx.xxx.xxx, server: server, request: "GET /admin/media-library/browse/ 
> HTTP/1.1", upstream: "http://127.0.0.1:8001/admin/media-library/browse/";, 
> host: "server name, referrer: "https://example/admin/";

 

I've researched that error which led me to add these lines to my nginx conf 
file.

> proxy_buffer_size 128k;
> proxy_buffers 100 128k;
> proxy_busy_buffers_size 256k;
> proxy_connect_timeout 75s;
> proxy_read_timeout 75s;
> client_max_body_size 9999M;
> keepalive_timeout 60s;

 

Despite trying multiple nginx timeout configurations, I'm still stuck 
exactly where I started. My production server will not load large 
directories from Amazon S3 through django-filebrowser nor can I upload 
large files through django-filebrowser.

Here are some other lines from settings/conf files that are relevant.

Settings.py

> DEFAULT_FILE_STORAGE = 's3utils.S3MediaStorage'
> AWS_S3_SECURE_URLS = True # use http instead of https
> AWS_QUERYSTRING_AUTH = False # don't add complex authentication-related 
> query parameters for requests
> #AWS_PRELOAD_METADATA = True
> AWS_S3_ACCESS_KEY_ID = 'key' # enter your access key id
> AWS_S3_SECRET_ACCESS_KEY = 'secret key' # enter your secret access key
> AWS_STORAGE_BUCKET_NAME = 'bucket'
> AWS_S3_CUSTOM_DOMAIN = 's3.amazonaws.com/bucket'
> S3_URL = 'https://s3.amazonaws.com/bucket/'
> MEDIA_URL = S3_URL + 'media/'
> MEDIA_ROOT = 'media/uploads/'
> FILEBROWSER_DIRECTORY = 'uploads'

 

/etc/nginx/sites-enabled/production.conf

upstream name {
server 127.0.0.1:8001;
}

server {
listen 80;
server_name www.example.com;
rewrite ^(.*) http://example.com$1 permanent;
}

server {

listen 80;
listen 443 default ssl;
server_name example.com;
client_max_body_size 999M;
keepalive_timeout 60;

ssl on;
ssl_certificate /etc/nginx/ssl/cert.crt;
ssl_certificate_key /etc/nginx/ssl/key.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

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;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_pass http://example;
add_header X-Frame-Options "SAMEORIGIN";
proxy_buffer_size 128k;
proxy_buffers 100 128k;
proxy_busy_buffers_size 256k;
proxy_connect_timeout 75s;
proxy_read_timeout 75s;
client_max_body_size 9999M;
keepalive_timeout 60s;
}

location /static/ {
root /path/to/static
 }

location /robots.txt {
root /path/to/robots;
access_log off;
log_not_found off;
}

location /favicon.ico {
root /path/to/favicon;
access_log off;
log_not_found off;
}

}

Is this even an nginx issue? If so, does anyone have any suggestions for 
resolving this error? If not, what am I missing that would cause timeouts 
only on these large directories/large file uploads?

Is there a better way to approach this problem than my current setup?

Any help would be greatly appreciated.

Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Mezzanine Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to