2011-12-03 28 views
12

Tôi mới ở Nginx, tôi đã thành công ràng buộc dự án django của tôi với Nginx. Tuy nhiên tôi không thể phục vụ các tệp tĩnh của mình và tôi đoán tôi đã đặt sai vị trí thư mục phương tiện của mình. Đây là cây tập tin của tôi:Làm cách nào để phân phối các tệp phương tiện django qua nginx?

root_directory 
    my_django_project 
     ... 
     manage.py 
     app1 
     app2 
     media 
      admin 
      css 
      js 
      ... 

Và nginx.conf tôi đi như thế:

 server { 
       listen 192.168.1.9:80; 
       server_name localhost; 
       # site_media - folder in uri for static files                         

      location /media/ { 
      root /home/nazmi/workspace/portal/media/;                      
       } 

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) { 
    access_log off; # po co mi logi obrazków :)                            
    expires  30d; 
} 
       location/{ 
         # host and port to fastcgi server                          
         fastcgi_pass 127.0.0.1:8080; 
      fastcgi_param PATH_INFO $fastcgi_script_name; 
         fastcgi_param REQUEST_METHOD $request_method; 
         fastcgi_param QUERY_STRING $query_string; 
         fastcgi_param CONTENT_TYPE $content_type; 
         fastcgi_param CONTENT_LENGTH $content_length; 
      fastcgi_pass_header Authorization; 
         fastcgi_intercept_errors off; 
         } 
       access_log  /var/log/nginx/localhost.access_log main; 
       error_log  /var/log/nginx/localhost.error_log; 
     } 
} 

Khi tôi mở trang quản trị của tôi, tất cả các trang css cho lỗi 404. Bạn có thể cho tôi biết cách tôi có thể đặt đường dẫn phương tiện của mình một cách chính xác không?

Trả lời

31

Dưới đây là một ví dụ về làm thế nào tôi có tôi thiết lập máy chủ nginx

server { 
    server_name example.com www.example.com; 
    location /static { 
     autoindex on; 
     alias /home/myusername/myproject/static/; 
    } 
    location /media { 
     autoindex on; 
     alias /home/myusername/myproject/media/; 
    } 
    location/{ 
     proxy_pass http://127.0.0.1:8000; 
    } 
} 

tôi phục vụ django với Gunicorn trên cổng localhost 8000. (đó là những gì các proxy_pass là cho)

Các Nginx wiki example configuration có thể giúp bạn cũng vậy. Thông báo trong tệp tĩnh của họ phục vụ họ chỉ định cho phép filetypes và sử dụng 'root' thay vì 'bí danh' nhưng họ là tương tự.

Câu hỏi ServerFault này có thể hữu ích.

+3

Đối với người dùng mới: Đừng quên thêm 'include /etc/nginx/mime.types;' vì tệp phương tiện của bạn sẽ bị trình duyệt bỏ qua nếu chúng được phân phối với mimetype mặc định là 'text/plain' –

+0

Tôi muốn phương tiện truyền thông máy chủ được gửi bởi các url khác nhau, ví dụ: "media.example.com". làm thế nào tôi có thể đạt được điều đó? – Kishan

Các vấn đề liên quan