🐳
【Docker基本】Docker + Nginx Reverse Proxy 解説
🔰 Proxy サーバーとは?
クライアントがインターネット上のサービスに直接アクセスするのではなく、中継として動作するサーバーです。
✔️ 主な目的:
- セキュリティ向上(内部サーバーを隠す)
- キャッシュによる高速化
- アクセス制御
🧩 フォワードプロキシ(Forward Proxy)
- 内部のクライアント → 外部インターネットへのリクエストを中継
- よく使うデータをキャッシュして高速化も可能
- 社内環境でWebアクセス制限に使われることも多い
🧩 リバースプロキシ(Reverse Proxy)
- 外部からのアクセスを代理で内部に転送
- ロードバランシングやセキュリティ強化に有効
🛠️ docker-compose構成例
version: "3"
services:
nginxproxy:
image: nginx:1.18.0
ports:
- "8080:8080"
- "8081:8081"
restart: always
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
nginx:
depends_on:
- nginxproxy
image: nginx:1.18.0
restart: always
apache:
depends_on:
- nginxproxy
image: httpd:2.4.46
restart: always
🔧 nginxの設定例(ポートによるルーティング)
server {
listen 8080;
location / {
proxy_pass http://docker-nginx;
proxy_redirect off;
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-Host $server_name;
}
}
🧩 ポートによる分岐構成図
-
NginxProxy に 8080/8081 でアクセス
8080 → Nginx
8081 → Apache
🌐 パスによるルーティングの例(Location使用)
server {
listen 80;
location /blog/ {
proxy_pass http://docker-nginx;
}
location /community/ {
proxy_pass http://docker-apache;
}
}
-
/blog/
→ Nginx にルーティング -
/community/
→ Apache にルーティング
🔄 パス書き換え(rewriteの使用)
location /blog/ {
rewrite ^/blog(.*)$ $1 break;
proxy_pass http://docker-nginx;
}
✔️ 解説
要素 | 内容 |
---|---|
^/blog(.*)$ |
/blog から始まるURLを検出 |
$1 |
blogの後ろのパス部分を再利用 |
break |
この location だけで完結させる |
例:
- アクセス →
/blog/test.html
- 変換 →
test.html
- 実際に nginx 内部で
/test.html
にアクセスされる
✅ 補足まとめ
目的 | 方法 |
---|---|
外部アクセス可能にする |
docker-compose.yml でポート公開 |
Nginxで複数サービス切替 | ポート or パスで分岐設定 |
URLの書き換え |
rewrite ディレクティブ使用 |
Discussion