我有这样的服务构成的应用程序: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