Nginx Proxy Managerで簡単ルーティング+SSL証明書管理
自宅サーバで外部からのリクエストを振り分けるとき、wi-fiルータのポート転送で何とかすることが多いと思います。
ただ、これだとポートごとの設定になるので同じ80や443のポートを共有することができません。
リバースプロキシを用意してドメイン名で振り分けたいなーと思って調べてみました。
超簡単設定! Nginx Proxy Manager
そこで見つけたのがこちらです。
https://nginxproxymanager.com/
インストールすればドメイン名によるルーティング、Let'sEncrypt
による証明書発行までGUI上で設定できるすごいヤツ・・・!!
docker-composeでデプロイ
Nginx Proxy Manager
(以下NPM) をデプロイします。
自宅のルータでは、80番,443番のポートをNPMサーバが稼働しているマシンに転送されるように設定しておきます。
NPM
の作業ポート(81番)自体は外部から設定することはないと思うので開放しなくてOKです。
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
早速 API をルーティング
インストールとデプロイが完了したので、設定していきます。
まずは利用者情報を入力
初期ユーザ、初期パスワードが決まっているので、こちらでログインします。
Email: admin@example.com
Password: changeme
初回パスワード変更を求められるので、好きなように設定します。
ドメイン名でサーバを振り分ける
こんな感じで同じサーバにある2つのサーバをドメイン名の違いで振り分けるようにしました。
もともとAPIサーバに設定していた証明書は消して、プロトコルをhttp
に変更してあります。
外部からNPM
まではhttps
で暗号化していますが、自宅内ではhttp
で十分です。
また NPM
、APIサーバ、ブログサーバはそれぞれdocker-compose
で起動しています。
それぞれ別VMになるのでlocalhost
のホスト名ではアクセスできません。ホストマシンのIPなりサーバ名なりを指定しましょう。
証明書の取得
証明書はドメインごとに画面から取得します(1つずつ入力を確定していくことで一括発行もできました)。
なんと、これだけでブログ用とAPI用でドメイン名をもとにルーティングされ、https
の証明書も付くようになりました。
感激!!