2026年7月20日

2026年7月20日

Nginxのlocationディレクティブの書き方と優先順位

はじめに

Nginxは、ウェブサーバーソフトウェアとして世界的に広く利用されています。高度なフィーチャーと優れたパフォーマンスが特徴で、特にリバースプロキシや負荷分散などの用途においては他のソフトウェアを上回る性能を発揮します。この記事では、Nginxの機能の中で重要な役割を果たすlocationディレクティブについて詳しく解説します。

重要性

  • locationディレクティブを使用することで、URLパスに基づいて異なるコンテンツや設定を適用することが可能となります。
  • 優先順位を理解することにより、複数のルールが競合した際にどの設定が優先されるかを予測しやすくなります。

症状・背景

このテーマが必要になる主な場面:

  • Nginxでウェブサイトに静的ファイルと動的コンテンツを提供する必要がある場合
  • リバースプロキシとしてNginxを使用して、複数のアプリケーションサーバーに負荷分散を行う場合
  • APIエンドポイントや特定のURLパターンに対して特別なリクエストハンドリングが必要な場合

手順・設定方法

ステップ1: 基本的なlocationディレクティブの使用

# ディレクトリ内のファイルを提供する基本的なlocation設定
server {
    listen 80;
    server_name example.com;

    location /images/ {
        alias /usr/share/nginx/html/images/;
        autoindex on;
    }
}

# URLパスが特定のパターンに一致した場合に応じた処理を行う例
server {
    listen 80;
    server_name example.com;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

ステップ2: 優先順位と正規表現の使用

# 正規表現を使用したlocation設定例。優先順位は最も具体的なパターンが最優先となる
server {
    listen 80;
    server_name example.com;

    location ~* ^/blog/(comments|posts)/.*\.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location /blog/ {
        alias /usr/share/nginx/html/blog/;
        index index.php;
    }
}

ステップ3: locationディレクティブの応用例

# ユーザー定義の変数を用いた動的なlocation設定
server {
    listen 80;
    server_name example.com;

    set $path /usr/share/nginx/html/;

    location ~* ^/$path/(.*)$ {
        try_files $uri =404;
    }

    # サブドメインに対する別途のlocation設定
    server {
        listen 80;
        server_name sub.example.com;

        location ~* ^/~(.+)$ {
            alias /home/$1/public_html/;
            index index.php;
        }
    }
}

ステップ4: ロギングとエラーハンドリング

# 特定のURLパターンに対するエラー処理設定例
server {
    listen 80;
    server_name example.com;

    location = /maintenance.html {
        return 503;
        error_page 503 @maintenance;
    }

    location @maintenance {
        internal;
        root /usr/share/nginx/html/;
        rewrite ^(.*)$ /maintenance.html break;
    }
}

注意事項

  • リソースの漏洩を防ぐため、明確な終端条件(})とブロック構造を必ずチェックする。
  • セキュリティ上の考慮点として、公開範囲が広いlocation設定に対しては適切な制限やアクセスコントロールを適用すること。
  • パフォーマンスの観点からは、可能な限り具体的で短い正規表現を使用し、頻繁に使用されるルールを優先的に配置する。

まとめ

1. 基本的な設定: locationディレクティブは、URLパスに基づいてファイル配信やリクエスト処理の方法を指定します。

2. 優先順位理解: 複数のlocationが重複すると、最も具体的なパターン(正確にマッチするもの)が優先されます。

3. 正規表現活用: 正規表現を使用することで、より柔軟で効率的な設定を実現できます。

4. 応用例: 複雑なロジックや動的変数もlocationディレクティブ内で扱えます。

5. エラーハンドリング: サイトのメンテナンスモードなど、特定の状況に対する処理を細かく設定できます。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