IPアドレスは、DNS変換が出来ないので、httpsにすることは出来ないという常識がありますが・・・実は裏技があります。

そもそも、172.0.0.15といった数字の羅列のIPアドレスを人間側にわかりやすくしたのが、ドメインです。

https://localhostが出来るのですから、https:172.0.0.15だって出来て当たり前だと調査して、長時間深みにはまりましたが、解決策を見つけたので、まとめます。

結論から言うと、ワイルドカードDNSを使えば解決です。

ワイルドカードDNSとは?

ワイルドカードDNSは、IPアドレス自身を返すグローバルDNSです。

xip.ioやnip.ioがあり、グローバルIPアドレス1つで、複数対応が可能です。

リバースプロキシ―として、httpをhttpsにするには、jwilder/nginx-proxy と jrcs/letsencrypt-nginx-proxy-companionのdockerイメージの組み合わせで Let’s Encrypt の証明書の取得と更新を自動で行ってくれるのが王道パターンです。

でも、それってきちんとしたドメインを取得している場合、IPアドレスだけだと機能しないんです。

そこで登場するのが、https-potalのdockerイメージです。

使い方はとっても簡単、Dockerコンテナを使う場合は、https-potalを追加すればOKです。

docker-compose.ymlに次のように記述するだけで、簡単にhttpsになります。

web_app:
    ........
  expose:
        - '7134'
    ........
https-potal:
    image: steveltn/https-portal:1
    container_name: https-potal
    ports:
        - '80:80'
        - '443:443'
    restart: always
    volumes:
        - ./nginx/ssl_certs:/var/lib/https-portal
        - ./src/static:/static
    environment:
        DOMAINS: '<IPアドレス.nip.io> -> http://<web_app>:7134'
        STAGE: local #stagin

大事なのは、DOMAINSの箇所、->になっていますが、http://<サービス名>:ポート番号に書いたコンテナが、例えば、172.15.18.27.nip.ioとして動きます。つまり、https://172.15.18.27.nip.ioのドメインになるのです。

複数設定したい場合は、nip.ioとサブドメインの組み合わせがベスト!

environment: DOMAINS: '<sub_a.IPアドレス.nip.io> -> http://<web_app>:7134,<sub_b.IPアドレス.nip.io> -> http://<web_app>:80'

xip.ioはもう使えない!

ワイルドカードDNSは、無料で簡単に設定できるのが魅力ですが、本番環境で使うものではありません。

あくまで自己開発環境、レンタルVPSなどで使うのに重宝します。

ただしxip.ioなどのワイルドカードDNSは、安定性に問題があり、接続不可になるケースがよくあります。

それでも、使い勝手の良さが優るので、IPアドレスを手軽にhttpsにしたいなら、使わないのはもったいないです。

安定性が抜群なのはnip.io

xip.ioより、安定性があるのが、nip.ioです。

開発環境向けのテストドメインになるので、dockerと相性が抜群ですが、普通にIPアドレスのマッピングを使用する事ができます。

詳しくは、「https://nip.io/」に一通りの説明があります。

何より、dockerで使うなら、技術的な難しい事がわからなくても、サブドメインとポートの指定だけで使えるのが便利です。

wordpressのテストWEB、jupyterによる暗号資産bot開発環境、キーワード検索順位チェックツールserposcopeなどをチャチャッと作る時に大変便利です。