使用 Caddy 2 和 express 时的 CORS 问题

CORS problems when using Caddy 2 and express

我在 Caddy 2 服务器后面有一个 nodejs-express 服务器 运行 作为反向代理。

Caddy 在 docker 上 运行,在 docker-compose

中具有以下配置
  caddy:
    image: caddy
    restart: always
    ports:
      - "443:443"
      - "80:80"
    networks:
      - main-network
    volumes:
      - "./Caddyfile:/etc/caddy/Caddyfile"

使用以下 Caddyfile:

my-nice-site.com {
  reverse_proxy /* server:4030
}

该设置在提供网页和 API 时运行良好,但是,当我尝试使用具有不同 ORIGIN 的 javascript 访问时,我遇到了 CORS 问题。

我已经使用 express cors middleware 在 express 服务器中设置了 CORS,单独使用时它工作正常,但是当 运行 它在 Caddy 后面时我一直得到它,所以我猜那里是我需要在我的 Caddyfile 中进行的一些配置以允许 cors 但我找不到适合我的设置的任何配置。

我设法解决了我的问题:
headers 由 express 正确设置,我在使用 curl 或 Postman 发出请求时得到了它们,而没有在 Caddy 中进行任何更改。

问题最终是我正在向 http 发出请求,Caddy 将这些重定向到 https,这对于从 Postman 发送的 GET 请求没有问题,但是 Preflight-requests (OPTIONS) 不支持重定向,因为 Caddy 正在进行重定向,它没有到达 express(和 CORS 设置),抛出错误。

最后,解决方案只是向 https://my-nice-server.com

提出我的请求