Nginx Proxy · 4 min read · Nov 20, 2025
Dockerを使用してNginx Proxy Managerをインストールして使用する方法

リバースプロキシは、別のWebサーバーまたはWebサービスの前に配置できるWebサーバーです。出力トラフィックを暗号化し、ロードバランサーとして機能し、トラフィックをリダイレクトし、保護を提供できます。Nginx Webサーバーは、従来のサーバーの前にプロキシサーバーとして使用できますが、設定が面倒で、正しく行わないと問題が発生することがあります。
Nginx Proxy Managerは、Let’s Encryptを使用した組み込みのSSLサポート、複数のホストのサポート、HTTP認証、アクセスリスト、ユーザー管理などの機能を提供するグラフィカルユーザーインターフェース(GUI)を介してNginxをプロキシサーバーとして設定するのを容易にするアプリケーションです。
このチュートリアルでは、Dockerを使用してLinuxサーバーにNginx Proxy Managerをインストールする方法を学びます。人気のあるすべてのLinuxディストリビューションを1つのチュートリアルでカバーします。
前提条件
- 最低1GBのRAMを搭載したUbuntu/Debian/CentOS/Alma Linux/Rocky Linuxを実行しているLinuxサーバー。
- sudo権限を持つ非rootユーザー。
- サーバーを指す完全修飾ドメイン名(FQDN)
npm.example.com。
ステップ1 - ファイアウォールの設定
Cent OS/Rocky Linux/Alma Linux
Firewalldファイアウォールがインストールされている必要があります。ファイアウォールの状態を確認します。
$ sudo firewall-cmd --state
running
ポート80、81、443を開きます。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp
変更を有効にするためにファイアウォールを再読み込みします。
$ sudo firewall-cmd --reload
Ubuntu/Debian
UbuntuおよびDebianシステムは、デフォルトでufw(Uncomplicated Firewall)を使用します。
ファイアウォールが実行中かどうかを確認します。
$ sudo ufw status
実行中の場合は、ポート80、81、443を開きます。
$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443
ファイアウォールが実行されていない場合は、SSHポートを開きます。
$ sudo ufw allow "OpenSSH"
ファイアウォールが実行されていない場合は、有効にします。
$ sudo ufw enable
実行中の場合は、変更を適用するために再読み込みします。
$ sudo ufw reload
ステップ2 - Dockerのインストール
Cent OS/Rocky Linux/Alma Linux
以下のコマンドを実行してDockerをインストールします。
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Debian
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Dockerサービスを有効にして開始します。
$ sudo systemctl start docker --now
ユーザー名をDockerグループに追加します。
$ sudo usermod -aG docker $USER
システムからログアウトして再度ログインし、変更を適用します。
ステップ3 - Docker Composeのインストール
Docker composeバイナリをダウンロードしてインストールします。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
バイナリに実行権限を適用します。
$ sudo chmod +x /usr/local/bin/docker-compose
ステップ4 - Docker Composeファイルの作成
Nginx Proxy Manager用のディレクトリを作成します。
$ mkdir ~/nginx-proxy
ディレクトリに移動します。
$ cd ~/nginx-proxy
ユーザーデータとSSL証明書用のディレクトリを作成します。
$ mkdir {data,letsencrypt}
docker-compose.ymlファイルを作成して編集します。
$ nano docker-compose.yml
以下のコードを貼り付けます。
version: "3"
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # 公開HTTPポート
- '443:443' # 公開HTTPSポート
- '81:81' # 管理Webポート
# 公開したい他のストリームポートを追加
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# ホストでIPv6が有効でない場合は、以下の行のコメントを外します
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- npm-db
networks:
- npm-nw
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- npm-internal
networks:
npm-internal:
npm-nw:
external: true
ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。
ファイルを見てみましょう。ファイルの最初の部分では、Nginx Proxy Managerのイメージをインポートし、データベースの資格情報の形式でいくつかの環境変数を設定します。また、サーバーへのアクセスのためにポート80、81、443を公開します。FTPアクセスのためにポート21などを公開することもできます。DISABLE_IPV6: 'true'の行のコメントを外すことで、IPV6サポートを無効にできます。ホストからDockerへのデータおよびSQLストレージ用にいくつかのディレクトリをマッピングしています。
ここでは2つのネットワークを使用しています。1つはプロキシマネージャーとデータベースを接続するための内部ネットワークnpm-internalです。これは自動的に作成されるためオプションですが、ここでは手動で任意の名前を付けています。
プロキシマネージャーコンテナには、npm-nwという外部ネットワークを追加しました。このネットワークは重要です。なぜなら、インストールした他のDockerコンテナにプロキシマネージャーを接続するために使用できるからです。ネットワークを使用することで、サーバーにポートを公開することなく、任意のコンテナに直接接続できます。
ステップ5 - Nginx Proxy Managerを実行する
Dockerコンテナを起動する前に、外部ネットワークnpm-nwを作成する必要があります。内部ネットワークは自動的に作成されます。外部ネットワークを作成するには、以下のコマンドを実行します。
$ docker network create npm-nw
以下のコマンドを使用してDockerコンテナを起動します。
$ docker-compose up -d
コンテナの状態を確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c91ca0ddca97 jc21/nginx-proxy-manager:latest "/init" About a minute ago Up About a minute 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp npm-app
1738d71b95da mariadb:latest "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp npm-db
ステップ6 - Nginx Proxy Managerにアクセスする
Nginx Proxy Managerにhttp://yourserverIP:81のURLを介してアクセスできるようになりました。次のログイン画面が表示されるはずです。

