允许 websocket 的 Traefik 配置
Traefik configuration to allow websocket
我有一个由以下服务组成的应用程序:
- tls 终止(基于 https-portal)
- 反向代理 (nginx)
- 其他服务(网络、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 服务器。该错误似乎与设置为 app.dev 的 Origin header 有关,其中目标服务器是 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 中是否需要任何其他选项?
WebSocket 不需要额外配置。
traefik.wss.protocol=http
或 traefik.wss.protocol=https
我们在 1.3.2 之后和 1.3.8 之前的 WebSocket 中存在错误。
我建议您使用 1.4.0 或至少 1.3.8
我有一个由以下服务组成的应用程序:
- tls 终止(基于 https-portal)
- 反向代理 (nginx)
- 其他服务(网络、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 服务器。该错误似乎与设置为 app.dev 的 Origin header 有关,其中目标服务器是 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 中是否需要任何其他选项?
WebSocket 不需要额外配置。
traefik.wss.protocol=http
或 traefik.wss.protocol=https
我们在 1.3.2 之后和 1.3.8 之前的 WebSocket 中存在错误。
我建议您使用 1.4.0 或至少 1.3.8