django:通过nginx提供静态文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django:通过nginx提供静态文件相关的知识,希望对你有一定的参考价值。
我正在为django使用apache + mod_wsgi。
所有的css / js / images都是通过nginx
提供的。
出于某种奇怪的原因,当其他人/朋友/同事尝试访问该网站时,jquery / css没有为他们加载,因此页面看起来混乱了。
我的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/;
}
}
有一个目录/opt/aa/webroot/static/
有相应的css
和js
目录。
奇怪的是,当我访问它们时页面显示正常。 我已经清除了我的缓存/等,但是从各种浏览器中我可以正常加载页面。
另外,我没有在nginx日志文件中看到404任何错误。
任何指针都会很棒。
server_name
必须与link
/script
网址中的主机名匹配。将您的配置声明为此接口的默认配置:端口对(listen 8000 default
)- Nginx必须侦听主机IP绑定的接口(在您的情况下似乎没问题)
我认为在位置块中使用root
是不正确的。我使用alias
并且它工作正常,即使没有重新配置django。
# django settings.py
MEDIA_URL = '/static/'
# nginx server config
server {
...
location /static {
autoindex on;
alias /opt/aa/webroot/;
}
}
希望这会让事情变得更简单。
MEDIA_URL不得用于提供像js等静态内容.Django提供了一个可以使用的单独的STATIC_URL设置选项。
所以这可以改为
<script type="text/javascript" src="{{STATIC_URL}}js/jquery-1.3.2.min.js"></script>
此外,它更标准地使用静态文件app 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方面。
Fim&Alexander - 感谢那些有帮助的提示。 以下是我为那些被困在同一条船上的人解决的问题 -
settings.朋友 -
>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>
在我的views.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
以上是关于django:通过nginx提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章
docker、nginx、django 以及如何提供静态文件
Django 不使用 NGINX + GUNICORN 提供静态文件
使用 Docker、nginx 和 gunicorn 提供 Django 静态文件