我按照这个guide在Ubuntu 11.10上部署了Django + Nginx。 Django运行良好,但Nginx不提供任何静态文件。
我正在尝试将app.com/static/指向本地文件夹/ project / app / static /
我也尝试了question中的所有内容无效
以下是我的settings.py:
的摘录STATIC_ROOT = ''
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = DOMAIN_URL + '/static/admin/'
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
来自nginx.conf
server {
listen 80;
server_name localhost;
# site_media - folder in uri for static files
location /static/ {
autoindex on;
alias /project/app/static;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|p$
access_log off; # po co mi logi obrazków :)
expires 30d;
}
location / {
# host and port to fastcgi server
fastcgi_pass 127.0.0.1:8080;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
我在这做什么?
这是nginx日志
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!" while read$
2012/04/17 13:48:24 [error] 15598#0: *3 open() "/etc/nginx/html/static/css/rese$
2012/04/17 13:48:24 [error] 15598#0: *4 open() "/etc/nginx/html/static/images/l$
2012/04/17 13:48:24 [error] 15598#0: *5 open() "/etc/nginx/html/static/js/scrip$
2012/04/17 13:48:24 [error] 15598#0: *6 open() "/etc/nginx/html/static/js/jquery$
2012/04/17 13:48:24 [error] 15598#0: *7 open() "/etc/nginx/html/static/style.cs$
2012/04/17 13:48:24 [error] 15598#0: *8 open() "/etc/nginx/html/static/js/jquery$
2012/04/17 13:48:24 [error] 15598#0: *5 open() "/etc/nginx/html/static/images/i$
2012/04/17 13:48:24 [error] 15598#0: *7 open() "/etc/nginx/html/static/images/i$
2012/04/17 13:48:24 [error] 15598#0: *8 open() "/etc/nginx/html/static/images/i$
2012/04/17 13:48:24 [error] 15598#0: *6 open() "/etc/nginx/html/static/images/s$
2012/04/17 13:48:24 [error] 15598#0: *3 open() "/etc/nginx/html/static/images/s$
2012/04/17 13:48:24 [error] 15598#0: *4 open() "/etc/nginx/html/static/images/s$
2012/04/17 14:07:33 [error] 16231#0: *1 FastCGI sent in stderr: "WSGIServer: mi$
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!" while read$
2012/04/17 14:07:33 [error] 16231#0: *3 open() "/etc/nginx/html/static/css/rese$
2012/04/17 14:07:33 [error] 16231#0: *4 open() "/etc/nginx/html/static/style.cs$
2012/04/17 14:07:33 [error] 16231#0: *5 open() "/etc/nginx/html/static/js/jquery$
2012/04/17 14:07:33 [error] 16231#0: *6 open() "/etc/nginx/html/static/js/scrip$
2012/04/17 14:07:33 [error] 16231#0: *7 open() "/etc/nginx/html/static/js/jquery$
2012/04/17 14:07:34 [error] 16231#0: *7 open() "/etc/nginx/html/static/images/l$
2012/04/17 14:07:34 [error] 16231#0: *6 open() "/etc/nginx/html/static/images/i$
2012/04/17 14:07:34 [error] 16231#0: *4 open() "/etc/nginx/html/static/images/i$
2012/04/17 14:07:34 [error] 16231#0: *5 open() "/etc/nginx/html/static/images/i$
2012/04/17 14:07:34 [error] 16231#0: *3 open() "/etc/nginx/html/static/images/s$
2012/04/17 14:07:34 [error] 16231#0: *8 open() "/etc/nginx/html/static/images/s$
2012/04/17 14:07:34 [error] 16231#0: *5 open() "/etc/nginx/html/static/images/s$
2012/04/17 14:07:35 [error] 16231#0: *5 open() "/etc/nginx/html/static/images/f$
2012/04/17 14:10:30 [error] 16231#0: *9 FastCGI sent in stderr: "WSGIServer: mi$
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!" while read$
2012/04/17 14:11:57 [error] 16471#0: *1 FastCGI sent in stderr: "WSGIServer: mi$
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!" while read$
更新
解决。我没有在nginx.conf中指定root的内容 一旦我这样做,一切都落到了位置!
捂脸
server_name localhost;
root /home/user/projects;
# site_media - folder in uri for static files
location /static/ {
root /static/;
}
答案 0 :(得分:1)
看起来nginx 是为文件提供服务,只有它们不在那里。这是因为1)你没有指定STATIC_ROOT
和2)你显然没有运行collectstatic
,这会给你一个错误。
首先,设置:
STATIC_ROOT = '/project/app/static'
或者,为了更好的便携性:
import os.path
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
然后,在生产环境中运行以下命令:
python manage.py collectstatic
答案 1 :(得分:1)
我没有在nginx.conf中指定root用户名 一旦我这样做,一切都落到了位置! 捂脸
server_name localhost;
root /home/user/projects/;
# site_media - folder in uri for static files
location /static/ {
root /static/;}
答案 2 :(得分:-1)
Django实际上并不是为静态文件服务而设计的。他们在整个文档中多次提到这一点。只需使用nginx单独提供静态文件,然后将django指向该位置。