nginx.conf完全ガイド|設定ファイルの基礎から実践まで徹底解説

Web

「Nginxのサーバー設定を変更したいけど、どこをいじればいいの?」

Nginxを使ってウェブサイトを運営していると、必ず出会うのが「nginx.conf」という設定ファイルです。このファイルは、Nginxがどのように動作するかを決める、いわば「設計図」のようなもの。

でも、初めて見ると「記号だらけで何が書いてあるか分からない…」と感じる方も多いはず。

この記事では、nginx.confの基本から、よく使う設定項目、実践的な設定例、トラブル対処まで分かりやすく解説していきます。

サーバー管理の第一歩として、nginx.confをマスターしましょう!


スポンサーリンク
  1. nginx.confって何?基本を理解しよう
    1. Nginxとは
    2. nginx.confの役割
    3. 設定ファイルの場所
  2. nginx.confの基本構造を知ろう
    1. ディレクティブとは
    2. コンテキストとは
    3. 階層構造
  3. 基本的なnginx.confの構成例
  4. 重要な設定項目を理解する
    1. mainコンテキストの主要設定
    2. eventsコンテキストの主要設定
    3. httpコンテキストの主要設定
  5. serverブロックの設定
    1. 基本的なserverブロック
    2. listen ディレクティブ
    3. server_name ディレクティブ
    4. root と index
  6. locationブロックの活用
    1. 基本的なlocationブロック
    2. locationの種類
    3. try_files の使い方
  7. SSL/HTTPS の設定
    1. 基本的なSSL設定
    2. HTTPからHTTPSへのリダイレクト
  8. リバースプロキシの設定
    1. 基本的なプロキシ設定
    2. ロードバランシング
  9. 設定変更の正しい手順
    1. 1. 設定ファイルをバックアップ
    2. 2. 設定ファイルを編集
    3. 3. 構文チェック
    4. 4. 設定を反映
  10. よくある設定例
    1. WordPress サイトの設定
    2. 静的ファイルのキャッシュ設定
    3. Basic認証の設定
  11. トラブルシューティング
    1. 設定変更後にNginxが起動しない
    2. 502 Bad Gateway エラー
    3. 403 Forbidden エラー
    4. ログファイルの確認
  12. セキュリティ設定
    1. サーバー情報の隠蔽
    2. アクセス制限
    3. レート制限
  13. パフォーマンス最適化
    1. gzip圧縮の有効化
    2. 静的ファイルのキャッシュ
    3. open_file_cache の設定
  14. よくある質問
    1. Q1. nginx.confを編集するのに特別な権限が必要?
    2. Q2. 複数のサイトを運営する場合は?
    3. Q3. 設定を間違えたらどうなる?
    4. Q4. デフォルト設定はどこにある?
    5. Q5. includeで読み込むファイルの推奨構成は?
  15. まとめ:nginx.confをマスターしよう

nginx.confって何?基本を理解しよう

Nginxとは

まず、Nginxについて簡単に説明しましょう。

Nginx(エンジンエックス)は、高速で軽量なウェブサーバーソフトウェアです。世界中の多くのウェブサイトで使われており、Apache と並ぶ人気のサーバーソフトですね。

nginx.confの役割

nginx.conf は、Nginxのメイン設定ファイルです。

このファイルに書かれた内容に従って、Nginxは以下のような動作を決定します。

  • どのポートで接続を受け付けるか
  • どのドメイン名でアクセスされたときに、どのファイルを表示するか
  • アクセスログをどこに保存するか
  • SSL証明書をどのように扱うか
  • リバースプロキシとして動作するかどうか

つまり、nginx.conf を理解すれば、サーバーの挙動を自由にコントロールできるということです。

設定ファイルの場所

nginx.conf は通常、以下の場所にあります。

一般的な配置場所

  • Linux系(Ubuntu、Debian)/etc/nginx/nginx.conf
  • Linux系(CentOS、RHEL)/etc/nginx/nginx.conf
  • macOS(Homebrewでインストール)/usr/local/etc/nginx/nginx.conf
  • WindowsC:\nginx\conf\nginx.conf

