Как настроить nginx, gunicorn, чтобы Django мог обслуживать динамически закодированный URL-адрес видео - PullRequest
1 голос
/ 04 мая 2019

Django приложение "myvideoproj" с 2 страницами. Page1 список видео. Нажмите на ссылку видео, перенаправляет на страницу 2. Страница 2 воспроизводит видео.

Работает: на странице 1 список всех видео. Страница 2 воспроизводит видео.

Видео файлы не являются статичными.

Затем настройте nginx, gunicorn для приложения django на рабочем сервере.

Страница 1 может отображать видео. Страница 2 не воспроизводит видео.

Я думаю, что конфигурация nginx не настроена правильно для страницы 2.

Пожалуйста, помогите!

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.
)

Пример страницы 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

Имя видеофайла в URL страницы 1 закодировано в base64.

Образец 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>

Я тестировал установку nginx, gunicorn с небольшим приложением django. Оно работает. Затем я следую тому же процессу, чтобы настроить nginx, gunicorn для myvideoproj, и у меня есть вышеуказанная проблема.

Может быть, в конфигурации 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 /?

...