次のデフォルトの資格情報を入力してサインインします。
メールアドレス: [email protected] パスワード: changeme
次に、すぐに名前とメールアドレスを設定するように求められます。

保存ボタンをクリックすると、新しいパスワードを設定するように求められます。

再度保存ボタンをクリックすると、アプリケーションを使用できるようになります。

ブラウザでhttp://yourserverIPのURLを開くと、プロキシマネージャーが設定したデフォルトページに移動します。

ステップ7 - Nginx Proxy Managerのドメイン名とSSLの設定
Nginx Proxy Managerにアクセスするためのドメイン名を設定しましょう。このステップはオプションですが、アプリケーションをSSLの背後に置きたい場合に便利です。
ダッシュボードメニューからホスト >> プロキシホストをクリックしてプロキシホストページを開きます。そこから、プロキシホストを追加ボタンをクリックして進みます。

FQDN名(npm.example.com)を追加し、クリックします。サーバーのIPアドレスと81を転送ポートとして入力します。
SSLタブに切り替えます。

ドロップダウンメニューから新しいSSL証明書をリクエストを選択します。SSL強制およびHTTP/2サポートオプションを選択します。HSTSを有効にしたい場合は、それも有効にできます。Cloudflareを介してドメインを設定している場合は、SSL強制オプションを有効にしないでください。そうしないと、リダイレクトループに陥ります。
メールアドレスを入力し、Let’s Encryptの利用規約(TOS)に同意し、保存ボタンをクリックして完了します。

