NodeJS 或 Nginx 上发生 Access-Control-Allow-Origin cors 错误
Posted
技术标签:
【中文标题】NodeJS 或 Nginx 上发生 Access-Control-Allow-Origin cors 错误【英文标题】:Access-Control-Allow-Origin cors error happening on NodeJS or Nginx 【发布时间】:2020-06-03 22:24:55 【问题描述】:首先,我在写完问题后对这个主题进行了研究,有很多类似的问题,但我认为这里的问题有所不同:
No 'Access-Control-Allow-Origin' - Node / Apache Port Issue
当我们发送大量请求时,我们会收到此Access-Control-Allow-Origin cors 错误:
从 'https://backend.*****.es/xxxxxx' 访问 XMLHttpRequest 来源 'https://www.testing.*******.es' 已被 CORS 阻止 政策:没有“Access-Control-Allow-Origin”标头出现在 请求的资源
请求的其余部分工作正常,我尝试设置:
app.use((req, res, next) =>
res.header('Access-Control-Allow-Origin', '*');
next();
);
但我遇到了同样的错误。
我开始认为它可能与nginx有关。
这是我们正在使用的架构:
NodeJs、Expressjs中间件:
常量限制 = '100mb'; 常量全局 = () => [ 摩根中间件(), 压缩(), cors(), bodyParser.urlencoded(extended: true, limit: LIMIT ), bodyParser.json( limit: LIMIT ), 头盔(), ];
服务器:Nginx 12.14.1
AWS Elastic BeanStalk
中的主机如果有人知道会发生什么,请告诉我,因为我不知道它是来自我们的 nodejs 服务器还是 nginx。我们已经测试了许多解决方案,并且仍在检查其他选项。
【问题讨论】:
响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应? 我没有得到任何回应。 【参考方案1】:在您的 Elastic Beanstalk 仪表板上找到 Amazon Linux 2 (AL2) 的类型:
从你的应用的根目录创建如下目录结构:
.platform/nginx/conf.d/
创建以下文件:
.platform/nginx/conf.d/01_custom_ngix.conf
添加 client_max_body_size 并在您创建的 01_custom_ngix.conf 文件中更改以下值(这里的示例是 1000M = 1GB)并确保您的 AWS Instance Types 足够大 t2.medium:
client_max_body_size 1000M;
client_body_buffer_size 100M;
...
...
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
Git 提交您的更改。
部署您的代码:
> eb deploy
选项:eb deploy --verbose --debug
【讨论】:
【参考方案2】:我们的服务器出现此错误:
2020/02/20 10:56:00 [错误] 2784#0: *127 客户端也打算发送 大正文:4487648 字节,客户端:172.31.3.222,服务器:,请求: "PUT /cars/drafts/f7124841-f72c-4133-b49e-d9f709b4cf4d HTTP/1.1", 主机:“backend.xxxxx.es”,推荐人: "https://www.testing.xxxx.es/sellcar/photos/f7124841-f72c-4133-b49e-d9f709b4cf4d"
所以除了前面出现的错误是Access-Control-Allow-Origin之外,它与NGINX中设置的a限制有关。
现在我们只需要弄清楚如何访问我们的弹性 beanstalk 实例来更改这些变量,这已经解决了。
SSH to Elastic Beanstalk instance
要解决这个问题,请在 .ebextensions 中创建一个文件 x.config 并使用下一个 yaml 文件更改此变量:
files:
"/etc/nginx/conf.d/01-client_max_body_size.conf":
mode: 000644
owner: root
group: root
content: |
# MODIFIED VARIABLES ADDED BY 01-client_max_body_size.conf
client_max_body_size 12m;
client_body_buffer_size 16k;
container_commands:
nginx_reload:
command: sudo service nginx reload
然后重新部署您的环境。
非常感谢大家的帮助!
【讨论】:
以上是关于NodeJS 或 Nginx 上发生 Access-Control-Allow-Origin cors 错误的主要内容,如果未能解决你的问题,请参考以下文章
NodeJs:fs.stat() 或 fs.access() 检查文件夹是不是存在?
AWS EB + Nginx,更新 access.log 格式或创建新日志