場所が分からない場合は、以下のコマンドで確認できます。

nginx -t

このコマンドは設定ファイルの構文チェックと同時に、使用している設定ファイルのパスも表示してくれますよ。


nginx.confの基本構造を知ろう

ディレクティブとは

nginx.confは「ディレクティブ」という命令文で構成されています。

ディレクティブは、「こういう設定にしてね」という指示のこと。以下のような形式で書かれます。

設定項目名 値;

セミコロン(;)で終わるのがポイントです。

例:シンプルなディレクティブ

worker_processes 4;

これは「ワーカープロセスを4つ起動してね」という意味です。

コンテキストとは

ディレクティブは「コンテキスト」という範囲の中に書かれます。

コンテキストは、波括弧 {} で囲まれたブロックのこと。どの範囲に対する設定なのかを示します。

主なコンテキスト

  • main(メイン):ファイル全体に適用される設定
  • events(イベント):接続処理に関する設定
  • http(HTTP):ウェブサーバー全体の設定
  • server(サーバー):個別のバーチャルホスト(サイト)の設定
  • location(ロケーション):特定のURLパスに対する設定

階層構造

これらのコンテキストは、入れ子構造になっています。

main コンテキスト
├── events コンテキスト
└── http コンテキスト
    └── server コンテキスト
        └── location コンテキスト

内側のコンテキストは、外側の設定を継承します。ただし、同じ設定があれば内側が優先されるんです。


基本的なnginx.confの構成例

実際のnginx.confがどんな感じか見てみましょう。

# ワーカープロセスの数(通常はCPUコア数に合わせる)
worker_processes auto;

# イベント処理の設定
events {
    worker_connections 1024;  # 1つのワーカーが処理できる接続数
}

# HTTP サーバーの設定
http {
    # MIMEタイプの設定ファイルを読み込む
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # ログの設定
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # パフォーマンス設定
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;

    # バーチャルホストの設定
    server {
        listen 80;  # ポート80で待ち受け
        server_name example.com;  # ドメイン名

        # ドキュメントルート
        root /var/www/html;
        index index.html index.htm;

        # URLごとの設定
        location / {
            try_files $uri $uri/ =404;
        }
    }
}

最初は複雑に見えますが、区切りを意識すれば理解しやすくなりますよ。


重要な設定項目を理解する

mainコンテキストの主要設定

worker_processes

Nginxが起動するワーカープロセスの数です。

worker_processes auto;

auto にすると、CPUコア数に合わせて自動設定されます。手動で指定する場合は、CPUコア数と同じ値にするのが一般的ですね。

user

Nginxを実行するユーザー名を指定します。

user nginx;

セキュリティのため、root以外の専用ユーザーで実行するのが基本です。

error_log

エラーログの出力先とレベルを設定します。

error_log /var/log/nginx/error.log warn;

レベルは debug, info, notice, warn, error, crit などが指定できます。

eventsコンテキストの主要設定

worker_connections

1つのワーカープロセスが同時に処理できる接続数です。

worker_connections 1024;

アクセスが多いサイトなら、この値を増やすことも検討しましょう。

httpコンテキストの主要設定

include

他の設定ファイルを読み込みます。

include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;

設定を分割して管理するのに便利です。

sendfile

ファイル送信の最適化機能です。

sendfile on;

通常は on にしておくと、パフォーマンスが向上します。

keepalive_timeout

接続を保持する時間(秒)です。

keepalive_timeout 65;

短すぎると頻繁に接続を確立する必要があり、長すぎるとリソースを圧迫します。

gzip

データを圧縮して転送する機能です。

gzip on;
gzip_types text/plain text/css application/json;

帯域幅を節約し、ページの読み込みを高速化できますよ。


serverブロックの設定

serverブロックは、個別のウェブサイトやアプリケーションの設定を行います。

基本的なserverブロック

server {
    listen 80;  # HTTPポート
    server_name example.com www.example.com;  # ドメイン名

    root /var/www/example.com;  # ドキュメントルート
    index index.html index.htm index.php;  # インデックスファイル

    location / {
        try_files $uri $uri/ =404;
    }
}

