我有這樣的服務構成的應用程序: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中是否需要額外的選項?
有趣,不知道我對你的答案,但我作爲一個反向代理,而不是僅僅一個HTTPS的門戶網站投放traefik,我的websockets在traefik中沒有任何額外的配置。雖然我沒有在docker-compose中定義我的服務的端口,只使用nginx來提供靜態內容。不知道這真的有幫助...但我知道這是可能的某種方式。希望有人有答案,但如果你在這裏沒有得到答案,可能值得在Traefik的github頁面上提問。祝你好運! –
你的traefik版本是什麼? –
謝謝@ArthurWeborg。我正在使用1.3.4,但我還沒有嘗試過1.3.5 – Luc