配置Traefik实现容器单端口支持WSS/HTTPS及Consul注册
给Nginx容器添加HTTPS协议的Consul服务配置
嘿,你这个场景很常见——同一个443端口既要处理WSS又要处理HTTPS请求,要在Consul里分别注册这两个服务信息,其实只需要在现有标签基础上添加一组带索引的服务标签就行,具体操作如下:
首先,你原来的配置已经搞定了WSS的服务注册,现在要加HTTPS的,我们可以利用SERVICE_<端口>_<索引>的命名规则,给HTTPS单独注册一个服务条目,这样Consul和Traefik都能区分开两个不同的路由规则。
修改后的docker-compose.yml片段应该是这样的:
nginx: labels: # 已有的WSS服务配置 SERVICE_443_NAME: ws-name SERVICE_443_TAGS: 'traefik.protocol=wss,traefik.frontend.entryPoints=wss,traefik.frontend.rule=Host:web.mydomain.com;Path=/ws' # 新增的HTTPS服务配置 SERVICE_443_1_NAME: https-web-service SERVICE_443_1_TAGS: 'traefik.protocol=https,traefik.frontend.entryPoints=https,traefik.frontend.rule=Host:web.mydomain.com;PathPrefix:/'
我给你解释下新增的这部分配置:
SERVICE_443_1_NAME:给HTTPS服务起个专属名字(比如https-web-service),和WSS的ws-name区分开,方便在Consul里识别。SERVICE_443_1_TAGS:这里指定了HTTPS相关的规则:traefik.protocol=https:明确告诉Traefik这是HTTPS协议的服务traefik.frontend.entryPoints=https:对应Traefik配置里的HTTPS入口点(如果你的Traefik把WSS和HTTPS都挂在同一个443入口点,也可以改成和WSS一样的wss,不过分开配置更清晰)traefik.frontend.rule=Host:web.mydomain.com;PathPrefix:/:匹配域名web.mydomain.com下的所有路径(除了/ws会被WSS的规则优先匹配,因为Path比PathPrefix的匹配优先级更高)
这样配置后,Consul里会同时注册两个服务条目,Traefik会根据请求路径自动把/ws的请求转发到WSS服务,其他路径的请求转发到HTTPS服务,完美满足你的需求~
内容的提问来源于stack exchange,提问作者Thierry Bouvet
相关产品推荐
相关产品推荐