あなたのドメインはライブで動作しているはずです。ブラウザでhttps://npm.example.comを開いて、Nginx Proxy Managerのログイン画面が表示されるはずです。
同様に、デフォルトのランディングページに対しても行い、https://example.comのようなドメイン名を割り当てることができます。プロキシホストを設定する際にポートを81から81に変更してください。
ステップ8 - Nginx Proxy Managerを別のDocker Webアプリケーションで使用する
プロキシマネージャーをインストールしたので、実際に使用する時が来ました。最初に行うことは、別のDocker Webアプリケーションをホストするために使用することです。このために、Ghostブログをインストールします。詳細を学びたい場合は、UbuntuサーバーでDockerを使用してGhostをインストールするチュートリアルを確認してください。
Ghostブログ用の別のディレクトリを作成します。
$ mkdir ~/ghost
Ghostディレクトリに移動します。
$ cd ~/ghost
コンテンツとデータベース用の2つのディレクトリを作成します。
$ mkdir {content,mysql}
同じMySQLイメージを使用している場合でも、データとそのコンテナをプロキシマネージャーのものとは別に保管する必要があります。これにより、発生する可能性のある問題を隔離し、必要に応じて移動できるようになります。
Docker composeファイルを作成して編集します。
$ nano docker-compose.yml
以下のコードを貼り付けます。Ghostブログの実際のドメイン名にexample.comを置き換えます。メールを受信したい場合はSMTPの詳細を入力します。必要ない場合は削除できます。
version: '3.3'
services:
ghost-app:
image: ghost:latest
container_name: ghost-app
restart: always
depends_on:
- ghost-db
environment:
url: https://ghost.example.com
database__client: mysql
database__connection__host: ghost-db
database__connection__user: ghost
database__connection__password: ghostdbpass
database__connection__database: ghostdb
mail__transport: SMTP
mail__options__host: {Your Mail Service host}
mail__options__port: {Your Mail Service port}
mail__options__secureConnection: {true/false}
mail__options__service: {Your Mail Service}
mail__options__auth__user: {Your User Name}
mail__options__auth__pass: {Your Password}
volumes:
- /home//ghost/content:/var/lib/ghost/content
networks:
- npm-nw
- ghost-network
ghost-db:
image: mariadb:latest
container_name: ghost-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_mysql_root_password
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostdbpass
MYSQL_DATABASE: ghostdb
volumes:
- /home//ghost/mysql:/var/lib/mysql
networks:
- ghost-network
networks:
ghost-network:
npm-nw:
external: true
ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。
ご覧のとおり、GhostコンテナをNginxプロキシマネージャーに接続しています。これにより、Ghostのポートをシステムに公開することなく接続できます。また、Ghostアプリと対応するデータベースコンテナを接続するために、内部ネットワークghost-networkも使用しています。
コンテナを起動します。
$ docker-compose up -d
GhostをNginx Proxy Managerで設定する
次に、Ghostインストールのリバースプロキシを設定する必要があります。ブラウザでNginx Proxy Managerを開き、ダッシュボード >> ホスト >> プロキシホストに移動し、新しいプロキシホストを追加します。

Ghostブログ用に選択したドメイン名を追加します。ホスト名/IPの値には、コンテナの名前を入力します。この場合、ghost-appになります。ここにIPアドレスを追加することはできません。なぜなら、Ghostのポートをサーバーに公開していないため、NginxプロキシはIP経由でGhostに到達できないからです。したがって、Dockerのネットワークnpm-nwを使用してNPMがアクセスできるコンテナ名を使用します。ポートには、Ghostブログで使用されるデフォルトのポートである2368を使用します。上記のスクリーンショットに示されている他のオプションを確認してください。
次に、SSLタブに切り替え、ステップ6に従って新しいSSL証明書を作成します。Ghostブログにコンテンツをアップロードするため、アップロードの最大サイズを設定することをお勧めします。
幸いなことに、NPMはカスタム設定を追加することを許可しています。高度なタブに切り替え、ボックスにclient_max_body_size 50m;を入力します。

保存ボタンをクリックしてプロキシホストの追加を完了します。https://ghost.exampl.comのURLを介してGhostブログにアクセスできるようになるはずです。

ステップ9 - Nginx Proxy Managerをリダイレクトサービスとして使用する
NPMを使用して、1つのドメインを別のドメインに簡単にリダイレクトする方法を見てみましょう。そのためには、ダッシュボード >> ホスト >> リダイレクションホストに移動します。そこから、リダイレクションホストを追加ボタンをクリックして開始します。

転送したいドメイン名を入力します。そして、転送先のドメインを入力します。転送先のドメインはすでに設定されている必要があります。スキームは自動のままにします。要件に応じて、httpまたはhttpsを選択できます。正しいHTTPコードを選択し、パスを保持および一般的な脆弱性をブロックオプションをチェックします。自動またはhttpsスキームを使用している場合は、NPMを使用してSSL証明書を選択または作成していることを確認してください。保存をクリックしてリダイレクションホストの追加を完了します。
あなたのドメインexample.comはblog.example.comにリダイレクトを開始するはずです。
Nginx Proxy Managerの他の使用法
Nginx Proxy Managerを使用する方法は他にも2つあります。404ホストとして使用することができ、これはドメインをランディングページとして使用して、検索エンジンにそのドメインページが存在しないことを示すことを意味します。このステップには、ドメインを入力し、SSLを設定するだけです。また、ドメイン名のログを追跡し、リファラートラフィックを表示する機会としても使用できます。
もう1つの機能は、NPMをストリームホストとして使用することです。この機能を使用して、TCP/UDPポートをネットワーク上の別のコンピュータに転送できます。これは、ゲームサーバーをホストしている場合に便利です。必要なことは、受信ポート、転送ドメインまたはIPアドレス、転送ポートを入力し、ポートの種類を選択することだけです。

