🐳

【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