У меня очень простая установка с Traefik с использованием Docker & Let's Encrypt для прокси-сервера входящих запросов к API-сервису.
Все работает нормально, за исключением того, что клиент не может отправлять запросы API из-за CORS.
Как я могу добавить заголовки 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"
My 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: значение || HEADER2: значение2
Но как мне узнать значение динамических значений, таких как токены авторизации?
EDIT:
Я попытался добавить пользовательский заголовок следующим образом:
- "traefik.frontend.headers.customResponseHeaders=Access-Control-Allow-Origin: *"
Но это не добавляется к заголовкам ответов вообще.