Добавьте заголовки авторизации и происхождения в обратный прокси-сервер traefik - PullRequest
0 голосов
/ 25 января 2019

У меня очень простая установка с 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: *"

Но это не добавляется к заголовкам ответов вообще.

1 Ответ

0 голосов
/ 26 января 2019

Я условно разрешал CORS в своем приложении nodejs на основе источника запроса в попытке занести в белый список имена хостов, но источник не был правильно установлен Traefik. Вместо этого я удалил условные имена и имена из белого списка в Traefik.

После этого CORS работает должным образом, и мои метки выше являются звуковыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...