初めてのリバースプロキシとして(Dockerで動かす)Nginx Proxy Managerはいいぞ
以下のような悩みを解決したくて、自宅サーバー環境にリバースプロキシを導入してみました。
- 自宅サーバー上にアプリを追加するたびに発生するネットワーク周りの設定が面倒
- https用証明書の取得・設定・管理が手動でいつか間違いそう
Dockerコンテナでサクッと起動できるものがよくて、ガイドやチュートリアルが充実していたTraefikをまずは試してみたのですが、Dockerのラベルを使う設定方法が煩雑でつまづきました。こりゃ分かりにくい。
で、他の候補を、ということで以下の3つの評判を調べたところ、どうやらNginx Proxy Managerが簡単そうだぞ、ということでそちらも試してみました。結論から言うと、小規模運用でGUIでポチポチ設定したい勢の私にはぴったりでした。Nginx Proxy Managerはいいぞ。
- Caddy - The Ultimate Server with Automatic HTTPS
- nginx-proxy/nginx-proxy: Automated nginx proxy for Docker containers using docker-gen
- NginxProxyManager/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interface
Nginx Proxy Managerの良さ
起動・設定が簡単
公式ガイドがシンプルで分かりやすいので、Docker環境さえあればサクッと起動できます。
設定は管理画面で行います。HTTPS用のワイルドカード証明書を取得してからリバースプロキシの設定をアプリごとに追加して……といった初期の設定は特に迷うことなくできました。
Docker networkと組み合わせて使うと設定がより簡単でかつセキュアに
公式ガイドに「Nginx Proxy ManagerとDocker Networkを組み合わせて使うといいぞ」と書かれています。具体的には以下の2点。
- Nginx Proxy Managerの転送先ホスト名の欄には、各アプリのDocker composeファイルに書いたサービス名を書けば済む
- 各アプリのDocker composeファイルで、ポートマッピングの設定をしなくてよい
設定例
確かにこれは使い勝手がよかったです。
つまづいたところ
リバースプロキシの挙動を転送先アプリの挙動に合わせる必要があるので、細かいところはアプリごとの調整が必要になります。いまのところのつまづきポイントは以下の2点でした。
ProxmoxのWebコンソールでサーバーにログインできない問題(undefined 1006)
エラーコードを検索するとたくさん情報が出てくるのですが、今回は公式フォーラムの情報をもとにNginx Proxy ManagerのProxy Hostsの設定でWebsockets Supportを有効にしたら解決しました。
NextcloudにiPhoneからアクセスするとConnection Closedエラーが出る(アプリ/ブラウザともに)
MacのChromeだと問題なくアクセスできるのですが、iPhone経由だと公式アプリとChromeのどちらでもConnection Closedエラーが出てログインすらできませんでした。
こちらは公式リポジトリのissueを参考に、Nginx Proxy ManagerのProxy Hosts設定のAdvancedタブでCustom Nginx Configurationに "proxy_hide_header Upgrade;" を追加することで解決しました。
設定画面
今後の気になるポイント
公式リポジトリでも議論されているのですが、設定のバックアップや移行はGUIからできないのでコマンドを叩いたりする必要があります。
Discussion