【发布时间】:2019-01-25 07:28:33
【问题描述】:
我有一个非常简单的设置,使用 Traefik 使用 Docker & Let's Encrypt 将传入请求代理到 API 服务。
除了客户端因 CORS 无法向 API 发出请求外,一切都正常运行。
如何添加 Origin、Content-Type 和 Authorization 标头,以便确保它们到达在代理后面运行的 Node API 并确保 Access-Control-Allow-Origin 保留在响应标头中?强>
我的 traefik.toml 文件:
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "<hostname-here>"
watch = true
exposedByDefault = false
[acme]
email = "<your-email-here>"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
我的docker-compose.yml 运行我的 API:
version: "2"
services:
app:
build:
context: .
dockerfile: Dockerfile-App
environment:
- NODE_ENV=${NODE_ENV}
restart: always
networks:
- web
- default
expose:
- "5000"
labels:
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.basic.frontend.rule=Host:${HOSTNAME}"
- "traefik.frontend.auth.forward.trustForwardHeader=true"
- "traefik.frontend.passHostHeader=true"
- "traefik.basic.port=5000"
- "traefik.basic.protocol=http"
networks:
web:
external: true
文档暗示您可以添加 customHeaders
traefik.frontend.headers.customResponseHeaders=EXPR 在将响应转发到客户端之前,将标头附加到容器返回的每个响应中。 格式:HEADER:value||HEADER2:value2
但是我应该如何知道动态值(例如授权令牌)的值?
编辑:
我尝试添加这样的自定义标题:
- "traefik.frontend.headers.customResponseHeaders=Access-Control-Allow-Origin: *"
但这根本没有附加到响应标头中。
【问题讨论】: