Назад | Перейти на главную страницу

django: обслуживание статических файлов через nginx

Я использую apache + mod_wsgi для django.
И все 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>

Моя конфигурация 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, но у меня страница загружается нормально из разных браузеров.

Кроме того, я не вижу никаких ошибок 404 в файлах журнала nginx. На самом деле журналы для nginx вообще не обновляются.
Я перезапустил сервер nginx с правами root, это неправильно? Пользовательские www-данные определены в файле конфигурации nginx.

Любые указатели были бы замечательными.

  1. server_name должно соответствовать имени хоста в link/script URL-адреса. Либо объявите свою конфигурацию по умолчанию для этого интерфейса: пара портов (listen 8000 default)
  2. Nginx должен прослушивать интерфейс, к которому привязан IP-адрес вашего хоста (в вашем случае это нормально)

Прежде всего, при использовании django лучше, если вы обслуживаете свои css / js, используя MEDIA_URL, как определено в settings.py.

Теперь предположим, что у вас есть 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/ в href / src включенных файлов js / css и посмотрите, что произойдет.

Помещаю то, что я сделал, сюда, поскольку область комментариев, кажется, перепутала.

Фим и Алаз - Спасибо за подсказки, которые помогли.
Вот как я решил это для всех, кто застрял в одной лодке:

settings.py -

MEDIA_ROOT = ''
MEDIA_URL = 'http: //x.x.x.x: 8000 / static /'

In my html -

<script type = "text / javascript" src = "{{MEDIA_URL}} js / jquery-1.3.2.min.js"> </ script>

In my view -

return render_to_response ('templates / login-register.html', {}, context_instance = RequestContext (запрос));

nginx -

слушайте x.x.x.x: 8000;
имя_сервера x.x.x.x .;

Restarted nginx
Restarted apache