「無限」

概要

最近弊社では「Welcome to ICTSC2022」と表示される便利な SaaS 「WICTSC 」というサービスを利用している。
サービスが提供しているドメインではなく最近新たに取得した mydomain.test で接続したいと考えて設定をしたがなぜか繋がらない、cache 側からアクセスできるようにして欲しい。

前提条件

  • https 環境を再現するために自己証明書を使用している。
  • hosts を書き換える行為はしてはいけない。
  • 表示には wictsc.test のものを使用する。

初期状態

cache サーバから https://mydomain.test にアクセスできない。

終了状態

cache サーバから curl https://mydomain.test の内容が見ることができ、「Welcome to ICTSC2022」 と表示される

解説

原因

  1. https://mydomain.test にアクセス
  2. cache サーバhttp://wictsc.test にプロキシ
  3. バックエンド側(SaaS) が設定済みのカスタムドメイン(mydomain.test)の https にリダイレクト

① -> ② -> ③ -> ① -> ② ->… の無限ループに陥ってしまう。

CDN などを利用した際によくしてしまうトラブルでした。

解決法

初期状態で cacheサーバからリダイレクトオプションを付けてアクセスしてみます。

curl -k https://mydomain.test -L
curl: (47) Maximum (50) redirects followed

リダイレクトループしていることが確認できます。

次に、バックエンドサーバ側からどこ宛てにリダイレクトされているか調べます。
cacheサーバから verbose オプションを付けてアクセスすると以下が表示されます。

curl -k -v https://mydomain.test 
~省略~
< location: https://mydomain.test/
~省略~

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>

上記の location ヘッダーから https://mydomain.test にリダイレクトされていることが確認できます。

ここで恐らく cache サーバの設定不備だということに気づき nginx のコンフィグを編集します。
cacheサーバで /etc/nginx/sites-enabled/default をテキストエディタなどで以下の様に編集します。

server {
        listen 80;
        listen 443 ssl http2;

        ssl_certificate /etc/nginx/certs/server.crt;
        ssl_certificate_key /etc/nginx/certs/server.key;

        server_name mydomain.test;

        location / {
-                proxy_pass http://wictsc.test;
+                proxy_pass https://wictsc.test;
        }
}

そうすることでキャッシュ側にリダイレクトされなくなり適切にアクセスすることができる。

curl -k https://mydomain.test
Welcome to ICTSC2022