【问题标题】:Django fails to serve static file in ec2?Django 无法在 ec2 中提供静态文件?
【发布时间】:2019-11-08 02:26:48
【问题描述】:

我试图使用 nginx 和 uwsgi 在 ec2 实例上部署一个 django 项目。 该项目在本地 PC 上的开发模式下运行良好,并且可以轻松地在 localhost 中提供静态文件。但问题是在 ec2 实例上部署后,它无法加载静态文件(css)文件。

我的项目结构:

设置文件在设置目录中:

部分设置内容:

BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",                                                                                              "django.contrib.staticfiles",
    "control",
] 
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'
STATICFILES_DIRS = (
      os.path.join(BASE_DIR, "static"),
)

nginx 内容:

upstream url_shortener {
    server 127.0.0.1:8000;
}


server {
        listen 80;
    server_name mahbubcseju.com ;
    charset     utf-8;
    location = /favicon.ico {access_log off; log_not_found off; }

    location = /static/ {
        autoindex on;
        alias  /home/ubuntu/projects/url_shortener/static/;
    }

    location / {
        include        /etc/nginx/uwsgi_params;
        uwsgi_pass     url_shortener;
    }
}

uwsgi 内容:

[uwsgi]
project = url_shortener
uid = ubuntu
base = /home/%(uid)

home = %(base)/projects
chdir = %(home)/%(project)
module = %(project).wsgi:application

master = true
processes = 5

chown-socket = %(uid):www-data
chmod-socket = 666
socket  = 127.0.0.1:8000
vacuum = true

plugins = python3,http

我在启动 nginx 服务器之前运行了 python manage.py runserver collectstatic

如果我尝试从浏览器访问 css 文件,则会出现以下错误:

请求:
http://mahbubcseju.com/static/css/home.css
回应:

未找到 在此服务器上找不到请求的资源。

ubuntu 用户的静态目录权限:

drwxrwxrwx 4 ubuntu ubuntu 4096 Nov 7 07:50 静态

【问题讨论】:

  • 请添加请求静态文件时的行为
  • 我注意到您将 uwsgi 作为 ubuntu:www-data 运行。您以什么用户身份运行 nginx?该用户是否对静态文件路径中的每个目录都具有读取权限?
  • @PaulBecotte 这里是静态目录的权限。 drwxrwxrwx 4 ubuntu ubuntu 4096 Nov 7 07:50 静态
  • 对 - 但您还需要检查 /home、/home/ubuntu、/home/ubuntu/projects 和 /home/ubuntu/projects/url_shortener 的权限。 www-data 用户需要访问所有这些(如果我没记错的话,至少是 755)
  • 我尽力了,我也尝试了 sudo chmod -R 777 /home sudo chmod -R 777 /home/ubuntu/ sudo chmod -R 777 /home/ubuntu/projects/ sudo chmod - R 777 /home/ubuntu/projects/url_shortener/ sudo chmod -R 777 /home/ubuntu/projects/url_shortener/static/ sudo chmod -R 777 /home/ubuntu/projects/url_shortener/static/css sudo chmod -R 777 / home/ubuntu/projects/url_shortener/static/css/home.css

标签: django nginx uwsgi


【解决方案1】:

从 nginx 配置中的 location 块中删除 =,假设已在目录上设置了正确的权限以允许 nginx 用户访问,这应该可以工作:

    location /static/ {
        # autoindex on;
        alias  /home/ubuntu/projects/url_shortener/static/;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2022-11-10
    • 2014-07-25
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多