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などをチャチャッと作る時に大変便利です。