首页 > 解决方案 > 通过 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_timeoutproxy_buffering

我觉得奇怪的是,这只发生在一些视频文件中。

我可以尝试其他配置吗?或者这里有什么明显的错误?

标签: javanginxspring-webflux

解决方案


推荐阅读