我有一个应用程序,客户端通过https和Nginx从example.com向api.example.com发出多部分请求,然后api将文件上传到Amazon S3。
它可以在我的机器上运行,但是当其他人在不同的网络上尝试它时会中断。给我这个错误:
[Error] Origin https://example.com is not allowed by Access-Control-Allow-Origin.
[Error] Failed to load resource: Origin https://example.com is not allowed by Access-Control-Allow-Origin. (graphql, line 0)
[Error] Fetch API cannot load https://api.example.com/graphql. Origin https://example.com is not allowed by Access-Control-Allow-Origin.
我在API上使用cors npm包,如下所示:
app.use(cors());
所有这些都是通过DigitalOcean上的Nginx反向代理进行的。这是我的Nginx配置:
个人服务器配置在/etc/nginx/conf.d/example.com.conf
和/etc/nginx/conf.d/api.example.com.conf
,几乎相同,只是地址和名称不同:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include snippets/ssl-params.conf;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:3000/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}
当我在计算机上的localhost上使用它时它完全正常,但是当我把它放在DigitalOcean上时我无法上传。当我上传文件时,它只在这个多部分请求中断,其他常规的Cors GET和POST请求都有效。
答案 0 :(得分:8)
问题原来是Nginx不接受大文件。将其放在我的nginx服务器配置的位置块中解决了我的问题:client_max_body_size 10M;
答案 1 :(得分:0)
问题可能不在于nginx,因为它只是一个移动问题。尝试使用,而不是*用于Access-Control-Allow-Origin,你也可以使用你的原点。
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Authorization", "Access-Control-Allow-Headers", "Origin","X-Requested-With", "Content-Type", "Accept");
next();
});
<强>更新强>
如果以上操作不起作用,请尝试以下操作,这将暂时启用所有内容。
app.use(cors());