python - 这个找不到媒体目录的 Nginx 配置有什么问题?
问题描述
我正在使用我在本地 Ubuntu Server 18.04 LTS 上使用 Gunicorn、Nginx、Redis 和 Postgresql 托管的视频博客演示 Django 项目。我已经在 Virtualbox 上安装了这个服务器并分配了一个固定的 IP。静态文件(html、css、js)运行良好,但没有显示视频和媒体文件夹的默认图像文件。静态和媒体文件夹都在项目根目录中。我认为没有正确配置 Nginx 配置文件。但是当我用开发服务器检查它们时一切正常。亲爱的,我很新,缺乏高级编程知识。这就是为什么,我请求你帮助解决这个问题。如果有任何错误,请查看下面的代码。提前致谢!
来自浏览器控制台的错误
Failed to load resource: the server responded with a status of 403 (Forbidden) /media/videos/2019/10/02/Algebra_Basics-_What_Is_Algebra_-_Math_Antics.mp4:1
项目结构
settings.py 文件的一部分
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'kiji/static')
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
# For sending email
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# Redis Configuration
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0
Nginx 配置
server {
listen 80;
server_name 192.168.1.44;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/djangoadmin/pyapps/kiji_project/;
}
location /media/ {
root /home/djangoadmin/pyapps/kiji_project/;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Gunicorn的确认
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=djangoadmin
Group=www-data
WorkingDirectory=/home/djangoadmin/pyapps/kiji_project
ExecStart=/home/djangoadmin/pyapps/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
kiji.wsgi:application
[Install]
WantedBy=multi-user.target
视频的models.py文件
from django.db import models
from django.conf import settings
from django.utils import timezone
from django.contrib.auth.models import User
from teacher.models import Teacher
from django.urls import reverse
class Post(models.Model):
teacher = models.ForeignKey(Teacher, on_delete = models.DO_NOTHING,
blank=True, null=True,
related_name='blog_teachers')
author = models.ForeignKey(User, on_delete = models.CASCADE,
related_name='blog_posts')
title = models.CharField(max_length = 100)
clip = models.FileField(upload_to = 'videos/%Y/%m/%d/')
description = models.TextField(max_length = 2400, blank = True)
publish = models.DateTimeField(default = timezone.now)
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', args = [self.id])
默认图像的 models.py 文件
from django.db import models
from django.conf import settings
from PIL import Image
class Profile(models.Model):
name = models.CharField(max_length = 30)
present_address = models.CharField(max_length = 200)
permanent_address = models.CharField(max_length = 200)
mobile_number = models.CharField(max_length = 14, unique = True, null=True)
profile_picture = models.ImageField(default = 'default_profile.jpg', upload_to='users/%Y/%m/%d/')
def __str__(self):
return f'{self.user.username} Profile'
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.profile_picture.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.profile_picture.path)
解决方案
推荐阅读
- c# - 根据 Id 将一个列表中的值分配给另一个列表
- javascript - 无法通过 onclick 加载 html 表格
- reactjs - 将属性添加到窗口对象并在导入组件之前使用它
- java - TimeSeries Rest API https://monitoring.googleapis.com/v3/projects/../timeseries 返回空
- java - 文本字段 Wicket 的错误消息中的单引号
- sendgrid - UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND api.sendgrid.com api.sendgrid.com:443 发送邮件时
- swift - JSON 字符串转 UUID 格式
- r - 自动格式化日期
- javascript - 谷歌登录后重定向到“下一步”。{烧瓶}
- iphone - SVG 徽标在移动设备上的字体与桌面不同