Nginx为什么找不到Django的静态文件?

时间:2020-02-18 18:09:38

标签: django nginx

我试图了解Django如何使用我在Mac上使用Django 3,Gunicorn和Nginx创建的项目为静态文件提供服务。该网站正确提供了模板,但模板看不到我的CSS样式表。当我进入某个页面(例如127.0.0.1:8000/app1/)并查看源代码时,我在HTML模板中看到了这一点:

<link rel="stylesheet" href="/static/css/main.css">

如果单击href链接,则会在地址http://127.0.0.1:8000/static/css/main.css上看到“未找到”页面。看来这应该是正确的链接,但是模板看不到我期望的main.css样式表。

以下是我的“ mysite”项目中的相关文件,该文件位于/ Users / me / projects / django / django-staticfiles:

├── app1
│   ├── templates
│   │   └── app1
│   │       └── index.html
├── mysite
│   ├── settings.py
│   └── wsgi.py
├── static
│   └── css
│       └── main.css
├── static-final
│   ├── admin
│   │   ├── css
│   │   ├── fonts
│   │   ├── img
│   │   └── js
│   └── css
│       └── main.css

以下是相关设置:

# mysite/settings.py
...
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', ]
...
INSTALLED_APPS = [
    'django.contrib.staticfiles',
    'app1',
]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static-final/')
...

我将Gunicorn安装到我的虚拟环境中,并使用以下命令运行它:

gunicorn --bind 0.0.0.0:8000 mysite.wsgi

我使用Homebrew安装了Nginx。这是nginx.conf的一部分,其中包括我的Nginx设置:

# /usr/local/etc/nginx.conf
...
http {
    ...
    server {
        listen      8080;
        server_name localhost;
    }
    ...
    include server/*;
}

这是我的Nginx配置:

# /usr/local/etc/nginx/servers/django-staticfiles
server {
    listen 80;
    server_name 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    location /static/ {
        alias /Users/me/projects/django/django-staticfiles/static-final;
    }
}

我应该补充一点,当我停止Gunicorn并使用DEBUG = True启动Django的开发服务器时,app1模板可以正确访问main.css文件。当我运行Gunicorn和Nginx时,看不到它。我意识到我并不需要在Mac上运行Gunicorn / Nginx,但我已经对其进行了设置,以便可以比较和对比Django在开发和生产中管理静态文件的方式。

0 个答案:

没有答案