我在使用Django-Filebrowser时遇到了一些问题,而且从我可以看出它们似乎与Nginx有关。我遇到的主要问题是Django-Filebrowser无法在夹层管理员中加载包含大量Amazon S3文件的目录。我在S3上托管了400多个大型音频文件(每个几百MB)的多个目录,当我尝试加载夹层管理/媒体库时,我的服务器返回一个nginx 500(坏网关)错误。在目录开始变大之前,我没有遇到任何问题。
可能值得一提的是:
我认为我的主要问题是,大型S3目录未在admin中加载,是一个nginx问题,因为我在没有nginx的本地环境中加载这些目录没有问题。我的nginx错误日志会引发以下错误:
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/"
我已经研究过这个错误,导致我将这些行添加到我的nginx配置文件中。
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;
尽管尝试了多个nginx超时配置,但我仍然完全停留在我开始的地方。我的生产服务器不会通过django-filebrowser从Amazon S3加载大型目录。
以下是相关设置/配置文件中的其他一些行。
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;
}
}
这甚至是一个nginx问题吗?如果是这样,有没有人有任何解决此错误的建议?如果没有,我错过了哪些会导致仅在这些大型目录上超时?
有没有比我目前的设置更好的方法来解决这个问题?
非常感谢任何帮助。
由于