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

Hapi CORS while using Nginx as load balancer

我有一个在 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

然而,当我从 chrome 尝试使用 POST 值时,我收到了这样的错误;

Access to XMLHttpRequest at 'http://0.0.0.0/user' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我正在尝试从我的 POST 请求

的响应中获取 header 授权

这是我修复它的方法。

  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. 观看header
    您将看到一条错误消息,指出 multiple value for header Access-Control-Allow-Origin.

  4. 通过使用 nginx config

    隐藏 Hapi 来抑制 Access-Control-Allow-Origin
    proxy_hide_header Access-Control-Allow-Origin;
    

编辑

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

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