listen ディレクティブ

待ち受けるポートとIPアドレスを指定します。

listen 80;  # IPv4のポート80
listen [::]:80;  # IPv6のポート80
listen 443 ssl;  # HTTPSポート

server_name ディレクティブ

このserverブロックが対応するドメイン名を指定します。

server_name example.com www.example.com;

複数のドメインをスペース区切りで指定できます。ワイルドカードも使えますよ。

server_name *.example.com;  # サブドメインすべて
server_name .example.com;  # example.comとすべてのサブドメイン

root と index

root:ウェブサイトのファイルが置かれているディレクトリ
index:ディレクトリにアクセスされたときに表示するファイル

root /var/www/html;
index index.html index.htm index.php;

locationブロックの活用

locationブロックは、特定のURLパスに対する動作を定義します。

基本的なlocationブロック

location / {
    try_files $uri $uri/ =404;
}

これは「ファイルがあれば表示、なければ404エラー」という意味です。

locationの種類

前方一致(プレフィックスマッチ)

location /images/ {
    root /var/www;
}

/images/ で始まるURLにマッチします。

完全一致

location = /index.html {
    # 処理
}

= を使うと、完全に一致する場合のみマッチ。

正規表現(大文字小文字を区別)

location ~ \.php$ {
    # PHP ファイルの処理
}

~ を使うと正規表現が使えます。

正規表現(大文字小文字を区別しない)

location ~* \.(jpg|jpeg|png|gif)$ {
    # 画像ファイルの処理
}

~* は大文字小文字を区別しません。

try_files の使い方

リクエストされたファイルが存在するか順番に確認します。

try_files $uri $uri/ /index.php?$query_string;
  1. まず $uri(リクエストされたファイル)を探す
  2. なければ $uri/(ディレクトリ)を探す
  3. それもなければ /index.php にリダイレクト

フレームワークを使ったアプリケーションでよく使われる設定ですね。


SSL/HTTPS の設定

セキュアな通信のためのSSL設定も重要です。

基本的なSSL設定

server {
    listen 443 ssl;
    server_name example.com;

    # SSL証明書のパス
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # SSL設定
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # その他の設定
    root /var/www/html;
    index index.html;
}

HTTPからHTTPSへのリダイレクト

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

HTTP(ポート80)でアクセスされたら、HTTPS(ポート443)に転送する設定です。


リバースプロキシの設定

Nginxをリバースプロキシとして使う場合の設定です。

基本的なプロキシ設定

location / {
    proxy_pass http://localhost:3000;
    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;
}

バックエンドのアプリケーションサーバー(Node.js、Pythonなど)にリクエストを転送します。

ロードバランシング

複数のサーバーに負荷を分散する設定です。

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

設定変更の正しい手順

nginx.confを編集したら、以下の手順で適用します。

1. 設定ファイルをバックアップ

万が一のために、元の設定を保存しておきましょう。

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

2. 設定ファイルを編集

テキストエディタで編集します。

sudo nano /etc/nginx/nginx.conf

または

sudo vi /etc/nginx/nginx.conf

3. 構文チェック

編集後、必ず構文チェックを行います。

sudo nginx -t

成功時の表示

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

エラーがある場合

エラーメッセージが表示されるので、該当箇所を修正してください。

4. 設定を反映

構文チェックが成功したら、設定を反映させます。

リロード(推奨)

sudo nginx -s reload

または

sudo systemctl reload nginx

リロードは、既存の接続を切らずに設定を反映します。

再起動

sudo systemctl restart nginx

再起動は、すべての接続を一旦切断します。


よくある設定例

実際によく使われる設定パターンを紹介します。

WordPress サイトの設定

