Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I host my Djangoproject on Nginx with uwsgi. staticfiles need to be served separately by Nginx

server { 
    listen 80; 

    location /static { 
        root /home/user/blog/staticfiles; 
        access_log   off; 
        expires      30d; 

    location / {
       include uwsgi_params;
       uwsgi_pass unix:/tmp/blog.socket;

    access_log      /var/log/nginx/blog.access.log combined;
    error_log       /var/log/nginx/blog.error.log warn;

My STATIC_URL is set to The folder /home/user/blog/staticfiles contains a folder static, where the files are collected into. so according to other posts here everything sholud work -- but it doesn't. the uwsgi part works just fine, but I only get a 404 when I try to access the static files.

share|improve this question
Are you sure you didn't forget to add another /static to the root? You claim to have another level, but it doesn't reflect in the config. – gertvdijk Dec 13 '12 at 0:55

This needs some general cleanup:

  • Your server block has two location / blocks, which is not permitted; one of them will be ignored. Use only one location block for any given location.
  • Your server block has no root defined. Make sure that root is defined only in the server block, and not in the location blocks (unless a location needs a different root).

I also recommend not turning off the access_log or using expires while debugging, as this can make it more difficult to isolate the cause of a problem.

Though to really fix this, consider rewriting it entirely. A very short example:

server {
    location @django {
        include uwsgi_params; 
        uwsgi_pass unix:/tmp/blog.socket; 

    location / {
        try_files $uri $uri/ @django;
share|improve this answer
thx for your reply, but if there's only one location block allowed, how are configs like this supposed to work ? – Trolli Schmittlauch Dec 13 '12 at 7:39
None of the location blocks in that question or answer are duplicates, as yours is. – Michael Hampton Dec 13 '12 at 8:27
Ooops, the duplicate was just a mistake when I posted from my phone – Trolli Schmittlauch Dec 13 '12 at 11:11
It still doesn't work, but this config should look a bit cleaner: server { listen 80; server_name; location @django { include uwsgi_params; uwsgi_pass unix:/tmp/blog.socket; } location / { try_files $uri $uri/ @django; } location /static { root /home/django/blog/staticfiles; #access_log off; expires 0d; } access_log /var/log/nginx/blog.access.log combined; error_log /var/log/nginx/blog.error.log warn; } – Trolli Schmittlauch Dec 13 '12 at 11:21

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.