Nginx + Gunicorn + Django – nginx不允许使用静态文件

更新的代码 – 这仍然不工作。

Settings.py

STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/' STATIC_URL = '/static/' 

nginx conf :: / etc / nginx / sites-enabled / mysite

 server { server_name ec2-xxxx.compute-1.amazonaws.com; access_log /home/ubuntu/virtualenv/mysite/error/access.log; error_log /home/ubuntu/virtualenv/mysite/error/error.log warn; connection_pool_size 2048; location /static/ { #alias /home/ubuntu/virtualenv/mysite/homelaunch/static/; #alias /static/; root /home/ubuntu/virtualenv/mysite/homelaunch/; } location / { proxy_pass http://127.0.0.1:8001; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_set_header X-Forwarded-Host $server_name; #proxy_set_header X-Real-IP $remote_addr; add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; } } 

gunicornconfiguration

 command = '/usr/local/bin/gunicorn' logfile = "/home/ubuntu/virtualenv/mysite/error/gunicorn.log" loglevel = "info" pythonpath = '/home/ubuntu/virtualenv/mysite' bind = '127.0.0.1:8001' 

完整pathimg目录和css目录:

 /home/ubuntu/virtualenv/mysite/homelaunch/static/css /home/ubuntu/virtualenv/mysite/homelaunch/static/img 

在error.log中接收错误:

 001/favicon.ico", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com" 2013/09/02 16:57:42 [error] 2819#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: ec2-xx-xx-xx-xx.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com" 

任何明显错误的东西? 当我尝试通过输出的html源文件查看它们时,我仍然在img和css文件上都遇到了404错误。

这个答案已经被编辑来总结解决scheme。

在nginx的configuration中

更换:

 alias /home/ubuntu/virtualenv/mysite/homelaunch/; 

有:

 root /home/ubuntu/virtualenv/mysite/homelaunch/; 

请参阅文档了解更多详情。

更换:

 proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; 

有:

 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

在gunicorn的configuration

更换:

 bind = 'ec2-xxxx.compute-1.amazonaws.com:8001' 

有:

 bind = '127.0.0.1:8001' 

在Django的设置

设置STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/' ,这是正确的绝对文件系统path。

设置DEBUG = True更详细的错误信息。

replace这个:

 location /static/ { alias /home/ubuntu/virtualenv/mysite/homelaunch/; } 

对于这一个:

 location /static/ { alias /home/ubuntu/virtualenv/mysite/homelaunch/static/; } 

如果你做别名,你需要把绝对path,因为你已经在settings.py上定义了静态目录

 STATIC_URL = '/static/' 

所以如果你把别名这个dir / home / ubuntu / virtualenv / mysite / homelaunch /;

Nginx认为静态文件在/ home / ubuntu / virtualenv / mysite / homelaunch /而不在/ home / ubuntu / virtualenv / mysite / homelaunch / static

对不起,我的英语不好,我试图改善:(

我希望你能理解我。