在 tus/server 上出现“找不到此 url 的文件”错误

问题描述 投票:0回答:1

我有一个 @tus/server 后端和一个 React uppy 前端。上传时我收到了这样的回复

“找不到此网址的文件”

我运行多个容器,vps 在 nginx 后面。

在前端我像这样使用uppy

const [uppy] = useState(() => new Uppy().use(Tus, { endpoint: 'https://app.chatzu.ai/files/' }));

前端按顺序执行这些请求

Request URL:
https://app.chatzu.ai/files
Request Method:
POST
Status Code:
301 Moved Permanently
Remote Address:
<IP>
Referrer Policy:
strict-origin-when-cross-origin


Request URL:
https://app.chatzu.ai/files/
Request Method:
GET
Status Code:
404 Not Found
Remote Address:
<IP>
Referrer Policy:
strict-origin-when-cross-origin

Nginx 配置


    location /files/ {
        proxy_pass http://172.17.0.4:1080;
     # Disable request and response buffering
        proxy_request_buffering  off;
        proxy_buffering          off;
        proxy_http_version       1.1;

        # Add X-Forwarded-* headers
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header         Upgrade $http_upgrade;
        proxy_set_header         Connection "upgrade";
        client_max_body_size     0;

}

和我的 tus 服务器代码

const { Server } = require('@tus/server');
const { FileStore } = require('@tus/file-store');
const express = require('express');

const host = '0.0.0.0';
const port = 1080;
const app = express();
const uploadApp = express();

const server = new Server({
  path: '/files',
  datastore: new FileStore({ directory: '/files' }),
});

// Middleware to log all incoming requests
uploadApp.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.originalUrl}`);
  next(); // Pass control to the next middleware or route handler
});

uploadApp.all('*', server.handle.bind(server));
app.use('/files', uploadApp);

app.listen(port, host, () => {
  console.log(`Server listening on http://${host}:${port}`);
});

谢谢

javascript node.js nginx uppy tus
1个回答
0
投票

来自

location
nginx 指令文档:

如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由

proxy_pass
fastcgi_pass
uwsgi_pass
scgi_pass
memcached_pass
grpc_pass
之一处理,则进行特殊处理。为了响应 URI 等于此字符串但没有尾部斜杠的请求,将返回带有代码 301 的永久重定向到所请求的 URI,并附加斜杠。如果不需要,可以这样定义 URI 和位置的精确匹配:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

您对

/files
URI 的 POST 请求将使用
301 Moved Permanently
HTTP 重定向到
/files/
进行重定向。通过 301 或 302 HTTP 重定向进行重定向,浏览器通常会将任何其他请求方法更改为
GET
,并丢弃请求正文(您需要使用 307308 HTTP 重定向来防止这种情况)。我认为你的选择是在你的node.js服务器代码中将上传路径从
/files
更改为
/files/
(更好),或者在你的nginx配置中将
location
URI从
/files/
更改为
/files
(更糟糕)。

© www.soinside.com 2019 - 2024. All rights reserved.