Eginx Proxy Manager 備忘録と雑感です.
いつもの通り結論から書くと,
自宅で複数 Web サービスを運用するときの飛び道具!
だと思います.
NGINX PROXY MANAGER って?
高速が売りの Web Server である NGINX を用いたリバースプロキシアプライアンスソフトウェアです.
このページを見にくるような人には釈迦に説法だと思いますが,リバースプロキシとは,内部ネットワークから外部に接続するときに使う中継サーバーがプロキシなので,その逆,つまり,外部ネットワークからの通信を内部に中継するサーバーです.
- Web サービスの複数サーバーへの負荷分散
- セキュリティ対策
- Web サービス管理の容易化
などのため,ある程度以上の規模の業務用途ウェブサービスだとほぼ必須で,有名どころの Web Server プログラムである Apache, Nginx, IIS 等を用いて構築できます.また,アプライアンスとして有名どころだと,
辺りなんじゃないかなと思います(まぁ,リバースプロキシと言うよりロードバランサーですが,単に呼び方が違うだけだと思う).
実はかなり昔,本 blog でも IIS を WordPress のリバースプロキシとして使うという記事
を書いているのですが,Apache にしろ Nginx にしろリバースプロキシとして使うにはそれなりの理解も必要だし設定も必要で,個人で気軽に使うものって感じは少なくとも私の場合はしませんでした.
しかし,NGINX PROXY MANAGER でこの感覚,完全に過去のものとなってしまいました.
NGINX PROXY MANAGER の導入
NGINX PROXY MANAGER を導入するには docker と docker-compose が必要です.最近の Linux ならどのディストリビューションでも簡単に導入できるはずです.
私の場合は自宅の VMWare ESXi7 環境上に Alpine Linux を導入し,
# apk update # apk add docker docker-compose # service docker start # rc-update add docker boot # groupadd hyt docker
のように docker を導入しました(最後の groupadd は hyt で docker を操作できるようにするため).
あとは,以下のように docker-compose.yml を作って,
$ mkdir compose $ cd compose $ mkdir nginxproxymanager $ cd nginxproxymanager $ vi docker-compose.yml version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: nginxproxymanager restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - /var/lib/docker/volumes/nginxproxymanager_data:/data - /var/lib/docker/volumes/letsencrypt:/etc/letsencrypt networks: default: enable_ipv6: true ipam: config: - subnet: fd3a:3aa4:b089:2::/64 gateway: fd3a:3aa4:b089:2::1
最後に,
$ docker-compose up -d
とすれば EGINX PROXY MANAGER が起動します.
NGINX PROXY MANAGER の初期設定
NGINX PROXY MANAGER のログイン画面へのアクセスは,
- http://192.168.0.100:81
です.ここで 192.168.0.100 は Alpine Linux の IP アドレスです.初期ユーザーとパスワードは,
- Email: [email protected]
- Password: changeme
で,ログインすると Email と Password の変更を求められるので,求めに応じて適当に変更すれば初期設定は終了です.
NGINX PROXY MANAGER を使う
ここまでで,NGINX PROXY MANAGER を使う準備はできましたが,実際に便利に使うにはさらに,
- DNS の設定(もしくはローカルに導入)
- 認証局の導入(もしくはサーバー証明書の取得)
- ルーターのポート開放やPBRの設定
が必要になってきます.このうち DNS のローカルネットへの導入については別記事を準備しようと思っていますが,これは NAS のパッケージとして導入できるものを使っても良いと思います.実際に Synology の NAS にも DNS Server というパッケージが用意されていて GUI で簡単に管理できます.
また,認証局の導入についてはかなり昔に以下の記事を書いていますので,こちらをご覧いただければと思います.
以下,flame.labohyt.net を実際に EGINX PROXY MANAGER で公開する例を示しますが,あらかじめ,
- 適当な DNS の A, AAAA, CNAME レコードのいずれかに flame.labohyt.net が登録されており,きちんと名前解決ができる
- ルーターのポート解放や PBR の設定がきちんと出来ていて,NGINX PROXY MANAGER を導入したサーバーの80番と443番ポートにアクセスできる
状態であると仮定します.ここまで出来ていれば,EGINX PROXY MANAGER で簡単に Web サービスをネットに公開することができます.
EGINX PROXY MANAGER の設定例
まず,flame については以下の記事をご覧頂ければと思いますが,見た目の綺麗な Web ランチャーアプリです.
本アプリ,残念ながら SSL に対応していませんので,そのままウェブに公開することはできません.したがって,このアプリを NGINX PROXY MANAGER で SSL 対応させることにしましょう.
本アプリの導入は上の記事に従い既に行われているとします.また,ローカルからは http://192.168.0.100:5005 でアプリにアクセスできるとします.このとき,ENGIX PROXY MANAGER で行う設定は以下の通りです.
- NGINX PROXY MANAGER 上部のメニューの SSL Certificates を選び,「Add SSL Certificate」を選択し,メニューから「Let’s Encrypt」を選択する.
- 出てきた設定画面の Domain Names に「flame.labohyt.net」を,Email Address for Let’s Encrypt に自分のメールアドレスを設定し,I Agree to the Let’s Encrypt Terms of Service を有効化して「save」をクリックする.
これで flame.labohyt.net の SSL 証明書が発行され,NGINX PROXY MANAGER に登録されます.あとはこの証明書を用いてリバースプロキシを構成するだけです.実際の手順は以下の通りです.
- NGINX PROXY MANAGER 上部のメニューの Hosts から Proxy Hosts を選ぶ.
- 出てきた一覧画面の右上にある「Add Proxy Host」を選択する.
- New Proxy Host の設定画面が出てくるので,以下のとおり設定し「save」を選択する.
Details メニュー
Domain Names: flame.labohyt.net
Scheme: http
Forward Hostname/IP: 192.168.0.100
Forward Port: 5005
Cache Assets: 有効化
Block Common Exploits: 有効化
Websockets Support: 有効化
SSL メニュー
SSL Certificates: flame.labohyt.net を選択
Force SSL: 有効化
HTTP/2 Support: 有効化
HSTS Enabled: 有効化
HSTS Subdomains: 有効化
これで公開設定は完了です.実際に以下をクリックすれば https://flame.labohyt.net にアクセスできるはずです.
なお,Wordpress を NGINX PROXY MANAGER を使って公開するにはもう少し設定する必要がありますが,この辺りについてはまた別記事で紹介したいと思います.
WordPress の NGINX PROXY MANAGER を用いた公開については記事
をご覧ください.
NGINX PROXY MANAGER 雑感
EGINX PROXY MANAGERは docker さえ使えれば簡単に導入でき,導入してしまえばあとは GUI で簡単に Web サービスを SSL 対応にして公開できます.また,Web サービスとそのサービスに用いる証明書の管理を完全に分けることができるので,いままでサービスごとに設定しなければならなかった SSL 対応の設定のほとんどを NGINX PROXY MANAGER にまとめることができ非常に管理しやすくなりました.
いやいや,個人でそんな Web サービス使ってるなんてそれはあなたのご自宅が『逸般の誤家庭』だからでしょう
と言われそうですし,実際それは否定できないです(笑).
しかし,文字通り一般の御家庭だったとしても,ルーターとか NAS とか Web の管理画面を持っているものがそれなりにあるのが普通です.そしてそれらの機器にアクセスすると オレオレ証明書が使われていたり SSL 化されていなかったりで,警告画面が出てきてかなりうざったいです.つまり,同様の機能を持つサーバーが,文字通り一般の御家庭にあっても良いような気がするのですが……これは私だけ?かもしれないですね.
以上!