Nginx环境中前端上传文件提示跨域

环境

  • mac
  • nginx
  • vue
  • php

目前在做一个文件上传的功能,但是遇到了一个很常见的问题:跨域,凭着之前的经验,检查了nginxphp相关的配置,发现正常。

比较奇怪的点是,除了上传大于1KB的文件,其余接口一切正常,而且1KB大小的文件可以正常上传,一旦文件大小超过1KB就会提示跨域问题。

Access to XMLHttpRequest at 'http://192.168.8.46:8081/sockjs-node/info?t=1680163878051' from origin 'http://localhost:8081' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

上传超过1KB的文件就会报错

此时我已经将之前碰到过类似问题的解决方法都用了个遍:修改php文件的最大上传限制,修改nginx每次最大请求数据….这一切都不行

找遍了所以的方法,网上也没有相对应的解决办法,苦恼….

看着控制台大片的红色陷入了沉思,盯着这个域名好久,突然想到了去查询nginx的请求日志,于是切到相对应的目录查询了日志

access.log请求正常,然后看了一下error.log日志,发现有如下报错信息:

2023/03/30 16:20:12 [crit] 18742#0: *58 open() "/usr/local/var/run/nginx/client_body_temp/0000000013" failed (13: Permission denied), client: 127.0.0.1, server: scrm.me, request: "POST /api/v1/upload/method/add.upload.list.html HTTP/1.1", host: "scrm.me", referrer: "http://localhost:8081/"

!!!

解决方案这不就来了么!!很明显的权限不足,直接找到这个文件所在的地方:

➜  nginx ll
total 0
drwx------  2 nobody  admin    64B  3 15 00:20 client_body_temp/

可以看到,当前的文件夹没有写入的权限,我们直接赋予最高的权限即可

sudo chmod -R 777 client_body_temp

于是我去查询了这个文件是干什么用的,得到的结果是:如果客户端POST一个比较大的文件,长度超过了nginx缓冲区的大小,需要把这个文件的部分或者全部内容暂存到client_body_temp目录下的临时文件。

值得一提的是,windows下基本不会出现这样的问题,一般情况下,mac、linux环境下会出现这样权限不足的问题,遇到时将该文件夹赋予相对应高的权限即可解决问题~~

本博客所有文章如无特别注明均为原创。作者:止语复制或转载请以超链接形式注明转自 止语博客
原文地址《Nginx环境中前端上传文件提示跨域

相关推荐

发表评论

路人甲
看不清楚?点图切换

网友评论(0)