Nginx 不为 Amazon EC2 中的 Django 提供静态文件 - 404 错误
Nginx not serving static files for Django in Amazon EC2 - 404 Error
我对 Django 开发和 Nginx 配置还很陌生。
使用 gunicorn 和 Nginx 在 Amazon EC2 中部署应用程序后,页面加载时没有静态文件(css、js 等)。
我怀疑是Nginx无法加载静态文件。我花了几个小时试图调整 Nginx 配置,并阅读了其他答案,但仍然没有运气。
如有任何正确方向的提示,我们将不胜感激。
/etc/nginx/sites-available/sbs
server{
listen 80;
server_name my_server_host;
location = /favicon.ico {
access_log off; log_not_found off;
}
location /static/ {
autoindex on;
root /home/ubuntu/secure-banking-system/sbs/static/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
}
}
settings.py
STATIC_ROOT = '/home/ubuntu/secure-banking-system/sbs/static'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'sbs/static')
]
我已经验证静态文件在 /home/ubuntu/secure-banking-system/sbs/static/
中可用
文件结构
secure-banking-system
|
|──sbs
|
|────│
│
├── sbs
│ |
│ └── static
│ ├── css
│ ├── images
│ └── js
|
├── static
├── css
├── images
└── js
root
指令不会从请求中删除 /static
部分。所以请求
http://my_server_hos/static/foo/test.png
将使 nginx 在
中查找文件
/home/ubuntu/secure-banking-system/sbs/static/static/foo/test.png
.
据了解,/static
位置的配置应为:
location /static {
autoindex on;
root /home/ubuntu/secure-banking-system/sbs;
}
另一种方法是使用 alias
指令:
location /static {
autoindex on;
alias /home/ubuntu/secure-banking-system/sbs/static;
}
这就是最终对我有用的方法。我还清除Python缓存文件和*.pyc因为我在settings.py没有反应。
/etc/nginx/sites-available/sbs
server{
listen 80;
server_name my_server_host;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/ubuntu/secure-banking-system/sbs/static/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
}
}
settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'sbs/static/')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'sbs/static/')
]
我对 Django 开发和 Nginx 配置还很陌生。 使用 gunicorn 和 Nginx 在 Amazon EC2 中部署应用程序后,页面加载时没有静态文件(css、js 等)。
我怀疑是Nginx无法加载静态文件。我花了几个小时试图调整 Nginx 配置,并阅读了其他答案,但仍然没有运气。
如有任何正确方向的提示,我们将不胜感激。
/etc/nginx/sites-available/sbs
server{
listen 80;
server_name my_server_host;
location = /favicon.ico {
access_log off; log_not_found off;
}
location /static/ {
autoindex on;
root /home/ubuntu/secure-banking-system/sbs/static/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
}
}
settings.py
STATIC_ROOT = '/home/ubuntu/secure-banking-system/sbs/static'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'sbs/static')
]
我已经验证静态文件在 /home/ubuntu/secure-banking-system/sbs/static/
文件结构
secure-banking-system
|
|──sbs
|
|────│
│
├── sbs
│ |
│ └── static
│ ├── css
│ ├── images
│ └── js
|
├── static
├── css
├── images
└── js
root
指令不会从请求中删除 /static
部分。所以请求
http://my_server_hos/static/foo/test.png
将使 nginx 在
中查找文件/home/ubuntu/secure-banking-system/sbs/static/static/foo/test.png
.
据了解,/static
位置的配置应为:
location /static {
autoindex on;
root /home/ubuntu/secure-banking-system/sbs;
}
另一种方法是使用 alias
指令:
location /static {
autoindex on;
alias /home/ubuntu/secure-banking-system/sbs/static;
}
这就是最终对我有用的方法。我还清除Python缓存文件和*.pyc因为我在settings.py没有反应。
/etc/nginx/sites-available/sbs
server{
listen 80;
server_name my_server_host;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/ubuntu/secure-banking-system/sbs/static/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
}
}
settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'sbs/static/')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'sbs/static/')
]