traefik配下のサービスでAPIを提供するときに、ブラウザに対しCORSによるアドバイスを行います。
以下のような設定でexample.com
と言うサービスに対して、https://example.com
およびhttps://www.example.com
からの接続をアドバイスします。
1
2
3
4
5
6
7
8
9
10
11
| labels:
- "traefik.http.routers.example_com.rule=Host(`example.com`)"
- "traefik.http.routers.example_com.tls=true"
- "traefik.http.routers.example_com.tls.certresolver=dnsresolver"
- "traefik.http.routers.example_com.tls.domains[0].main=example.com"
- "traefik.http.routers.example_com.middlewares=example_com_headers@docker"
- "traefik.http.middlewares.example_com_headers.headers.accesscontrolallowheaders=*"
- "traefik.http.middlewares.example_com_headers.headers.accesscontrolallowmethods=GET,POST,OPTIONS"
- "traefik.http.middlewares.example_com_headers.headers.accesscontrolalloworiginlist=https://example.com,https://www.example.com"
- "traefik.http.middlewares.example_com_headers.headers.accesscontrolmaxage=100"
- "traefik.http.middlewares.example_com_headers.headers.addvaryheader=true"
|
www.example.com
からのアクセスがCORS設定されているか確認するに以下ののようにします。
curl -i -H "Origin: www.example.com" -X OPTIONS https://example.com
設定されていれば以下のように出力されます
HTTP/2 204
access-control-allow-headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
access-control-allow-methods: GET, POST, OPTIONS
access-control-allow-origin: https://www.example.com
(略)
テストで使った、-X OPTIONS
というのはプリフライトリクエストという特殊なリクエストで本来はブラウザが、APIアクセスが安全かどうかをサーバ側にお伺い立てるものです。