我在 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.js
或href={{MEDIA_URL}}css/bar.css
。
在您的 nginx 配置中,您需要为 MEDIA_URL 添加一个适当的条目。例如:
server {
...
location /site_media/ {
autoindex on;
root /opt/aa/webroot/;
}
}
这应该可以解决问题。只需检查一下,您就可以将其添加/static/
到包含的 js/css 文件的 href/src 中,看看会发生什么。
答案2
server_name
必须与link
/script
URL 中的主机名匹配。要么将您的配置声明为该接口的默认配置:端口对 (listen 8000 default
)- 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