Nginx 入門:まずは“静的配信”と“リバースプロキシ”を手で作って仕組みをつかむ

はじめに

Nginx(エンジンエックス)は、Webサーバとしても、リバースプロキシとしても、ロードバランサとしても使える“交通整理係”のような存在です。アプリケーション(Node.js / Go / Java など)を作ると、最後はだいたい「外からアクセスできるように公開する」工程に行き着きます。そのときに、アプリを直接インターネットへ晒すのではなく、手前にNginxを置いて「入口」を作るのが定番です。

ただ、最初に詰まりやすいのもNginxです。設定ファイルの書き方が独特で、ディレクティブ(設定項目)の意味が分からないと、エラーが出ても修正ポイントを見つけづらい。そこでこの記事では、いきなり難しい構成に行かずに、Nginxの基本機能を最短距離で体感することを目的にします。

ゴールは次の2つです。

  • 静的ファイルをNginxで配信できる
  • アプリ(例:Go/Node)をNginxでリバースプロキシできる

そして、最後に「次に何をやると伸びるか」も、別テーマで2つ提示します。


座学

1) Nginxは何をしているのか

Nginxが受けるのは基本的にHTTPリクエストです。受けたリクエストを、状況に応じて次のどれかへ振り分けます。

  • ファイルとして返す(静的配信)
    /index.html や画像、CSS、JSなどをディスクから読み、レスポンスとして返す。
  • 別のサーバへ渡す(リバースプロキシ)
    /api へのアクセスはアプリサーバへ、/ は静的配信へ…のように役割を分ける。
  • 複数へ分配する(ロードバランシング)
    同じアプリが2台/3台あるとき、どこへ投げるか決める。

入門で押さえるべきポイントは「静的配信」と「リバースプロキシ」です。ここが分かると、Nginxが“入口として機能する”感覚がつかめます。


2) serverlocation の読み方

Nginx設定の中心はだいたいこの形です。

  • http { ... }:HTTP全体の設定
  • server { ... }:仮想ホスト(このドメイン/このポートの入口)
  • location { ... }:パスごとの振り分け

大雑把に言うと、

  • server = 「どのホスト名/ポートに来た通信か」
  • location = 「URLパスが何から始まるか」

です。例えば「/api だけアプリに流して、他は静的ファイルを返す」は、まさに location の仕事です。


3) roottry_files は入門の最重要セット

静的配信で必ず出てくるのが roottry_files

  • root:ファイルを探す基準ディレクトリ
  • try_files:指定した候補順にファイルを探し、見つからなければ別の扱いにする

SPA(React/Vueなど)を配信するときに「ページ更新すると404になる」問題は、try_files を知らないとハマります。入門のうちに触れておくと後が楽です。


4) proxy_pass の最低限の勘所

リバースプロキシは proxy_pass が主役です。

  • Nginxが受けたリクエストを、アプリサーバ(例:http://127.0.0.1:3000)へ転送します
  • その際、ヘッダ(HostやX-Forwarded-Forなど)を付け替えたり追加したりします

入門では、まず “動く” を優先して、最低限のヘッダ付与を覚えるのが良いです。


ハンズオン

ここでは、ローカル(またはLinuxサーバ)で「静的配信」と「リバースプロキシ」を実際に作ります。OSはUbuntu系でもRHEL系でも概ね同じ考え方です。

0) 前提:Nginxの起動確認

インストール後、Nginxが動いているかを確認します。

  • 設定テスト:nginx -t
  • 起動:systemctl start nginx
  • ステータス:systemctl status nginx

ブラウザで http://localhost(サーバならIP)にアクセスして、Nginxのデフォルトページが出ればOKです。


1) 静的配信:HTMLを置いて返す

まずは“ファイルを返すだけ”を作ります。

(1) 配信ディレクトリを用意

例:/var/www/nginx-beginner

  • index.html を作成して、簡単な文言を入れます
    例:「Hello Nginx」「静的配信できた」など

(2) サーバ設定を書く

Nginxは環境によって設定の置き場所が違いますが、Debian/Ubuntuなら sites-available / sites-enabled がよく使われます。

例:/etc/nginx/sites-available/beginner.conf

  • 80番で待ち受け
  • root/var/www/nginx-beginner にする
  • indexindex.html にする

これで http://localhost/index.html を返せるようになります。

(3) SPA想定の try_files を追加(おすすめ)

もし将来 React/Vue のビルド成果物を置くなら、次を入門のうちに体験しておくと強いです。

  • location / { try_files $uri $uri/ /index.html; }

これで、/about みたいなパスでも index.html にフォールバックできます(ルーティングをフロント側で解決するため)。


2) リバースプロキシ:アプリへ転送する

次に、アプリサーバを立てて、Nginxから中継します。

(1) アプリの例(どれでもOK)

  • Goなら :8080 で “Hello from App” を返す
  • Nodeなら :3000 で同様

ここでは「アプリが直接叩ける状態」を先に作ります。
例:curl http://127.0.0.1:8080 でレスポンスが返ってくる状態。

(2) Nginxで /api をアプリへ流す

Nginx側の server の中に次を作ります。

  • location /api/ { proxy_pass http://127.0.0.1:8080/; }

最初はこれだけでも動きます。加えて、実運用に近づける最低限としてヘッダを付けます。

  • 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) 動作確認

  • curl http://localhost/api/ で、アプリの返答が来ること
  • http://localhost/ は静的HTMLが返ること

この時点で「Nginxが入口になって、パスで振り分けている」構造が完成です。ここが掴めれば、Nginxの学習は一気に進みます。


3) 入門で一度だけ触れておくと強い:ログ

詰まったらログです。Nginxはログが素直です。

  • アクセスログ:どのリクエストが来たか
  • エラーログ:なぜ返せなかったか、上流が死んでるか等

典型的な詰まりポイントは次の3つです。

  • nginx -t は通るのに期待通り動かない → location のマッチが違う
  • 静的ファイルが404 → root のパスが違う、権限がない
  • リバースプロキシが502 → アプリが落ちてる / ポートが違う / proxy_pass が違う

この3つをログで切り分けられるだけで、入門としては十分“戦える”状態です。


まとめ

Nginx入門の最短ルートは、複雑な理屈より先に「入口としての役割」を体で覚えることです。この記事では、

  • root + try_files静的配信
  • location + proxy_passリバースプロキシ
  • ログで 切り分け

という、実務で最も登場頻度が高い基本を押さえました。

ここまでできれば、Nginxは「なんか難しい設定ファイル」ではなく、「通信の流れを設計する道具」に変わります。次は、扱うトラフィックが増える・要件が増える場面で、より強い武器が必要になります。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です