java - 通过 nginx 的 Webflux 媒体流有时会失败
问题描述
尝试通过 Nginx 从 WebFlux 应用程序流式传输媒体文件时遇到了一个奇怪的问题,有些视频无法播放,但其他视频却可以正常播放。
我有时得到的错误是
net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content)
服务于媒体资源的控制器:
@GetMapping(value = "/media", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public Mono<FileSystemResource> media(@RequestParam final String id) {
return mediaFileService.findById(id).map(MediaFile::getPath).map(FileSystemResource::new);
}
我尝试在 Nginx 上运行的 default.conf 配置
server {
listen 80;
server_name terrible-spa;
root /usr/share/nginx/html/;
index index.html index.html;
location /media {
send_timeout 60m;
proxy_redirect off;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Request_Uri_X $request_uri;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://media-service:8080/media;
}
location / {
try_files $uri $uri/ /index.html =404;
}
}
正如您在/media
位置点下看到的那样,我尝试了大多数我可以在互联网上找到的示例来解决这个问题。大的是send_timeout
和proxy_buffering
。
我觉得奇怪的是,这只发生在一些视频文件中。
我可以尝试其他配置吗?或者这里有什么明显的错误?