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を介してアクセスできるようになりました。次のログイン画面が表示されるはずです。

Nginx Proxy Manager Login Screen

次のデフォルトの資格情報を入力してサインインします。

メールアドレス: [email protected] パスワード: changeme

次に、すぐに名前とメールアドレスを設定するように求められます。

Nginx Proxy Manager Edit User Popup

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

Nginx Proxy Manager Set Password popup

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

Nginx Proxy Manager Dashboard

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

Nginx Proxy Manager Default Site

ステップ7 - Nginx Proxy Managerのドメイン名とSSLの設定

Nginx Proxy Managerにアクセスするためのドメイン名を設定しましょう。このステップはオプションですが、アプリケーションをSSLの背後に置きたい場合に便利です。

ダッシュボードメニューからホスト >> プロキシホストをクリックしてプロキシホストページを開きます。そこから、プロキシホストを追加ボタンをクリックして進みます。

Nginx Proxy Manager New Proxy Host Screen

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

SSLタブに切り替えます。

Nginx Proxy Manager Configure SSL

ドロップダウンメニューから新しいSSL証明書をリクエストを選択します。SSL強制およびHTTP/2サポートオプションを選択します。HSTSを有効にしたい場合は、それも有効にできます。Cloudflareを介してドメインを設定している場合は、SSL強制オプションを有効にしないでください。そうしないと、リダイレクトループに陥ります。

メールアドレスを入力し、Let’s Encryptの利用規約(TOS)に同意し、保存ボタンをクリックして完了します。

Nginx Proxy Manager Proxy Host List

あなたのドメインはライブで動作しているはずです。ブラウザで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 Blog Nginx Proxy Manager Configure

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;を入力します。

Ghost Blog NPM advanced configuration

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

Ghost Blog Home

ステップ9 - Nginx Proxy Managerをリダイレクトサービスとして使用する

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

Nginx Proxy Manager Redirection Host

転送したいドメイン名を入力します。そして、転送先のドメインを入力します。転送先のドメインはすでに設定されている必要があります。スキームは自動のままにします。要件に応じて、httpまたはhttpsを選択できます。正しいHTTPコードを選択し、パスを保持および一般的な脆弱性をブロックオプションをチェックします。自動またはhttpsスキームを使用している場合は、NPMを使用してSSL証明書を選択または作成していることを確認してください。保存をクリックしてリダイレクションホストの追加を完了します。

あなたのドメインexample.comblog.example.comにリダイレクトを開始するはずです。

Nginx Proxy Managerの他の使用法

Nginx Proxy Managerを使用する方法は他にも2つあります。404ホストとして使用することができ、これはドメインをランディングページとして使用して、検索エンジンにそのドメインページが存在しないことを示すことを意味します。このステップには、ドメインを入力し、SSLを設定するだけです。また、ドメイン名のログを追跡し、リファラートラフィックを表示する機会としても使用できます。

もう1つの機能は、NPMをストリームホストとして使用することです。この機能を使用して、TCP/UDPポートをネットワーク上の別のコンピュータに転送できます。これは、ゲームサーバーをホストしている場合に便利です。必要なことは、受信ポート、転送ドメインまたはIPアドレス、転送ポートを入力し、ポートの種類を選択することだけです。

Nginx Proxy Manager New Stream Host Popup

Nginx Proxy Managerを使用して静的ウェブサイトをホストする

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

Nginx Proxy Manager Static Website Host

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

Nginx Proxy Manager Static Site Advanced Configuration

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

Static Site Demo Page

ステップ10 - その他の機能

Nginx Proxy Managerのアクセス制御機能を使用する

NPMのアクセスリスト機能を使用して、HTTP認証を有効にしたり、IP範囲をブロックしたりできます。NPMを開き、ダッシュボード >> アクセスリストページに移動します。

アクセスリストを追加ボタンをクリックして開始します。

Nginx Proxy Manager New Access List

アクセスリスト(ACL)設定に名前を付けることができます。いずれかを満たすタブがチェックされている場合、クライアントが指定された条件のいずれかを満たすとアクセスが許可されます。クライアントがHTTP認証を通過しても、IPベースのアクセスに失敗する場合は許可されます。ただし、いずれかを満たすオプションがチェックされていない場合、クライアントはすべての条件を満たす必要があります。

ホストへの認証を転送機能は、認証機能をホストサーバーに転送します。

次に、認証タブに切り替えます。ここで、HTTP認証メソッドのユーザー名とパスワードを作成できます。複数のユーザーを追加するには、追加ボタンをクリックします。最大5人のユーザーを追加できます。追加ボタンにバグがあるため、最初にボタンを使用してから詳細を入力してください。詳細を入力してから後でボタンをクリックして別のユーザーを追加しようとすると、以前のユーザーデータが消去されます。

Nginx Proxy Manager Authorization Setting

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

Nginx Proxy Manager IP Access Tab

保存をクリックして完了します。

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

Nginx Proxy Manager Proxy Access List Support

より多くのドメイン名のサポートを有効にする

ホストとドメインの数が増えると、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つのドットをクリックし、編集ボタンをクリックします。

Nginx Proxy Manager Landing Page Edit

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

Nginx Proxy Manager Default Site Settings

これは、私たちの目的のために使用したカスタムHTMLです。



  
    ここには何もありません
    
    
    
    
  
  
    

おっと!

ご不便をおかけして申し訳ありませんが、ここにいるべきではありません。ここには何も得られません。このページはHowtoForge Nginx Proxy Managerガイドのために設定されました。いつか、何かが表示されるかもしれません。

保存をクリックして完了します。ランディングページは以下のように変更されるはずです。

Nginx Proxy Manager Custom Landing Page

ステップ11 - Nginx Proxy Managerを更新する

NPMを更新するには、まずコンテナを停止します。

$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans

最新のイメージをプルします。

$ docker-compose pull

コンテナを再起動します。

$ docker-compose up -d

結論

これで、Nginx Proxy Managerをインストールし、別のDockerコンテナのプロキシホストを追加し、リダイレクションサービスとして使用し、アクセスを制御する方法を学ぶチュートリアルが終了しました。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。