我对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/')
]