无法在 nginx 中加载媒体文件
Unable to load media files in nginx
我刚刚在 digitalocean 上部署了一个 django 应用程序,我遇到了 nginx 的问题,因为它不提供用户上传的媒体文件。
这是我的 nginx 配置:
upstream app_server {
server unix:/home/sayc/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name www.shelteratyourcrossroads.com;
keepalive_timeout 5;
client_max_body_size 4G;
access_log /home/sayc/logs/nginx-access.log;
error_log /home/sayc/logs/nginx-error.log;
location /static/ {
alias /home/sayc/staticfiles/;
}
# checks for static file, if not found proxy to app
location / {
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
以下是 settings.py 中的一些设置:
...
# Static
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# Media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
# CKEditor Configuration
CKEDITOR_JQUERY_URL = 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'
CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_IMAGE_BACKEND = 'pillow'
CKEDITOR_CONFIGS = {
'default' : {
'toolbar' : None,
}
}
...
models.py:
class Post(models.Model):
...
image = models.ImageField(upload_to='posts/%Y/%m/%d', blank=True)
...
class Profile(models.Model):
...
image = models.ImageField(upload_to='users/%Y/%m/%d', null=True, blank=True)
...
上面 models.py 文件中每个 类 中的图像字段表示我的媒体目录中有两个子文件夹 - media/posts
和 media/users
。此外,还有另一个子文件夹 media/uploads
- 这是由 CKEDITOR_UPLOAD_PATH 设置添加的。这就是三个。
我希望这足以帮助调试我的 nginx 配置问题。
您需要添加
location /media/ {
alias /home/sayc/<project_name>/media/; # change project_name
}
在您的 Nginx 配置中。
自从
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'staticfiles')
我猜不出你的媒体文件的完整路径:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
我刚刚在 digitalocean 上部署了一个 django 应用程序,我遇到了 nginx 的问题,因为它不提供用户上传的媒体文件。
这是我的 nginx 配置:
upstream app_server {
server unix:/home/sayc/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name www.shelteratyourcrossroads.com;
keepalive_timeout 5;
client_max_body_size 4G;
access_log /home/sayc/logs/nginx-access.log;
error_log /home/sayc/logs/nginx-error.log;
location /static/ {
alias /home/sayc/staticfiles/;
}
# checks for static file, if not found proxy to app
location / {
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
以下是 settings.py 中的一些设置:
...
# Static
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# Media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
# CKEditor Configuration
CKEDITOR_JQUERY_URL = 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'
CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_IMAGE_BACKEND = 'pillow'
CKEDITOR_CONFIGS = {
'default' : {
'toolbar' : None,
}
}
...
models.py:
class Post(models.Model):
...
image = models.ImageField(upload_to='posts/%Y/%m/%d', blank=True)
...
class Profile(models.Model):
...
image = models.ImageField(upload_to='users/%Y/%m/%d', null=True, blank=True)
...
上面 models.py 文件中每个 类 中的图像字段表示我的媒体目录中有两个子文件夹 - media/posts
和 media/users
。此外,还有另一个子文件夹 media/uploads
- 这是由 CKEDITOR_UPLOAD_PATH 设置添加的。这就是三个。
我希望这足以帮助调试我的 nginx 配置问题。
您需要添加
location /media/ {
alias /home/sayc/<project_name>/media/; # change project_name
}
在您的 Nginx 配置中。
自从
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'staticfiles')
我猜不出你的媒体文件的完整路径:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')