server {
    listen 80;
    server_name example.com;
    root /var/www/wordpress;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

静的ファイルのキャッシュ設定

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

画像やCSSファイルを30日間キャッシュさせる設定です。

Basic認証の設定

location /admin {
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

特定のディレクトリにパスワード認証をかける設定ですね。


トラブルシューティング

よくある問題と解決法を見ていきましょう。

設定変更後にNginxが起動しない

原因:構文エラー

構文チェックを実行して、エラー箇所を確認します。

sudo nginx -t

よくあるミス:

  • セミコロン(;)の付け忘れ
  • 波括弧({})の閉じ忘れ
  • クォート(””)の閉じ忘れ

502 Bad Gateway エラー

原因:バックエンドサーバーが起動していない

プロキシ先のアプリケーションが動作しているか確認しましょう。

systemctl status アプリケーション名

403 Forbidden エラー

原因1:ファイルのパーミッション

Nginxがファイルを読み取れるか確認します。

ls -la /var/www/html

原因2:index ファイルがない

指定したindexファイルが存在するか確認してください。

ログファイルの確認

問題が起きたら、まずログを確認しましょう。

エラーログ

sudo tail -f /var/log/nginx/error.log

アクセスログ

sudo tail -f /var/log/nginx/access.log

リアルタイムでログを監視できます。


セキュリティ設定

安全なサーバー運用のための設定です。

サーバー情報の隠蔽

http {
    server_tokens off;
}

Nginxのバージョン情報を非表示にします。

アクセス制限

location /admin {
    allow 192.168.1.0/24;  # 許可するIPアドレス
    deny all;  # その他は拒否
}

特定のIPアドレスからのみアクセスを許可できます。

レート制限

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

    server {
        location / {
            limit_req zone=one burst=20;
        }
    }
}

DDoS攻撃を防ぐため、アクセス頻度を制限します。


パフォーマンス最適化

サーバーの処理速度を向上させる設定です。

gzip圧縮の有効化

http {
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript 
               application/x-javascript application/xml+rss 
               application/json;
}

転送データを圧縮して、通信量を削減します。

静的ファイルのキャッシュ

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 1y;
    access_log off;
    add_header Cache-Control "public, immutable";
}

open_file_cache の設定

http {
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

頻繁にアクセスされるファイルをキャッシュして、ディスク読み込みを削減します。


よくある質問

Q1. nginx.confを編集するのに特別な権限が必要?

はい、root権限が必要です。

sudo コマンドを使って編集してください。

Q2. 複数のサイトを運営する場合は?

各サイトごとにserverブロックを作成します。

または、/etc/nginx/sites-available/ に個別のファイルを作って、includeで読み込む方法もありますよ。

Q3. 設定を間違えたらどうなる?

構文エラーがあると、Nginxが起動しません。

でも、既存の設定ファイルのバックアップがあれば、すぐに元に戻せます。

Q4. デフォルト設定はどこにある?

インストール時の設定は /etc/nginx/nginx.conf にあります。

配布元によって多少内容が異なることがあるので、公式ドキュメントも確認しましょう。

Q5. includeで読み込むファイルの推奨構成は?

一般的な構成:

  • /etc/nginx/nginx.conf:メイン設定
  • /etc/nginx/conf.d/*.conf:追加の設定
  • /etc/nginx/sites-available/:個別サイトの設定
  • /etc/nginx/sites-enabled/:有効化されたサイト

管理しやすい構造を選びましょう。


まとめ:nginx.confをマスターしよう

nginx.confについて、重要なポイントをまとめます。

基本構造

  • ディレクティブとコンテキストで構成
  • main → events → http → server → location の階層
  • セミコロン(;)と波括弧({})に注意

重要な設定項目

  • worker_processes:プロセス数
  • worker_connections:接続数
  • server_name:ドメイン名
  • root:ドキュメントルート
  • location:URLごとの設定

設定変更の手順

  1. バックアップを取る
  2. 設定ファイルを編集
  3. nginx -t で構文チェック
  4. nginx -s reload で反映

よく使う設定

  • SSL/HTTPS設定
  • リバースプロキシ
  • 静的ファイルのキャッシュ
  • アクセス制限
  • gzip圧縮

トラブル対処

  • ログファイルを確認
  • 構文チェックを実行
  • バックアップから復元

nginx.confは最初は難しく感じますが、基本構造を理解すれば、柔軟にサーバーを設定できるようになります。この記事を参考に、安全で高速なウェブサーバーを構築してくださいね!

コメント

タイトルとURLをコピーしました