如何解决nginx 无法加载静态 .mp4
设置
- 我的目标是一个简约的配置,主要基于默认设置
- 目标是提供 10-15 秒、1 到 3 秒长的视频,主要是 2-3 Mb 的视频
- 我有一个使用官方 Nginx docker 映像运行的 raspBerry
我的假设
问题
- 视频根本无法播放
- 直接访问视频时,我遇到两种情况
此外
html {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/Nginx/mime.types;
default_type application/octet-stream;
gzip on;
#SSL Settings
#Logging Settings
}
在 mime.types 中,我确实有视频/mp4。
静态服务文件
视频位于一个文件夹中,该文件夹挂载为 /usr/share/x
server {
...
location / {
# Default Nginx files
}
location ~ \.mp4$ {
# When I try to use this block,all video request end up being 404s
}
location /x/ {
root /usr/share/;
}
}
鉴于这是一个微型应用程序,显然还有其他文件正在提供,并且它们工作正常。位置和路线没有问题,只有视频。
初始请求
GET #### HTTP/1.1
Host: ####
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
sec-ch-ua: ####
sec-ch-ua-mobile: ?0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: ####
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site: none
sec-fetch-mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip,deflate,br
Accept-Language: en-US,en;q=0.9,hu;q=0.8,sk;q=0.7
sec-gpc: 1
初始响应
HTTP/1.1 200 OK
Server: Nginx/1.14.2
Date: Thu,14 Jan 2021 19:50:01 GMT
Content-Type: video/mp4
Content-Length: 1620690
Last-Modified: Thu,14 Jan 2021 19:05:25 GMT
Connection: keep-alive
ETag: "600095f5-18bad2"
Accept-Ranges: bytes
Content-Security-Policy: upgrade-insecure-requests
第二次请求(导致 HTTP 206)
GET #### HTTP/1.1
Host: ####
Connection: keep-alive
sec-ch-ua: ####
DNT: 1
Accept-Encoding: identity;q=1,*;q=0
sec-ch-ua-mobile: ?0
User-Agent: ####
Accept: */*
sec-fetch-site: same-origin
sec-fetch-mode: no-cors
Sec-Fetch-Dest: video
Referer: ####
Accept-Language: en-US,sk;q=0.7
sec-gpc: 1
Range: bytes=0-
(有时被取消的)部分内容
HTTP/1.1 206 Partial Content
Server: Nginx/1.14.2
Date: Thu,14 Jan 2021 20:03:20 GMT
Content-Type: video/mp4
Last-Modified: Thu,14 Jan 2021 19:05:25 GMT
Connection: keep-alive
ETag: "600095f5-18bad2"
Content-Range: bytes 0-1620689/1620690
Content-Length: 1620690
Content-Security-Policy: upgrade-insecure-requests
最后的想法和问题
我是一名高级前端开发人员。远非高级后端或 DevOps 知识,但我认为我自己做得很好。但是,在过去 2-3 天的大部分时间里,我都在尝试从我的 RaspBerry 中提供小视频。不成功。
更新 (1):cURL
我选择测试的文件是 1620720 字节。我尝试将其卷曲以查看是否能返回相同的工作视频。
curl https://domain.tld/x/nope.mp4 --output ~/retrieved.mp4
这个新视频有 1620690 字节。比原来的 (gzip?) 少 30,而且它似乎已损坏。我无法在我的机器上播放视频。
解决方法
所以。显然,当您跳过某些配置步骤时,更类似于黑客马拉松的方法并不是真正有益的。当你想快速而肮脏地做事情时,因为时间是至关重要的,你仍然应该将 .mp4s 设置为在 git 中被视为二进制文件。 (使用 LFS 更好)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。