django:通过nginx提供静态文件
我使用的是Apache + mod_wsgi for django。
并且所有css/js/images
通过nginx
服务。
对于一些奇怪的原因,当others/friends/colleagues
尝试访问该网站,jquery/css
是not getting loaded
他们,因此该页面看起来混乱起来。django:通过nginx提供静态文件
我的HTML文件中使用这样的代码 -
<link rel="stylesheet" type="text/css" href="http://x.x.x.x:8000/css/custom.css"/>
<script type="text/javascript" src="http://1x.x.x.x:8000/js/custom.js"></script>
在sites-available
我的nginx的配置是这样的 -
server {
listen 8000;
server_name localhost;
access_log /var/log/nginx/aa8000.access.log;
error_log /var/log/nginx/aa8000.error.log;
location/{
index index.html index.htm;
}
location /static/ {
autoindex on;
root /opt/aa/webroot/;
}
}
有已相应css
& js
目录的目录/opt/aa/webroot/static/
。
奇怪的是,当我访问它们时页面显示正常。
我已经清除了我的缓存/ etc,但从各种浏览器加载的页面都很好。
此外,我没有看到404在nginx日志文件中的任何错误。
任何指针都会很棒。
-
server_name
必须link
/script
的URL匹配的主机名。无论是宣布你的配置,默认为这个接口:端口对(listen 8000 default
) - Nginx的必须在您的主机的IP绑定的接口进行监听(似乎确定你的情况)
鱼翅&亚历山大 - 谢谢为那些帮助的提示。
这是我如何解决它为任何人停留在同一条船上 -
settings.py -
>MEDIA_ROOT = ''
MEDIA_URL = 'http://x.x.x.x:8000/static/'
在我的HTML -
<script type="text/javascript" src="{{MEDIA_URL}}js/jquery-1.3.2.min.js"></script>
在我的看法.py -
return render_to_response('templates/login-register.html', {},
context_instance=RequestContext(request));
nginx的站点可用的配置文件里面 -
listen x.x.x.x:8000;
server_name x.x.x.x.;
重启动nginx的
而重新启动Apache的
我认为使用root
在位置块是不正确。我使用alias
,它工作正常,即使没有重新配置Django。
# django settings.py
MEDIA_URL = '/static/'
# nginx server config
server {
...
location /static {
autoindex on;
alias /opt/aa/webroot/;
}
}
希望这可以让事情变得更简单。
的确,'alias'是服务整个目录的合适方法。 – xyzman 2012-04-25 12:27:35
同样适用于我,因为/ static和/ static /是不同的位置,而在第二个变体中,我总是从nginx获得权限错误。 – Dracontis 2012-08-17 12:13:13
对于阅读此内容的任何人。 Nginx的文档清楚地表明:“当位置匹配指令值的最后部分时,最好使用root指令代替”http://nginx.org/en/docs/http/ngx_http_core_module.html#alias另请参见此答案:http://serverfault.com/a/278359 – PF4Public 2015-11-22 23:17:43
MEDIA_URL不得用于像js等静态内容。Django提供了一个可以使用的单独的STATIC_URL设置选项。
所以这是可以改变的
<script type="text/javascript" src="{{STATIC_URL}}js/jquery-1.3.2.min.js"></script>
此外,它的更标准使用staticfile应用templatetag这样的:
{% load static from staticfiles %}
<script type="text/javascript" src="{% static 'js/jquery-1.3.2.min.js' %}"></script>
我也挣扎与此有关。但是,下面的技巧为我工作:
server {
listen 8000;
server_name localhost;
access_log /var/log/nginx/aa8000.access.log;
error_log /var/log/nginx/aa8000.error.log;
location/{
index index.html index.htm;
}
location ^/static/ {
autoindex on;
root /opt/aa/webroot/;
}
}
我只是静态标记的正则表达式与^
和nginx的启动提供静态文件。 Django方面不需要修改。
除非你在你的nginx配置文件中还有“位置/静态”等Django将服务于静态文件。很好的测试和开发,但不是一个好主意的生产。 – ostergaard 2013-04-10 11:05:13