使用 Django/nginx 我的静态内容出现 404 错误是什么原因?
What am I getting 404 errors with my static content using Django/nginx?
None 我的媒体或静态内容出现,每次加载页面时我都会看到所有这些内容的 404 错误。
来自我的 nginx/sites-enabled 的片段(下面这些位置是我希望放置静态和媒体内容的理想位置)
location /media {
alias /home/django/django/proj/proj/media;
}
location /static {
alias /home/django/django/proj/proj/static;
}
我的 settings.py
中所有 'static' 相关内容的片段
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "media")
MEDIA_URL = "/media/"
STATIC_ROOT = os.path.join(PACKAGE_ROOT, "static")
STATIC_URL = "/static/"
# Additional locations of static files
STATICFILES_DIRS = [
os.path.join(PACKAGE_ROOT, "static"),
]
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
更改 nginx 配置中的路径(注意 site_media
部分)?
location /media {
alias /home/django/django/proj/proj/site_media/media;
}
location /static {
alias /home/django/django/proj/proj/site_media/static;
}
并更改 MEDIA_URL
设置以指向有效 url:
MEDIA_URL = "/media/"
STATIC_URL = "/static/"
您的 nginx 别名必须与您的 STATIC_ROOT
和 MEDIA_ROOT
设置相匹配,否则 nginx 将不知道在哪里可以找到这些文件。
location /media {
alias /home/django/django/proj/proj/site_media/media;
}
location /static {
alias /home/django/django/proj/proj/site_media/static;
}
如果这不起作用,请检查 nginx 在错误日志中尝试查找文件的位置。
提供媒体文件非常简单:您只需告诉 nginx 向 MEDIA_URL + '<filename>'
发出的请求应该提供名为 MEDIA_ROOT + '<filename>'
的文件。这些是您在 nginx 中的 location
和 alias
设置。
静态文件有点复杂。 Django 处理静态文件的方式是 manage.py collectstatic
使用你的 STATICFILES_FINDERS
来查找所有静态文件。这包括 STATICFILES_DIRS
目录中的所有文件。在您的 STATIC_ROOT
目录中创建一个具有相同相对名称的 symbolic link。
由于您无法创建与文件 link 具有完全相同的完整路径+名称的符号 link,因此您的 STATIC_ROOT
需要与您的不同STATICFILES_DIRS
。如果您的所有静态文件都位于应用程序特定的静态文件夹中,则可以省略 STATICFILES_DIRS
。但是,STATIC_ROOT
设置是必需的,因为 Django 需要 一个用于所有符号 link 的文件夹,以便收集文件。
这些符号 link 是一种允许第三方应用程序(不在您的项目根目录中)仍然提供静态文件的方法。即使您的静态文件可能无处不在,例如在包含 python 个软件包的文件夹中,您只需要为静态文件的一个特定位置配置 nginx。这大大简化了您的服务器配置。
那些象征性的 link 也是为什么您 总是 需要 运行 collectstatic
在您对静态文件进行更改后文件。否则,nginx 将找不到 link 告诉实际文件所在的位置,并且无法提供该文件。
None 我的媒体或静态内容出现,每次加载页面时我都会看到所有这些内容的 404 错误。
来自我的 nginx/sites-enabled 的片段(下面这些位置是我希望放置静态和媒体内容的理想位置)
location /media {
alias /home/django/django/proj/proj/media;
}
location /static {
alias /home/django/django/proj/proj/static;
}
我的 settings.py
中所有 'static' 相关内容的片段MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "media")
MEDIA_URL = "/media/"
STATIC_ROOT = os.path.join(PACKAGE_ROOT, "static")
STATIC_URL = "/static/"
# Additional locations of static files
STATICFILES_DIRS = [
os.path.join(PACKAGE_ROOT, "static"),
]
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
更改 nginx 配置中的路径(注意 site_media
部分)?
location /media {
alias /home/django/django/proj/proj/site_media/media;
}
location /static {
alias /home/django/django/proj/proj/site_media/static;
}
并更改 MEDIA_URL
设置以指向有效 url:
MEDIA_URL = "/media/"
STATIC_URL = "/static/"
您的 nginx 别名必须与您的 STATIC_ROOT
和 MEDIA_ROOT
设置相匹配,否则 nginx 将不知道在哪里可以找到这些文件。
location /media {
alias /home/django/django/proj/proj/site_media/media;
}
location /static {
alias /home/django/django/proj/proj/site_media/static;
}
如果这不起作用,请检查 nginx 在错误日志中尝试查找文件的位置。
提供媒体文件非常简单:您只需告诉 nginx 向 MEDIA_URL + '<filename>'
发出的请求应该提供名为 MEDIA_ROOT + '<filename>'
的文件。这些是您在 nginx 中的 location
和 alias
设置。
静态文件有点复杂。 Django 处理静态文件的方式是 manage.py collectstatic
使用你的 STATICFILES_FINDERS
来查找所有静态文件。这包括 STATICFILES_DIRS
目录中的所有文件。在您的 STATIC_ROOT
目录中创建一个具有相同相对名称的 symbolic link。
由于您无法创建与文件 link 具有完全相同的完整路径+名称的符号 link,因此您的 STATIC_ROOT
需要与您的不同STATICFILES_DIRS
。如果您的所有静态文件都位于应用程序特定的静态文件夹中,则可以省略 STATICFILES_DIRS
。但是,STATIC_ROOT
设置是必需的,因为 Django 需要 一个用于所有符号 link 的文件夹,以便收集文件。
这些符号 link 是一种允许第三方应用程序(不在您的项目根目录中)仍然提供静态文件的方法。即使您的静态文件可能无处不在,例如在包含 python 个软件包的文件夹中,您只需要为静态文件的一个特定位置配置 nginx。这大大简化了您的服务器配置。
那些象征性的 link 也是为什么您 总是 需要 运行 collectstatic
在您对静态文件进行更改后文件。否则,nginx 将找不到 link 告诉实际文件所在的位置,并且无法提供该文件。