Django静态文件与nginx和独角兽

时间:2014-04-11 03:17:05

标签: django nginx static vps gunicorn

我正在尝试将我的django应用程序部署到我的VPS。所以我遵循了几个教程,我遇到的唯一问题是我无法显示静态文件。所以下面你可以在VPS上找到我文件的结构。

  • 虚拟环境:/ opt / myapps /
  • Django项目:/ opt / myapps / uniprogress /
  • 静态文件:/ opt / myapps / uniprogress / static /

Nginx config:/ etc / nginx / sites-available / uniprogress

server {
    server_name 188.xxx.xxx.93;

    access_log off;

    location /static/ {
        alias /opt/myapps/uniprogress/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        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"';
    }
}

最后在我的django settings.py中:

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Template Dirs

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_ROOT = '/opt/myapps/uniprogress/static/'
STATIC_URL = '/static/'

我还使用了:python manage.py collectstatic但我的静态文件仍然无法显示。

更新 我使用的教程可以在Digital Ocean找到。

我仔细检查了服务器上是否存在文件。

我也可以访问静态文件,例如:http://188.xxx.xxx.93/static/css/bootstrap.css

但是在我的源代码http://188.xxx.xxx.93:8001/中,它使用端口链接静态文件。

这意味着:<link href="/static/css/bootstrap.css" rel="stylesheet">

所以它试图在http://188.xxx.xxx.93 :8001 /static/bootstrap.css找到bootstrap.css并且文件不存在(必须删除帖子以使其工作)

3 个答案:

答案 0 :(得分:2)

要提供静态文件,请在nginx级别执行,如

server {
server_name 188.xxx.xxx.93;

access_log off;

location ~ ^/(static)/  {
  #  root:- you static files path
  #  alias /opt/myapps/uniprogress/static/;
     root /opt/myapps/uniprogress/static/;
}

location / {
    proxy_pass http://127.0.0.1:8001;
    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"';
}
}

现在所有静态文件都将从你的nginx提供。

答案 1 :(得分:1)

您的STATIC_ROOT正在收集静态文件:

/选择/安装MyApps / uniprogress /选择/安装MyApps / uniprogress /静态/

这与您的服务器配置不符,该配置指向:

选择/安装MyApps / uniprogress /静态/

STATIC_ROOT只是一个文件夹,可以将所有静态文件(图像,css,所有内容)保存在一个地方进行部署,因此请将其设置为“/ gather_static /”并修复服务器配置。

答案 2 :(得分:0)

检查这件事

1 nginx是否可以访问静态旧版本,我的意思是文件夹权限。

2或者这样做

替换它:

STATIC_ROOT = '/opt/myapps/uniprogress/static/'

用这个

STATIC_ROOT = ''

并在设置中添加

STATICFILES_DIRS = (
     '/opt/myapps/uniprogress/static/',
)

希望这有效。