サーバー上で逆プロキシを構築したい場合、Nginx は最も一般的な選択肢です。しかし、その設定は初心者にはやや複雑で、ベテランにとってもあまり便利ではありません。そのため、Caddy などのより便利な設定ツールを選択する人もいます。しかし、初心者向けには、Nginx の設定を可視化するソリューションもあります:Nginx Proxy Managerです。Docker イメージを提供しており、簡単に構築することができます。
Docker のインストール#
Install Docker Engine | Docker Documentationを参照し、自分のシステムを選択してください。まだシステムを選択していない場合は、Debian を使用することを強くお勧めします。
ルートユーザーで作業することもできますが、これはお勧めできません。セキュリティ上のリスクが非常に高く、将来的には権限管理の問題に直面する可能性があります。
ほとんどのディストリビューションでは、以下のスクリプトを使用して簡単にインストールできますが、このインストール方法は本番環境では推奨されていないとされていますので、自己判断でお願いします。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
操作には通常のユーザーを使用することをお勧めします。インストール後、Manage Docker as a non-root userの手順に従ってユーザーを docker グループに追加することで、Docker コマンドを実行する際に sudo を使用する必要がなくなります。
rootless モード(docker デーモンを root 権限で実行しないモード)の使用はお勧めしません。一部のプログラムで問題が発生する可能性があります。
一部の古いチュートリアルでは
docker-compose
のインストールが必要とされていますが、現在の Docker のバージョンにはスペースを含むdocker compose
が組み込まれているため、私はこれまでのところ違いを見つけていませんので、docker-compose
をインストールする必要はありません。すべてdocker compose
を使用しましょう。
NPM のインストール#
-
まず、お好きなディレクトリに移動し、例えば
~/docker/
に移動します。 -
次に、NPM のデータを保存するためのフォルダを作成します。
mkdir npm && cd npm
-
どの方法を使用しても、以下のコードを新しく作成した
docker-compose.yml
ファイルに追加します。version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: 'npm' restart: unless-stopped ports: - '80:80' - '81:81' # 左側の数字は自分のサーバーで使用されていないポートに変更できます - '443:443' volumes: - ./data:/data # 左側のパスは変更できます - ./letsencrypt:/etc/letsencrypt # 左側のパスは変更できます
-
コンテナを起動します。
docker compose up -d
-
ブラウザで https://your_server_ip:81 を開き、ログインします。デフォルトのメールアドレス:
[email protected]
、デフォルトのパスワード:changeme
-
ログイン後、アカウント名やパスワードなどを変更することが表示されますが、この時点では実際の情報を入力しないでください。まだ http 接続なので安全ではありません。
インストールはここまでです。次に、npm 自体を例にして、逆プロキシの設定方法を説明します。
逆プロキシ#
結果的に、逆プロキシの最も直接的な効果は、ドメイン名でアクセスできるようになり、IP:ポートではなくなることです。また、HTTP も HTTPS に変わります。
ドメインの設定#
逆プロキシにはドメインが必要です。
ドメインの購入#
まず、遊びでやりたいだけの場合は、無料で使用できるドメインがあるかどうかを Google で検索してみてください。現時点では、.link
や .eu.org
などの無料のドメインがあることを知っていますので、調べてみてください。
長期的に使用する場合は、自分の好きなドメインを選ぶことをお勧めします。経済的に負担が少ない範囲で短くすることができます。例えば、私の yfi.moe
は、yfi は Yunfi の略称であり、moe を選んだ理由は以下の図の通りです。
私のドメインは NameSilo で購入しました。彼らの .com
ドメインは 10 ドル程度で、おそらく最も安いものです。お得なのは .top
ドメインで、初年度は $1.88、更新は $4.88 です。購入時に私のクーポンコード(Coupon)を使用するとさらに $1 割引になります:yunfi
Cloudflare でドメインを管理する(オプション)#
Cloudflare は、インターネット上のすべてに安全でプライベートで高速かつ信頼性のある接続を提供するためのグローバルネットワークです。
Cloudflare はネットワーク分野で巨大な存在であり、無料の CDN やさまざまなサービスを提供しています。私たちがやることは、ドメインの DNS サーバーを Cloudflare に変更して、DNS レコードを簡単に管理することです。この記事では、Cloudflare を例にして説明します。
まず、Cloudflare に登録し、サイト(ゾーン)を追加し、指示に従って操作します。その後、Cloudflare でドメインの DNS サーバーを Cloudflare の 2 つに変更するように指示されます。NameSilo を使用している場合は、ドメイン管理ページに移動し、オプションの最後のアイコンをクリックします。
以前のものを削除し、Cloudflare が提供する 2 つのものを入力します。
DNS レコードの追加#
Cloudflare に移動し、まず SSL/TLS ページに移動し、暗号化モードを "完全(厳格)" に変更します。
次に、DNS ページを開き、レコードを追加します。
- タイプ:A(IPv6 の場合は AAAA)
- 名前:新しいサブドメイン
- IPv4 アドレス:サーバーの外部 IP または Docker コンテナにとってのホストマシンの IP を入力します。一般的には
172.17.0.1
です。 - プロキシステータス:Cloudflare の CDN を使用する場合はオンにします。自分の IP を他の人に知られないようにすることができますが、国内では速度が遅い場合があります。国内のサーバーの場合はオフにしても問題ありません。
プロキシホストの設定#
-
NPM のホームページに移動し、プロキシホストに進み、Add Proxy Host をクリックします。
-
以下のように入力します:
- ドメイン名:先ほど設定したドメイン、ここでは
nginx-demo.yfi.moe
です。 - Forward Hostname/IP:サーバーの外部 IP または Docker コンテナにとってのホストマシンの IP を入力します。一般的には
172.17.0.1
です。 - Forward Port:先ほど設定したポート、この例では 81 です。
- 下の 3 つのスイッチは、npm の場合はすべてオンにできますが、一部のアプリケーションではオンにすると問題が発生する場合があるため、テストが必要です。
- ドメイン名:先ほど設定したドメイン、ここでは
-
SSL タブをクリックします。
- Request a new SSL certificate を選択します。
- 必ず Force SSL をチェックしてください。残りは必要に応じて設定してください。
- メールアドレスは自分のものでなくてもかまいませんが、あまり奇抜なものではないようにしてください(そうでないと Let's Encrypt に拒否される可能性があります)。
-
OK をクリックします。10 秒近く待つ必要があるかもしれません。証明書を Let's Encrypt に申請するためです。
これで https://nginx-demo.yfi.moe にアクセスすると、ログイン画面が表示され、アドレスバーには小さなロックが表示され、HTTPS で保護されていることがわかります。
** これで、メールアドレスやパスワードを本番用のものに変更することができます。** 証明書の有効期限が切れるとメールで通知を受けることもできるようになります(npm は自動的に更新されます)。
ワイルドカード証明書の申請(オプション)#
上記の手順でも問題ありませんが、新しいプロキシホストを追加するたびに新しい証明書を申請する必要があります。そのため、 *.yfi.moe
のような証明書を申請し、すべてのドメインで有効にすることができます( yfi.moe
そのものは別途申請する必要があります)。
- NPM の SSL Certificates ページに移動し、Add SSL Certificate をクリックし、Let's Encrypt を選択します。
- ドメインに
*.yfi.moe
を入力し、Use a DNS Challenge にチェックを入れます。 - 新しく表示された入力ボックスで、DNS Provider を Cloudflare に設定します。
- Cloudflare に移動し、右上のプロフィールに移動し、左側の API トークンをクリックします。
- トークンを作成し、"Edit zone DNS" のテンプレートを選択します。
- ゾーンリソースで追加するドメインを選択し、他の項目は変更せずに、「Continue to summary」をクリックし、「Create Token」をクリックします。
- コピーして、npm の 2 番目のボックスのイコールの後に貼り付け、OK をクリックします。
その後の逆プロキシはすべてこの証明書を使用できます。
結論#
Nginx と比較して、Nginx Proxy Manager は確かに柔軟性に欠けますが、私は使いやすさと柔軟性のバランスを取っていると考えています。さもなければ、証明書の問題だけで何時間もかかることになります。
NPM はリダイレクト、ストリーミング、カスタム Nginx コードなどもサポートしており、見た目よりも柔軟性があります。
よくある質問#
続く