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の設定を適切に反映させ、運用環境でのパフォーマンスやセキュリティを確保します。
関連記事: