2017-08-02 253 views
1

我有这样的服务构成的应用程序:Traefik配置允许的WebSocket

  • TLS终止(基于HTTPS的门户网站)
  • 反向代理(Nginx的)
  • 其他服务(网页,API, WSS,...)

所有的流量都这样说:

HTTPS的门户网站 - > 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 

当web前端供应,在app.dev域,在ws://wss.app.dev上尝试了websocket连接,但无法连接到基础websocket服务器。该错误似乎与源头设置为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" 

我不知道我在这里失踪,因为这一次通过正确使用HTTPS的门户。在Traefik中是否需要额外的选项?

+0

有趣,不知道我对你的答案,但我作为一个反向代理,而不是仅仅一个HTTPS的门户网站投放traefik,我的websockets在traefik中没有任何额外的配置。虽然我没有在docker-compose中定义我的服务的端口,只使用nginx来提供静态内容。不知道这真的有帮助...但我知道这是可能的某种方式。希望有人有答案,但如果你在这里没有得到答案,可能值得在Traefik的github页面上提问。祝你好运! –

+0

你的traefik版本是什么? –

+0

谢谢@ArthurWeborg。我正在使用1.3.4,但我还没有尝试过1.3.5 – Luc

回答

2

WebSocket不需要额外的配置。

traefik.wss.protocol=httptraefik.wss.protocol=https

我们有WebSocket的一个bug 1.3.2之后和之前1.3.8。

我建议你使用1.4.0或至少1.3.8