views:

337

answers:

2

I'm running django on ubuntu server 9.04

Django works well, but nginx doesn't return static files - always 404.

Here's the config:

server {
                listen 80;
                server_name localhost;


                #site_media - folder in uri for static files
                location /static  {
                       autoindex    on;
                       root /home/user/www/oil/oil_database/static_files;
                       }

                #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) {

                 #      root /home/user/www/oil/oil_database/static_files;
                 #      access_log   off; 
                 #      expires      30d; 
                #}


                location / {
                        root html;
                        index index.html index.htm;
                        # host and port to fastcgi server
                        #fastcgi_pass 127.0.0.1:8080;
                        fastcgi_pass unix:/home/user/www/oil/oil_database/oil.sock;
                        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;
                error_log       /var/log/nginx/localhost.error_log;

        }

Nginx version is 0.6.35.

All directories exist and made 777 (debugging paranoia). The commented-out block doesn't help when i uncomment it.

Any ideas? My brain is ready to blow :(

+5  A: 

How is your directory setup? Do you have a folder static in /home/user/www/oil/oil_database/static_files? In that case, the directive should look like this (note the trailing slash in /static/):

location /static/  {
    autoindex    on;
    root /home/user/www/oil/oil_database/static_files;
}

If you want to map the path /home/user/www/oil/oil_database/static_files to the URL /static/, you have to either

  • rename the folder static_files to static and use this directive:

    location /static/  {
        autoindex    on;
        root /home/user/www/oil/oil_database/;
    }
    
  • use an alias:

    location /static/  {
        autoindex    on;
        alias /home/user/www/oil/oil_database/static_files/;
    }
    

See the documentation on the root and alias directives.

piquadrat
+1 beat me to it. :-)
Ryan Duffield
no, there is no "static" dir. Thank you, i'll try out the alias.
DataGreed
alias worked! Great, thank you very much :)
DataGreed
A: 

I have a similar config for my Django sites, but I think you want to use alias instead of root for your media. For example:

location /static {
    alias /home/user/www/oil/oil_database/static_files;
}
Ryan Duffield