【发布时间】:2021-01-14 20:30:49
【问题描述】:
设置
- 我的目标是简约配置,主要基于默认设置
- 目标是提供 10 到 15 秒、1 到 3 秒长的视频,主要是 2 到 3 Mb 的视频
- 我有一个运行官方 nginx docker 映像的树莓派
我的假设
- nginx 是一个非常强大的工具,并提供了各种优化功能,但如果我想简单地提供上述视频,它会“开箱即用”
问题
- 视频根本不播放
- 直接访问视频时,遇到两种情况
此外
- 多个视频已经过测试(默认移动输出、VLC 转换、HandBreak 网络优化)
nginx(官方镜像提供的默认配置)
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,en;q=0.9,hu;q=0.8,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 中提供小视频。不成功。
- 这真的是 nginx 配置问题吗?
- 如果是这样,我错过了什么?我该如何完成这项工作?
- 如果这不是 nginx,还能是什么?
更新(1):cURL
我选择测试的文件是 1620720 字节。我试着卷曲它,看看我是否能恢复相同的工作视频。
curl https://domain.tld/x/nope.mp4 --output ~/retrieved.mp4
这个新视频是 1620690 字节。比原来的(gzip?)少 30 并且它似乎已损坏。我无法在我的机器上播放视频。
【问题讨论】: