Django应用程序“ myvideoproj”,共有2页。第1页列出视频。单击视频的链接,重定向到第2页。第2页播放视频。
有效:第1页列出所有视频。第2页播放视频。
视频文件不是静态的。
然后,在生产服务器中为Django应用程序配置nginx,gunicorn。
第1页可以列出视频。 Page 2没有发挥作用。
我认为第2页的nginx配置未正确配置。
请帮助!
settings.py
hostname = socket.gethostname()
SERVER_LIST = {
'myserver’': {
'movie_dir': '/path/my/home/video/', # store all video
'siteicon_url': 'www.mydomain.com:8000',
'url_playmovie': www.mydomain.com:8000/playvideo/',
},
}
SERVER = SERVER_LIST[hostname]
MOVIES_DIR = SERVER['movie_dir']
URL_VIDEOLIST = SERVER['siteicon_url']
URL_PLAYMOVIE = SERVER['url_playmovie']
if DEBUG:
STATIC_ROOT = os.path.join(BASE_DIR, '/static')
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
(os.path.join(SITE_ROOT, 'static/')),
MOVIES_DIR, # Make sure page 2 is able to find real location of video, which is NOT under static.
)
第1页html示例。用户可以单击它。
<a href=".....mydomain.com:8000/playvideo/encoded_myvideo_sample.mp4">
<img src="data:image/png;base64,..blablathumbnail..==" atl="">
</a>
视频文件的真实位置:
/path/my/home/video/myvideo_sample.mp4
第1页的url中的视频文件名是base64编码的。
第2页html示例。如果没有nginx,gunicorn(在命令行中启动django服务器),它将播放视频。使用nginx,gunicorn(启动nginx服务和gunicorn服务,它不起作用。
<div class="player">
<video id="video" width="640" height="420" controls="" autoplay="">
<source src="/static/myvideo_sample.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
views.py
def playvideo(request, encoded_movie_name):
# encoded_movie_name = 'encoded_myvideo_sample.mp4'
decoded_videofile = url_decode(encoded_movie_name)
# decoded_videofile = 'myvideo_sample.mp4'
args['movie'] = decoded_videofile
response = shortcuts.render_to_response('playvideo.html', args)
return response
playvideo.html
<div class='player'>
<video id="video" width="640" height="420" controls autoplay>
<source src="{% static '' %}{{movie}}" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
我用一个小的django应用程序测试了nginx,gunicorn安装。有用。然后,我按照相同的过程为“ myvideoproj”配置nginx,gunicorn,并遇到上述问题。
可能是nginx配置没有此URL的配置吗?
....mydomain.com:8000/playvideo/
/ etc / nginx / sites-available / myvideoproj如下:
server {
listen 8000;
server_name 0.0.0.0;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /projectpath/myvideoproj;
}
location / {
include proxy_params;
proxy_pass http://unix:/projectpath/myvideoproj/myvideoproj.sock;
}
}
Chrome调试器中的错误
Failed to load resource: the server responded with a status of 404 (Not Found) encoded_myvideo_sample.mp4
/ etc / nginx / sites-available / myvideoproj或其他配置中缺少什么?第1页中的视频文件名已编码,并已在playvideo()函数中解码。如何配置nginx使其可以在/ path / my / home / video /目录中加载视频文件?