Traefik配置允许websocket

Luc*_*Luc 3 proxy websocket traefik

我有一个包含以下服务的应用程序:

  • tls终止(基于https-portal)
  • 反向代理(nginx)
  • 其他服务(Web,API,WSS等)

所有流量都是这样的:

https-portal-> nginx->其他服务

我用Traefik替换了https-portal,但我无法使websocket正确通过。

以下是我的docker-compose.yml文件的摘录。进入Traefik的流量将转发到反向代理的专用端口。这将执行几次检查,然后将请求转发到适当的服务(API,Web前端,WebSocket服务器等)。

  # Proxy
  proxy:
    image: mynginxproxy
    build: ../../../development/proxy
    restart: always
    labels:
      - traefik.web.frontend.rule=Host:app.dev
      - traefik.web.port=8000
      - traefik.wss.frontend.rule=Host:wss.app.dev
      - traefik.wss.protocol=ws
      - traefik.wss.port=9002
      - traefik.api.frontend.rule=Host:api.app.dev
      - traefik.api.port=8002
      - ... // other labels

  # Traefik
  traefik:
    image: traefik
    command: --web --docker --docker.domain=app.dev --logLevel=DEBUG
    labels:
      - "traefik.enable=false"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev/null:/traefik.toml
Run Code Online (Sandbox Code Playgroud)

在app.dev域上为Web前端提供服务时,在ws://wss.app.dev上尝试了websocket连接,但它无法连接到基础的websocket服务器。错误似乎链接到Origin头,该头设置为app.dev,目标服务器为wss.app.dev。

日志表格traefik:

traefik_1        | time="2017-08-02T13:55:05Z" level=warning msg="Error while upgrading connection : websocket: 'Origin' header value not allowed"
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里缺少什么,因为这可以通过https-portal正确传递。Traefik是否需要其他选择?

lde*_*dez 6

WebSocket不需要其他配置。

traefik.wss.protocol=http 要么 traefik.wss.protocol=https

在1.3.2之后和1.3.8之前,我们有一个关于WebSocket的错误。

我建议您使用1.4.0或至少1.3.8