【问题标题】:Access-Control-Allow-Origin cors error happening on NodeJS or NginxNodeJS 或 Nginx 上发生 Access-Control-Allow-Origin cors 错误
【发布时间】: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 成功响应?
  • 我没有得到任何回应。

标签: amazon-web-services express nginx amazon-elastic-beanstalk


【解决方案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
    

    然后重新部署您的环境。

    非常感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 2021-06-17
      • 2016-09-30
      • 2015-08-17
      • 2014-08-11
      • 2021-05-12
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多