2013-06-30 31 views
7

Đây là cấu hình nginx tôi:Phục vụ các tập tin tĩnh với Nginx + Gunicorn + Django

server { 
     listen 80; 
     server_name localhost; 

     keepalive_timeout 5; 

     access_log /home/tunde/django-projects/mumu/nginx/access.log; 
     error_log /home/tunde/django-projects/mumu/nginx/error.log; 

     root /home/tunde/django-projects/mumu; 

     location/{ 
      try_files $uri @proxy_to_app; 
     } 

     location @proxy_to_app { 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_pass http://127.0.0.1:8000; 
     } 
    } 

settings.py của tôi trông giống như:

import os 
    settings_dir = os.path.dirname(__file__) 
    PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir)) 

    STATIC_ROOT = '/home/tunde/django-projects/mumu/STATIC/' 
    STATIC_URL = '/static/' 

    STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static/'), 
    ) 

tập tin supervisord.conf tôi trông như thế:

[program: mumu] 
command = /home/tunde/ENV1/bin/gunicorn -w 1 --bind=127.0.0.1:8000 mumu.wsgi:application 
directory = /home/tunde/django-projects/mumu/ 
stdout_logfile= /home/tunde/django-projects/mumu/supervisor/logfile.log 
stderr_logfile= /home/tunde/django-projects/mumu/supervisor/error.log 
user = tunde 

Vấn đề là các tệp tĩnh không được phân phát và tôi không biết mình đang làm gì sai. Một url như /static/css/styles.css trả về 404. Trợ giúp sẽ được đánh giá cao.

Trả lời

18

Bạn cần tạo khối vị trí nginx khớp với vị trí của django STATIC_URL của bạn. Như bạn đã cấu hình, nginx cũng chuyển tiếp các yêu cầu cho các tài sản tĩnh đến ứng dụng django của bạn. Tôi đoán bạn đang nhìn thấy lỗi 404 trong nhật ký ứng dụng django của bạn? Bạn muốn nginx xử lý các yêu cầu này, chứ không phải django.

location /static { 
    alias /home/tunde/django-projects/mumu/STATIC/; 
} 

Hãy chắc chắn để chạy django admin commandcollectstatic để đảm bảo tất cả các tài sản tĩnh được sao chép vào thư mục STATIC_ROOT.

+0

Cảm ơn @scott Do một kinh nghiệm trước đây với Django bằng cách nào đó bỏ qua các tập tin tĩnh được lưu trữ trong một thư mục gọi là "tĩnh", tôi quyết định thay đổi vị trí và tên cho tĩnh của tôi các tập tin. Sau khi khởi động lại nginx, cấu hình của tôi hoạt động mà không cần phải thêm khối vị trí được đề xuất của bạn. – Tundebabzy

+0

Khi bạn xem tệp nhật ký giám sát của mình, bạn có thấy các yêu cầu đi qua cho các tệp tĩnh (img, css, javascript) không? –

+0

logfile.log của tôi tức là stdout_logfile trong supervisord.conf hoàn toàn trống – Tundebabzy

0
location/{ 
    try_files $uri @proxy_to_app; 
} 

Vui lòng thay đổi $uri -> $request_uri

location/{ 
    try_files $request_uri @proxy_to_app; 
} 
Các vấn đề liên quan