Nginx Proxy Managerを使用して静的ウェブサイトをホストする
Nginx Proxy Managerは、シンプルな静的または動的ウェブサイトもホストできます。そのためには、新しいプロキシホストを追加し、転送ドメインとして127.0.0.1を選択し、ポートとして80を選択します。

高度なタブの下で、ルートディレクトリを指定する設定を入力します。サイトのルートディレクトリが最初のDocker compose設定にマウントされていることを確認してください。ここでは、静的ウェブサイトをホストするために/data/staticディレクトリを使用しています。

保存をクリックして完了し、サイトにアクセスできるようになります。同様に、プロキシマネージャーを使用して任意のタイプのサイトをホストできます。

ステップ10 - その他の機能
Nginx Proxy Managerのアクセス制御機能を使用する
NPMのアクセスリスト機能を使用して、HTTP認証を有効にしたり、IP範囲をブロックしたりできます。NPMを開き、ダッシュボード >> アクセスリストページに移動します。
アクセスリストを追加ボタンをクリックして開始します。

アクセスリスト(ACL)設定に名前を付けることができます。いずれかを満たすタブがチェックされている場合、クライアントが指定された条件のいずれかを満たすとアクセスが許可されます。クライアントがHTTP認証を通過しても、IPベースのアクセスに失敗する場合は許可されます。ただし、いずれかを満たすオプションがチェックされていない場合、クライアントはすべての条件を満たす必要があります。
ホストへの認証を転送機能は、認証機能をホストサーバーに転送します。
次に、認証タブに切り替えます。ここで、HTTP認証メソッドのユーザー名とパスワードを作成できます。複数のユーザーを追加するには、追加ボタンをクリックします。最大5人のユーザーを追加できます。追加ボタンにバグがあるため、最初にボタンを使用してから詳細を入力してください。詳細を入力してから後でボタンをクリックして別のユーザーを追加しようとすると、以前のユーザーデータが消去されます。

アクセスタブに切り替えます。ここで、アクセスを許可または拒否するIPアドレスを設定できます。

保存をクリックして完了します。
このアクセスリストを使用するには、プロキシホストを追加する際に選択する必要があります。以下のGhostブログの例のように、アクセスリストを選択しました。

より多くのドメイン名のサポートを有効にする
ホストとドメインの数が増えると、Nginxはハッシュスペースが不足したり、メモリの問題が発生する可能性があります。この問題を解決するために、すべてのホストに適用されるカスタム設定を追加できます。
これを行うには、~/nginx-proxy/data/nginx内にcustomディレクトリを作成します。
$ sudo mkdir ~/nginx-proxy/data/nginx/custom
このディレクトリ内にhttp.confファイルを作成して開きます。
$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf
以下の行を貼り付けます。
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。
Nginxはこれらの値を自動的に受け入れるはずです。そうならない場合は、以下のコマンドを使用してNPMコンテナを再起動できます。
$ docker restart npm-app
デフォルトのランディングページをリダイレクトする
ステップ6では、http://のURLを入力するとデフォルトページが表示されます。それを変更したい場合は、可能です。それを行うには、設定ページに移動します。右側の3つのドットをクリックし、編集ボタンをクリックします。

ランディングページを404ページ、リダイレクトページとして機能させるか、カスタムページオプションを使用してカスタムHTMLを追加できます。リダイレクトを選択した場合は、ターゲットURLを指定する必要があります。

これは、私たちの目的のために使用したカスタムHTMLです。
ここには何もありません
おっと!
ご不便をおかけして申し訳ありませんが、ここにいるべきではありません。ここには何も得られません。このページはHowtoForge Nginx Proxy Managerガイドのために設定されました。いつか、何かが表示されるかもしれません。
保存をクリックして完了します。ランディングページは以下のように変更されるはずです。

ステップ11 - Nginx Proxy Managerを更新する
NPMを更新するには、まずコンテナを停止します。
$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans
最新のイメージをプルします。
$ docker-compose pull
コンテナを再起動します。
$ docker-compose up -d
結論
これで、Nginx Proxy Managerをインストールし、別のDockerコンテナのプロキシホストを追加し、リダイレクションサービスとして使用し、アクセスを制御する方法を学ぶチュートリアルが終了しました。質問がある場合は、下のコメントに投稿してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。