2012-09-14 2 views
1

나는 Nginx로 웹 서버를 설치했고, Mongodb 콘텐츠에 액세스하고 클라이언트의 스트림으로 mp3 파일을 재생하기 위해 http_mp4_module을 사용하기 위해 nginx-gridfs 모듈을 사용한다. 위의 두 서비스는 모두 독립적으로 작동하지만, 이들을 결합하려고 할 때 두 가지 서비스를 제공하고 Mongodb에 저장된 mp3 파일에 액세스하여 클라이언트의 스트림으로 재생하려고하면 404 오류가 발생합니다. http_mp4_module이 Gridfs와 함께 작동하지 않는다고 들리지만 파일 시스템에 있던 실제 파일이 필요합니다 .gridfs에서 파일을 가져 와서 Nginx로 스트림으로 재생하는 방법은 무엇입니까?

MongoDB의 컨텐츠를 액세스하는 경우 : 다음은 내 Nginx의 구성 설정입니다 MP3 파일 재생을위한

 location /voice/mp3/ { 
        gridfs whatsup 
          field=filename 
          type=string 
          root_collection=storage.voice.mp3; 
        mongo localhost:27017; 
    } 

: (// myhost의/음성/MP3/xxxxxx.mp3 나는 URL에 http와 MP3 파일에 액세스 할 수 있습니다) 모두 위의 서비스가 잘 작동하는

 location /mp3 { 
       root /var/www/html/; 
       mp4; 
    } 

:하지만, 스트림으로 클라이언트 (MP3 파일은 파일 시스템에 존재한다 // myhost의/MP3/xxxxxx.mp3을 나는 URL을 http로 브라우저로 MP3를 재생할 수 있습니다) 나는 그것들을 결합 할 때 아래의 구성과 같이 작동하지 않습니다 :

 location /play/mp3 { 
        gridfs whatsup 
          field=filename 
          type=string 
          root_collection=storage.voice.mp3; 
        mongo localhost:27017; 

        mp4; 
     } 

브라우저로 http : // myhost/play/mp3/xxxxxx.mp3 URL에 액세스하려고 시도하면 404 오류가 표시됩니다.

두 서비스를 결합하는 아이디어가 있습니까? 또는 내가 놓친 것이 있는지 여부. 이 같은

답변

0

첫째, 로컬 파일 시스템에 URL을 gridfs하여 MongoDB를 리디렉션 구성 귀하의 nginx 서버 : 다음

location/{ 
     root mp3; 
     mp4; 
} 

location /tushuo/voice/mp3/ { 
    rewrite ^/tushuo/voice/mp3/(.*) /$1; 
} 

, 당신이 당신의 로컬 파일 시스템 트리에 MongoDB를의 gridfs를 탑재 gridfs-fuse를 사용하는 nginx를은 MP4 그렇게 할 수 있습니다 모듈에서 찾을 수 있습니다. (참고 :. 당신이 루트로 nginx를 실행해야합니다)

sudo ./mount_gridfs --db=whatsup.storage.tushuo.voice --host=localhost --fsnode=mp3 -/usr/local/nginx/mp3/ 
2

을 대신 시스템을 파일로 gridfs를 탑재 gridfs 퓨즈를 사용,이를 확인 : http://blog.vladimirm.com/2011/06/export-files-from-mongodb-gridfs-with-directory-paths/

이 마운트 파일을 gridfs 떠들썩한 파티 스크립트입니다

  • 가 (이 링크에서 찾을 수 bash는 스크립트 내부에 넣어)라는 파일 gridfs.sh을 만듭니다

    사용을 특정 파일 시스템.

  • $ ./gridfs.sh 호스트 database_name (현재 디렉토리에있는 파일을 마운트합니다).

1

일부 미디어 플레이어는 시간 찾기 때문에 HTTP 범위 요청 프로토콜이 필요합니다. 그런 플레이어는 미디어를 재생하기 전에 웹 서버가 프로토콜을 지원하는지 여부를 확인합니다.

원래 nginx-gridfs 모듈에는 범위 요청 구현이 없습니다. 이 quick hack patch은 범위 요청 지원을 추가하고 문제를 해결했음을 확인했습니다.

그러나이 구현은 하나의 스트리밍이 끝날 때까지 전체 nginx 프로세스를 차단합니다. 이벤트 구동 아키텍처에서 I/O 차단은 피해야하기 때문에 nginx에는 매우 나쁩니다. 따라서 우리는 gidfs-fuse와 같은 다른 파일이나 스트리밍 미디어를 제공하기 위해 다른 구현을 사용해야한다고 생각합니다. node proxy.

관련 문제