django:通过 nginx 提供静态文件服务

django:通过 nginx 提供静态文件服务

我在 django 中使用 apache+mod_wsgi。
所有css/js/images服务都通过 nginx 提供。
出于某些奇怪的原因,others/friends/colleagues尝试访问网站时,网站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目录。

奇怪的是,当我访问这些页面时,它们显示正常。我已清除了我的cache/etc,但从各种浏览器访问时,页面都可以正常加载。

另外,我没有在 nginx 日志文件中看到任何 404 错误。实际上,nginx 的日志根本没有刷新。
我使用 root 重新启动了 nginx 服务器,这不正确吗?nginx 配置文件中定义了一个用户 www-data。

任何指点都将十分有帮助。

答案1

首先,当使用 django 时,最好使用 settings.py 中定义的 MEDIA_URL 来提供 css/js。

现在,假设MEDIA_URL='/site_media/'您的模板中有 并且src={{MEDIA_URL}}js/foo.jshref={{MEDIA_URL}}css/bar.css

在您的 nginx 配置中,您需要为 MEDIA_URL 添加一个适当的条目。例如:

server {
     ...

     location /site_media/ {    
        autoindex on;    
        root   /opt/aa/webroot/;    
     }    
 }   

这应该可以解决问题。只需检查一下,您就可以将其添加/static/到包含的 js/css 文件的 href/src 中,看看会发生什么。

答案2

  1. server_name必须与link/ scriptURL 中的主机名匹配。要么将您的配置声明为该接口的默认配置:端口对 ( listen 8000 default)
  2. Nginx 必须监听你主机 IP 绑定的接口(在你的情况下似乎没问题)

答案3

我将所做的内容放在这里,因为评论区似乎把它弄乱了。

菲姆与阿拉兹- 感谢这些有帮助的提示。
以下是我为遇到同样问题的人解决的方法 -

settings.py-

媒体根目录 = ''
媒体网址 = 'http://xxxx:8000/静态/

In my html-

< 脚本类型="text/javascript" src="{{MEDIA_URL}}js/jquery-1.3.2.min.js" /> </script>

In my view-

返回render_to_response('templates/login-register.html',{},context_instance=RequestContext(request));

nginx-

监听 xxxx:8000;
服务器名称 xxxx;

Restarted nginx
Restarted apache

相关内容