Nginx Proxy Managerで簡単ルーティング+SSL証明書管理

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つのサーバをドメイン名の違いで振り分けるようにしました。

npm

もともとAPIサーバに設定していた証明書は消して、プロトコルをhttpに変更してあります。
外部からNPMまではhttpsで暗号化していますが、自宅内ではhttpで十分です。

また NPM、APIサーバ、ブログサーバはそれぞれdocker-composeで起動しています。
それぞれ別VMになるのでlocalhostのホスト名ではアクセスできません。ホストマシンのIPなりサーバ名なりを指定しましょう。

証明書の取得

証明書はドメインごとに画面から取得します(1つずつ入力を確定していくことで一括発行もできました)。

npm-cert

なんと、これだけでブログ用とAPI用でドメイン名をもとにルーティングされ、httpsの証明書も付くようになりました。
感激!!

参考サイト

【Nginx Proxy Manager】まだNginxやLet's Encryptの設定をCUIで頑張ってるの?

Subscribe to 猫好きが猫以外のことも書く

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe