使用Nginx作为负载均衡器时的Hapi CORS

时间:2018-12-07 09:20:16

标签: nginx cors load-balancing hapijs

enable-cors.org所示,我有一个Nginx具有广泛开放的内核。我可以在GET请求中看到以下内容

Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Allow-Headers: Authorization,If-Modified-Since,Cache-Control,Content-Type,Accept
Access-Control-Expose-Headers: Content-Length,Content-Range

但是,当我尝试使用具有POST值的chrome浏览器时,出现了这样的错误;

  

从源访问“ http://0.0.0.0/user”处的XMLHttpRequest   “ http://localhost:3000”已被CORS政策禁止:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。

我正在尝试从POST请求的响应中获取标头授权

1 个答案:

答案 0 :(得分:0)

这是我修复它的方式。

  1. 在Hapi服务器块中启用CORS

    const server = Hapi.Server({
      debug: { request: ["error"] },
      port: process.env.APP_PORT,
      host: process.env.APP_SERVER,
      routes: {
        cors: true
      }
    });
    
  2. Nginx中创建反向代理

    proxy_pass http://localhost:4000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Forwarded-User $remote_user;
    proxy_set_header X-Real-IP $remote_addr;
    
  3. 观看表头
    您会看到一条错误消息,提示标题标头Access-Control-Allow-Origin有多个值。

  4. 使用Access-Control-Allow-Origin配置隐藏Hapi中的nginx

    proxy_hide_header Access-Control-Allow-Origin;
    

编辑

在Hapi服务器块中使用以下值设法使它在没有nginx的情况下工作

cors: {
  origin: "ignore",
  additionalHeaders: ["Authorization"],
  additionalExposedHeaders: ["Authorization"]
},