2017-08-02 341 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