2026年7月20日

2026年7月20日

NginxでDockerネットワーク内のサービスをプロキシする方法

はじめに

Dockerの普及により、開発者やシステム管理者はより効率的にアプリケーションを構築し、デプロイすることが可能になりました。しかし、Dockerネットワーク内の複数サービス間での通信やアクセス制御は課題となります。Nginxは高性能なWebサーバーとしても知られるが、その機能性を利用してロードバランサーや逆プロキシとしても使用可能です。本記事では、Dockerネットワーク内に存在するサービスへのアクセスをNginxを使って制御し、負荷分散を行う方法について解説します。

症状・背景

このテーマが必要になる主な場面は以下の通りです:

  • Dockerコンテナ間で通信する必要があるが、外部から直接アクセスできない場合
  • ロードバランシングとアクセス制御を実現したい場合
  • Nginxのプロキシ機能を利用して安全なネットワーク接続を構築したい場合

手順・設定方法

ステップ1: Dockerコンテナを作成しネットワークを構築

まず、Dockerコンテナ内にWebアプリケーションをインストールし、互いに通信できるようにします。

# Nginxコンテナの作成
docker run -d --name nginx-webserver -p 80:80 -v /path/to/config:/etc/nginx nginx

# Webアプリケーションコンテナの作成(例:Node.jsアプリ)
docker run -d --name node-app --network my-network -p 3000:3000 node-app

ステップ2: Nginxを設定してプロキシを作成

次に、NginxでDockerネットワーク内のサービスへのアクセスを制御します。以下は基本的な設定例です。

# Nginxのコンフィグファイル(/etc/nginx/nginx.conf)を開く
vi /etc/nginx/nginx.conf

# upstream設定
upstream node-app {
    server 172.20.0.3:3000; # Node.jsアプリケーションのIPアドレスとポート
}

server {
    listen 80;

    location /api/ {
        proxy_pass http://node-app/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

ステップ3: Nginxの設定を適用し再起動

設定が完了したら、Nginxの設定を反映させます。

# 設定ファイルのエラー検査
nginx -t

# 適用した後、サービスを再起動
systemctl restart nginx

ステップ4: ロードバランシングと監視

より複雑な環境では、ロードバランシングや監視機能も利用します。

# 2つ以上のNode.jsアプリケーションを設定(例:172.20.0.3と172.20.0.4)
upstream node-app {
    server 172.20.0.3:3000;
    server 172.20.0.4:3000;
}

# ヘーを追加する場合
location /api/ {
    proxy_pass http://node-app/;
    ...
}

注意事項

  • セキュリティ上の注意: Nginxで設定したヘッダー情報を適切に管理し、脆弱性を避ける。
  • パフォーマンス/運用上の注意: 構成は実際のネットワークとアプリケーションの要件に基づいて調整が必要。

まとめ

1. Dockerコンテナの作成とネットワーク設定: WebアプリケーションやNginxコンテナを作成し、互いに通信できるようにします。

2. Nginxのプロキシ設定: ネットワーク内での通信を制御し、必要に応じてロードバランシングも考慮します。

3. 設定適用と監視: Nginxの設定を適切に反映させ、運用環境でのパフォーマンスやセキュリティを確保します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