我有一个由以下服务组成的应用程序:
-
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
在提供Web前端时,在app.dev域上,在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"
我不确定我在这里缺少什么,因为这通过https-portal正确传递 . Traefik还需要其他选项吗?
1 回答
WebSocket无需其他配置 .
traefik.wss.protocol=http
或traefik.wss.protocol=https
我们在1.3.2之后和1.3.8之前有一个WebSocket的错误 .
我建议你使用1.4.0或至少1.3.8