2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Nginx】Nginxの役割と設定ファイルの書き方まとめ

2
Last updated at Posted at 2026-10-26

直近のプロジェクトにて、Nginxの設定ファイルを修正する機会がありました。その際に学習した基礎知識や設定ファイルの書き方を整理し、実務で役立つTipsとともにまとめました。


1. Nginxの役割とシステムにおける位置づけ

Nginxは単に「Webページを表示する」だけでなく、Webシステム全体の**「優秀な窓口(フロントマン)」**として、以下のような重要な役割を担っています。

[ クライアント (ブラウザ) ]
           │ (HTTPS / HTTP)
           ▼
┌──────────────────────────────────────────────┐
│                  Nginx                       │
│  ① 静的配信  ② リバースプロキシ  ③ ロードバランス │
│  ④ SSL/TLS終端                                │
└──────────────────┬───────────────────────────┘
                   │ (HTTP / 内部ネットワーク)
                   ▼
┌──────────────────────────────────────────────┐
│  バックエンド (Node.js / Go / Python など)     │
└──────────────────────────────────────────────┘

① 静的コンテンツの高速配信(Webサーバー)

HTML、CSS、JavaScript、画像といった静的ファイルを、イベント駆動型の軽量・非同期アーキテクチャにより高速かつ省メモリで配信します。

② アプリの保護・中継(リバースプロキシ)

外部からのアクセスを最初に受け付け、背後にあるアプリケーションサーバー(Node.js、Python、Go、Rubyなど)へ安全にリクエストを中継します。
バックエンドのIPアドレスや内部ポート番号を外部に晒さずに済むため、セキュリティが向上します。

③ アクセス集中の分散(ロードバランサー)

1台のアプリサーバーにアクセスが集中してダウンしないよう、複数のバックエンドサーバーへ均等(または負荷状況に応じて)にリクエストを振り分けます。

④ 暗号化通信の集約(SSL/TLSアクセラレータ)

常時HTTPSが標準となった現在、暗号化・復号処理はサーバーに一定の計算負荷を与えます。Nginxが最前線でSSL/TLS通信を複合(SSL終端)し、バックエンドへは通常のHTTPで素通しすることで、アプリケーション側の負荷を大幅に軽減できます。


2. nginx.conf の基本構造と記述ルール

Nginxの設定ファイルは、C言語に似たブロック記法とディレクティブ(命令文)で構成されています。

基本的な構文ルール

  • ディレクティブ(命令)の末尾には必ずセミコロン ; を付ける(付け忘れると構文エラーになります)。
  • # 以降はコメント行として扱われます。
  • 設定は階層関係(コンテキスト)になっており、外側で設定した内容は内側のブロックへ継承されます。

コンテキストの階層構造

# --- main コンテキスト (最上位) ---
user  nginx;
worker_processes  auto;

http {
    # --- http コンテキスト ---
    # Web通信全体の共通設定

    server {
        # --- server コンテキスト ---
        # バーチャルホスト(ドメイン・ポート単位の設定)

        location / {
            # --- location コンテキスト ---
            # URLパスごとの個別ルーティング
        }
    }
}
コンテキスト 役割・主な記述内容
main ファイルの最上位(波括弧の外側)。プロセス数(worker_processes)や実行ユーザー、ログファイルの基本出力先などを設定。
http http { ... } のブロック。Web処理全般の基盤となる共通設定(MIMEタイプ、ログフォーマット、タイムアウト時間など)を設定。
server server { ... } のブロック。ドメインやポートごとの仮想サーバー(バーチャルホスト)設定。
location location { ... } のブロック。URLのパス(URI)に応じたルーティングやファイルマッピングの個別制御。

3. サーバー設定ファイル(serverブロック)の具体例

実務で頻繁に利用される「静的サイト配信」と「リバースプロキシ」の2大構成を紹介します。

① 静的ホームページを配信する設定

HTMLや画像などを特定のディレクトリからそのまま配信する、Webサーバーとしての標準的な構成です。

server {
    # 1. 待ち受けるポート番号(HTTPの標準は80)
    listen 80;

    # 2. サービスを提供するドメイン名(複数指定可能)
    server_name example.com www.example.com;

    # 3. Webサイトのファイルが配置されているディレクトリ(ドキュメントルート)
    root /var/www/html;

    # 4. ディレクトリ指定(/)でアクセスされた際に探すデフォルトファイル
    index index.html index.htm;

    # 5. 通常のリクエスト処理
    location / {
        # 指定されたURIのファイルを探し、なければディレクトリを探し、それでもなければ404を返す
        try_files $uri $uri/ =404;
    }

    # 6. エラーページのカスタム設定
    error_page 404 /404.html;
    location = /404.html {
        root /var/www/error_pages;
        internal; # 外部からの直接アクセスを禁止し、内部転送のみ許可
    }
}

② バックエンドへ転送する設定(リバースプロキシ)

Node.js、Go、Python(FastAPI/Django)などのAPIサーバーの手前にNginxを置く、最も実務で遭遇しやすい構成です。

server {
    listen 80;
    server_name api.example.com;

    location / {
        # 1. 転送先バックエンドサーバーのURL(ポート番号)
        proxy_pass http://127.0.0.1:3000;

        # 2. クライアントの情報をバックエンドへ引き渡すためのヘッダー設定
        # クライアントがアクセスしてきたホスト名をバックエンドへ伝達
        proxy_set_header Host $host;

        # クライアントの実際のIPアドレスを伝達
        proxy_set_header X-Real-IP $remote_addr;

        # 経由したプロキシ経路のIP一覧を追記して伝達
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # クライアントが接続してきたプロトコル(http / https)を伝達
        proxy_set_header X-Forwarded-Proto $scheme;

        # 3. タイムアウト設定(任意)
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
    }
}

ポイント:なぜ proxy_set_header が必要なのか?
リバースプロキシを経由すると、バックエンドサーバーから見たアクセス元IPはすべて「NginxのIP(例: 127.0.0.1)」に見えてしまいます。アクセスログの記録や認証処理を正しく行うため、クライアントの本当のIPや接続プロトコルをヘッダーに詰めて後ろへ渡す必要があります。


4. 設定変更時に必須の運用コマンド

Nginxの設定ファイルを編集した後は、即座に再起動してはいけません。記述ミスがあるとWebサーバー全体がダウンしてしまいます。

1. 構文チェックを行う(必須)

設定ファイルを書き換えたら、反映前に必ず構文チェックコマンドを実行します。

sudo nginx -t

文法にエラーがなければ、以下のように successful と出力されます。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

もしセミコロン抜けやパスの誤りがある場合は該当行のエラーが出力されるため、修正してから次に進みます。

2. 設定を安全に再読み込みする(Graceful Reload)

設定反映には restart ではなく reload を使用します。

sudo systemctl reload nginx
  • restart:一度プロセスを完全終了させてから立ち上げ直すため、瞬間的な切断・ダウンタイムが発生します。
  • reload:既存の接続を維持したまま、バックグラウンドで新しいワーカプロセスを立ち上げて設定を適用するため、**ダウンタイムゼロ(無停止)**で反映されます。

5. まとめ

  • Nginxの強み:静的配信の高速性だけでなく、リバースプロキシやSSL集約によってバックエンドアプリを保護・軽量化できる点にある。
  • 設定ファイルの基本:main > http > server > location の入れ子構造を意識し、末尾のセミコロン ; を忘れない。
  • 運用ルール:本番環境での反映前には必ず nginx -t でテストを行い、systemctl reload nginx で無停止反映する。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?