Dockerで構築したWordPress環境を、Nginx Proxy Manager(NPM)を使ってHTTPS化してみました。
今回は、無料VPS上にDockerでWordPressを構築し、その前段にNginx Proxy Managerを配置して、Let's EncryptのSSL証明書を取得する構成です。
今回やったこと
構成としては、以下のようにしました。
Internet
↓ HTTPS
Nginx Proxy Manager
↓ HTTP
WordPress Container
↓
MySQL Container
Nginx Proxy Managerをリバースプロキシとして利用することで、WordPressコンテナ自体にSSL証明書を設定するのではなく、NPM側でHTTPS通信を受ける構成にしています。
環境
- Ubuntu 24.04
- Docker / Docker Compose
- WordPress
- MySQL
- Nginx Proxy Manager
- Let's Encrypt
- 無料VPS
Nginx Proxy Managerを使う理由
Nginxの設定ファイルを直接編集する方法もありますが、Nginx Proxy Managerを使うと、ブラウザ上のGUIからリバースプロキシやSSL証明書を管理できます。
特にDocker環境では、複数のWebアプリを同じサーバーで動かす場合にも扱いやすいと感じました。
HTTPS化の流れ
大まかな手順は以下です。
- Nginx Proxy ManagerをDockerで起動
- WordPressコンテナと同じDockerネットワークに接続
- ドメインをNPMに登録
- WordPressコンテナへリバースプロキシ
- Let's EncryptのSSL証明書を取得
- HTTPSアクセスを確認
- HTTPからHTTPSへのリダイレクトを設定
ちょっとしたポイント
今回、Nginx Proxy Managerの管理画面用ポートをインターネットへ直接公開しない構成にもしました。
必要なときだけSSHポートフォワーディングを利用して管理画面へアクセスする方法です。
Internet
│
├── HTTPS → NPM → WordPress
│
└── SSH → ポートフォワーディング → NPM管理画面
管理画面を常時公開しなくてもよいため、Dockerで個人用サーバーを構築するときには便利な方法だと思います。
HTTPS化でハマったところ
実際に構築してみると、単純にSSL証明書を取得するだけでは終わらないケースもありました。
特にWordPressでは、
- HTTP / HTTPSの認識
- リバースプロキシ
- Mixed Content
- CSSや画像がHTTPで読み込まれる問題
などで、HTTPS化後にサイトの表示が崩れることがあります。
私も実際にこの問題に遭遇したので、原因と対処方法について別の記事に詳しくまとめています。
詳細はこちら
👉 "Nginx Proxy ManagerでWordPressをスマートに常時SSL化(HTTPS)する方法" (https://go-pro-world.net/docker-nginx-proxy-manager/)
まとめ
DockerでWordPressを運用する場合、Nginx Proxy Managerをリバースプロキシとして利用すると、HTTPS化や複数サービスの公開を比較的管理しやすくなります。
特に、
ブラウザ
↓ HTTPS
Nginx Proxy Manager
↓ HTTP
WordPress
という構成にすると、SSL証明書の管理をNPM側に集約できます。
今回は実際に無料VPS上で構築した環境をもとに、HTTPS化からMixed Contentの解決まで試してみました。
詳しい設定手順や実際に発生したトラブルについては、上記のブログ記事にまとめています。