以前書いたtraefik
関連記事、1つのサーバにたくさんのWebサービスを詰め込む方法
にてwhoami.example.com
のサービスを作成しましたが、とある理由でwhoami.example.com
をサブドメインとするホストすべてからアクセスできるようにしたい、つまりa.whoami.example.com
やb.whoami.example.com
などを使いたいときにどうすればよいかを説明します。
以前書いたものを修正します、ハイライト箇所が修正されています。
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| version: '3'
networks:
default:
external:
name: front
services:
whoami:
image: containous/whoami
labels:
- "traefik.http.routers.whoami_example.rule=HostRegex(`{subdomain:[a-z]+}.whoami.example.com`)"
- "traefik.http.routers.whoami_example.tls=true"
- "traefik.http.routers.whoami_example.tls.certresolver=dnsresolver"
- "traefik.http.routers.whoami_example.tls.domains[0].main=*.example.com"
|
{subdomain:[a-z]+}.example.com
ってなに?って思われるかもしれませんが、これはtraefik内部で使われているgorilla mux router
の記法です。普通に[a-z]+.example.com
と書いても動きそうですが、このまま掲載します。
複数のパターンに対応
ちょっとまった!これでは、以前アクセスできていたwhoami.example.com
でアクセスできなくなっていましました。ルーティングルールにwhoami.example.com
を追加します。
1
2
3
4
5
| - "traefik.http.routers.whoami_example.rule=Host(`whoami.example.com`) || HostRegex(`{subdomain:[a-z]+}.whoami.example.com`)"
- "traefik.http.routers.whoami_example.tls=true"
- "traefik.http.routers.whoami_example.tls.certresolver=dnsresolver"
- "traefik.http.routers.whoami_example.tls.domains[0].main=whoami.example.com"
- "traefik.http.routers.whoami_example.tls.domains[0].sans=*.example.com"
|
このsans
とは、SANs(Subject Alternate Names)の略で、サーバ証明書のCN(Common Name)の別名のことです。
そういえば、2018年にLet’s Encryptがワイルドカードドメインに対応した
というのは個人的には大ニュースでした、未だ記憶に新しいですね。