ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
本記事では、リバースプロキシ の代表実装である nginx を、実際にリバースプロキシとして設定する方法を具体的なディレクティブとともに解説します。中心となるのは proxy_pass・upstream・location・proxy_set_header の 4 つです。これらを組み合わせると、SSL 終端・負荷分散・パスベースルーティングを 1 つの設定ファイルで実現できます。設定ファイルの基礎は conf(.conf) も参照してください。親項目は 負荷分散・プロキシ・CDN です。
仕組み
nginx の設定は http ブロックの中に server ブロックを置き、その中に location ブロックを並べる入れ子構造です。リバースプロキシに関わる主要ディレクティブは次のとおりです。
- proxy_pass: その
locationにマッチした要求の転送先 (バックエンドの URL や upstream 名) を指定する。リバースプロキシの心臓部。 - upstream: 複数のバックエンドサーバを 1 つのグループ名にまとめる。分散アルゴリズム (
least_conn/ip_hash等) もここで指定する。 - location: パス (URL) ごとに処理を分ける。
/apiと/で別のバックエンドへ送るといった振り分けに使う。 - proxy_set_header: バックエンドへ転送する際にヘッダを追加・上書きする。クライアントの元 IP やホスト名を伝えるために必須。
とくに proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; は、転送のたびにクライアントの IP を追記していくため、バックエンドが本来のアクセス元を把握できます。X-Forwarded-Proto $scheme は、クライアントが HTTP/HTTPS どちらで来たかをバックエンドへ伝えます。HTTPS の基礎は HTTPS を参照してください。
設定・実用例
HTTPS で受け、/api/ はアプリ群へ負荷分散、それ以外はローカルの静的ファイルを返す、実用的な構成例です。HTTP (80) は HTTPS へリダイレクトします。
# 複数のアプリサーバをまとめる
upstream api_backend {
least_conn;
server 10.0.0.21:8000;
server 10.0.0.22:8000;
server 10.0.0.23:8000 backup; # 通常は使わない予備機
}
# HTTP は HTTPS へリダイレクト
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
# HTTPS で受けて SSL 終端
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
# /api/ への要求はアプリ群へ転送
location /api/ {
proxy_pass http://api_backend;
# クライアントの本来の情報を引き継ぐ (定番セット)
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;
proxy_read_timeout 60s;
}
# それ以外は静的ファイルを直接配信
location / {
root /var/www/html;
index index.html;
}
}
設定変更後は構文チェックしてから再読み込みします。サービスを止めずに反映できます。
# 構文チェック
sudo nginx -t
# 問題なければ無停止で再読み込み
sudo nginx -s reload
# もしくは
sudo systemctl reload nginx
主な用途
- SSL 終端 + 平文転送: 証明書を nginx に集約し、バックエンドは HTTP で単純運用する。
- 負荷分散:
upstreamに複数台並べ、proxy_passでグループへ振り分ける。 - パスベースルーティング:
/apiはアプリ、/staticは静的配信、とlocationで分ける。 - WebSocket 中継:
Upgrade/Connectionヘッダを設定して双方向通信を通す。 - キャッシュ前段:
proxy_cacheでバックエンドの応答をキャッシュし負荷を下げる。
主要ディレクティブの整理
| ディレクティブ | 役割 | 記述例 |
|---|---|---|
| proxy_pass | 転送先の指定 | proxy_pass http://api_backend; |
| upstream | バックエンド群の定義 | upstream api_backend { ... } |
| location | パスごとの振り分け | location /api/ { ... } |
| proxy_set_header | ヘッダの付与/上書き | proxy_set_header Host $host; |
| ssl_certificate | SSL 終端の証明書 | ssl_certificate /path/crt; |
注意点
- proxy_pass の末尾スラッシュ:
proxy_pass http://backend/;と/有無でlocationのパス処理が変わる。意図しないパス書き換えに注意。 - Host ヘッダの引き継ぎ:
proxy_set_header Host $host;を忘れると、バックエンドが想定したホスト名で動作せず 404 やリダイレクトループになることがある。 - X-Forwarded-For の信頼: 外部から直接届く位置のヘッダはクライアントが詐称できる。アプリ側は信頼するプロキシの値だけ採用する。
- タイムアウト: 長時間処理やストリーミングでは
proxy_read_timeoutを延ばさないと途中で切れる。 - reload 前に nginx -t: 構文エラーのまま reload すると反映されない/起動失敗する。必ず
nginx -tで検証する。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?