NginxのLocationを設定する|root, aliasなど

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年9月)

✔以下のような方に向けて、一から詳しく解説していきます

「nginx locationディレクティブとは何なのか?その役割を理解したい」

「nginx locationの設定方法を掴みたい」

「nginx locationの具体的な設定例を確認したい」

✔当記事を読んで得られる情報

  • nginx locationディレクティブの基本理解
  • nginx locationの正しい設定方法とその独自的な活用
  • nginx locationを用いた真の設定例

当記事では、nginx locationの基本的な使い方だけでなく、locationの応用した書き方で、どのように動作するかまで、具体的なケースを通じて紐解いていきます。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

nginxとlocationについての全体理解

こちらでは、「nginxとlocation」についてお伝えしていきます。

  • nginxとlocationの概念を理解する
  • locationの主な役割と用途を知る

nginxとlocationの概念

nginxは高いパフォーマンスを誇るWebサーバーソフトウェア。

その中でlocationブロックは、URLの振り分けに使われます

例えば、特定のパスへのリクエストを特定のディレクトリにルーティングする場合など。

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

この組み合わせによって、柔軟なサイトの構築が可能です。

locationの主な役割と用途

locationブロックの役割は、特定のURIへのリクエストの処理方法を指定すること。

例えば以下は、画像やCSSファイルへのリクエストをキャッシュディレクトリにルーティングする設定です。

http {
    # その他の設定...

    # キャッシュの設定
    proxy_cache_path /var/cache/nginx/ levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    server {
        listen 80;

        # その他の設定...

        # 静的ファイルへのリクエストをキャッシュする
        location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            proxy_pass http://your_backend_address; # この部分を実際のバックエンドアドレスに置き換える。同サーバーであれば、rootと同じディレクトリ指定でも良い。
            proxy_cache my_cache;
            proxy_cache_valid 200 48h; # 200のレスポンスを48時間キャッシュする
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
            proxy_cache_revalidate on;
            proxy_cache_lock on;
            add_header X-Proxy-Cache $upstream_cache_status;
        }
    }
}

このように、locationはサイトの効率と機能を高める重要な部分です。

パス設定と名前付きlocationの活用

こちらでは、「パス設定と名前付きlocationの活用」についてお伝えしていきます。

  • URIのパス設定:locationの使い方
  • メリットと使い方:名前付きlocation

URIのパス設定:locationの使い方

URIのパス設定は、nginxのlocationブロックでおこないます。

特定のパスへのリクエストを特定のファイルやディレクトリに割り当てることも可能です。

location /images/ { alias /data/images/; }

とすると、/images/へのリクエストは/data/images/ディレクトリにルーティングされます。

メリットと使い方:名前付きlocation

名前付きlocationは、特定のリクエストのみを処理する内部のlocationです。

例として、エラーページのカスタマイズや特別なルーティングなどがおこなえます。

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    # 通常のlocationブロック
    location / {
        try_files $uri $uri/ =404;
    }

    # 404エラーが発生した場合の処理
    error_page 404 = @custom_404;

    # 名前付きlocationブロック
    location @custom_404 {
        root /var/www/example.com/errors;
        rewrite ^ /404.html break;
    }
}

この機能により、設定ファイルの整理と効率化が可能で、拡張性も高まります。

locationの詳細設定:aliasとネスト

こちらでは、「locationの詳細設定:aliasとネスト」についてお伝えしていきます。

  • パスの割り当て-aliasの理解と活用
  • 設定の綺麗さを保つ:ネストを活用してより読みやすい設定を作る

パスの割り当て-aliasの理解と活用

aliasはlocationブロック内での特定のパスへの割り当てを指定するものです。

location /app/ { alias /var/www/app/; }

/app/へのリクエストを/var/www/app/へ割り当てます。

これにより、より具体的なルーティングの制御が可能です。

設定の綺麗さを保つ:ネストを活用してより読みやすい設定を作る

ネストとは、locationブロックをほかのブロックの内部に配置することで、設定の整理と可読性を高めます。

複数のパスに共通の設定を適用したい場合、ネストすることでコードの重複を防げるのです。

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    # /static/ ディレクトリに関する設定
    location /static/ {
        # このディレクトリのコンテンツはキャッシュ可能
        expires 30d;

        # CSSファイルに関する特別な設定
        location ~* \.css$ {
            add_header Content-Type text/css;
        }

        # JSファイルに関する特別な設定
        location ~* \.js$ {
            add_header Content-Type application/javascript;
        }
    }
}

この方法によって、設定の管理がより簡単になります。

内部リダイレクトとインデックス設定

こちらでは、「内部リダイレクトとインデックス設定」についてお伝えしていきます。

  • 内部リダイレクトの理解と利用
  • インデックス-indexの設定方法

内部リダイレクトの理解と利用

内部リダイレクトは、リクエストをサーバー内で別の場所に静かにリダイレクトする機能です。

ユーザーがアクセスしたページが移動した場合、内部リダイレクトで新しいページに遷移させられます。

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    # ユーザーが /old-page.html にアクセスした場合の処理
    location = /old-page.html {
        # 内部的に /new-page.html にリダイレクト
        try_files /new-page.html =404;
    }

    # 通常のlocationブロック
    location / {
        try_files $uri $uri/ =404;
    }
}

この機能は、サイトの構造変更時に役立ちます。

インデックス-indexの設定方法

indexディレクティブは、ディレクトリのデフォルトページを設定するものです。

index index.html;

ディレクトリにアクセスされた際、自動的にindex.htmlが表示されます。

これによって、ウェブサイトのナビゲーションとユーザーエクスペリエンスが向上するでしょう。

index.phpを表示したい時は、indexディレクティブで、「index.php」を指定してください。

ファイルのチェックとエラーページ設定

こちらでは、ファイルの存在チェックとエラーページの設定についてお伝えします。

  • ファイル存在チェック:try_filesの活用
  • メンテナンスやエラー時の対応:エラーページ-error_pageの設定

ファイル存在チェック:try_filesの活用

nginxのtry_filesディレクティブを使用すると、指定したファイルの存在を順番にチェックできます。

存在しない場合は次のファイルへ、全てない場合はエラーページへとリダイレクトするなどの設定が可能です。

try_files $uri $uri/ =404;

URLに合致するファイルがなければ404エラーを返します。

メンテナンスやエラー時の対応:エラーページ-error_pageの設定

エラーページの設定は、特定のエラーにカスタムエラーページを表示するためのものです。

例えば、error_page 404 /404.html;と設定すると、404エラー発生時に/404.htmlを表示します。

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    # カスタムエラーページの設定
    error_page 404 /404.html;
    error_page 500 502 503 504 /500.html;

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

    # カスタム404エラーページの場所
    location = /404.html {
        internal;
    }

    # カスタム500エラーページの場所
    location = /500.html {
        internal;
    }
}

これにより、ユーザーにフレンドリーなエラー情報を提供し、サイトの印象を向上させられます。

internalディレクティブは、該当のエラーページが直接のリクエストによってアクセスされないようにするためのもの。これにより、エラーページはエラーが発生したときにのみ表示されます。

内部リクエストの扱いとバーチャルサーバ設定

こちらでは、「内部リクエストの扱いとバーチャルサーバ設定」についてお伝えします。

  • 内部リクエスト指定とその活用
  • バーチャルサーバ設定の手順とまとめ

内部リクエスト指定とその活用

内部リクエストは、nginx内での特定処理だけに使用されるリクエストを指定する機能です。

エラーページや特別なルーティングなどに使用することが一般的。

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    # 通常のlocationブロック
    location / {
        try_files $uri $uri/ =404;
    }

    # カスタムエラーページの設定
    error_page 404 /errors/404.html;
    error_page 500 502 503 504 /errors/500.html;

    # カスタム404エラーページの場所
    location /errors/404.html {
        internal;
    }

    # カスタム500エラーページの場所
    location /errors/500.html {
        internal;
    }
}

これにより、外部から直接アクセスできない安全なルーティングを構築できます。

バーチャルサーバ設定の手順

バーチャルサーバは、ひとつの物理サーバ内で複数のWebサイトを運用する設定のこと。

nginxでは、異なるドメインやポートでのリクエストを個別に処理する設定が可能です。

これにより、リソースの効率的な利用と管理の効率化が実現します。

設定手順としては、各サイトごとにサーバブロックを定義し、必要なlocationブロックを設定する方法が一般的です。

ベストプラクティスと実例

こちらでは、「nginx location設定のベストプラクティスと実例」についてお伝えします。

  • nginx location設定のベストプラクティス
  • 実践的なnginx location設定例

nginx location設定のベストプラクティス

nginx location設定のベストプラクティスは、効率的かつ安全な設定のためのガイドラインです。

主なものとして、以下が挙げられます。

  1. 明確な命名規則の採用
    /static/や/api/のような明確なパスを使用して、各locationブロックの目的を明確にします。
  2. 不必要な設定の排除
    必要最低限の設定のみを保持し、冗長な設定や不要なモジュールの読み込みを避けます。
  3. セキュリティの強化
    特定のファイルやディレクトリへのアクセスを制限し、不正なアクセスや脆弱性の悪用を防ぐ設定をおこないます。
server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    # 1. 明確な命名規則の採用
    # 静的ファイルに関する設定
    location /static/ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # APIエンドポイントに関する設定
    location /api/ {
        proxy_pass http://backend_server;
    }

    # 2. 不必要な設定の排除
    # 通常のlocationブロック
    location / {
        try_files $uri $uri/ =404;
    }

    # 3. セキュリティの強化
    # .htaccessや.gitなどのファイルへのアクセスを拒否
    location ~ /\.(ht|git) {
        deny all;
    }

    # PHPファイルの実行設定
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        # PHPファイルのアップロードを制限
        client_max_body_size 10m;
    }
}

これらの実践により、サイトのパフォーマンスとセキュリティが向上します。

実践的なnginx location設定例

実践的な設定例としては、以下のようなものがあります。

  1. 静的ファイルのキャッシュ設定
    (例)特定の静的ファイル拡張子に対して、30日間のキャッシュ期間を設定
  2. 特定IPからのアクセス制限
    (例)/admin/ ディレクトリへのアクセスは、指定されたIPアドレスからのみ許可され、それ以外のIPからのアクセスは拒否
  3. SSLの設定
    (例)443ポートでのリクエストはSSLを使用して処理され、適切な証明書と暗号化設定が適用
server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;

    # 静的ファイルのキャッシュ設定
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # 特定IPからのアクセス制限
    location /admin/ {
        allow 192.168.1.1;  # 許可するIPアドレス
        deny all;          # それ以外のIPからのアクセスを拒否
    }

    # 通常のlocationブロック
    location / {
        try_files $uri $uri/ =404;
    }
}

# SSLの設定
server {
    listen 443 ssl;
    server_name example.com;

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

    # その他のSSL関連の設定
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ginxがSSL/TLS接続の際に使用する暗号スイートのリストを指定';
    ssl_prefer_server_ciphers on;

    # 通常のlocationブロック
    location / {
        try_files $uri $uri/ =404;
    }
}

ssl_ciphersについては以下の公式サイトなどを参考に取得してください。

Module ngx_http_ssl_module

これらの設定は、一般的なWebサイト運用でよく使用されるため、具体的なコード例と共に理解しておくと、今後のサイト構築に役立ちます。

location設定の注意点

こちらでは、「location設定の注意点と総括」についてお伝えします。

  • nginx location設定時の注意点
  • nginx locationの学びと次のステップ

nginx location設定時の注意点

nginxのlocation設定時には、とくに以下が重要です。

  • 優先順位の理解
  • 正しいsyntaxの確保
  • テスト環境での検証

間違った設定はサイトの動作不良を引き起こす可能性があるため、慎重に進めましょう。

nginx locationの学びと次のステップ

nginx locationの設定は、Webサイトの構築と運用において中心的な役割を果たします。

今後のステップとしては、以下などを視野に入れてください。

  • 定期的なログ分析
  • 監視システムの導入
  • 新しい技術動向の追求

これらを通じて、更に洗練されたWebサイトの運用が可能となります。

まとめ

当記事では、nginxのlocation設定について学習してきました。

  • nginxのlocation設定は、Webサーバーの挙動を制御し、効率的なリソース管理を実現する
  • 正確な設定により、パフォーマンスの向上やセキュリティの強化、柔軟なサイト運用などの利点が生じる

nginxはその強力な機能と柔軟性から、世界中の多くのWebサイトで利用されています。

正しい理解と適切な設定によって、効率的で安全なWebサイト運用が可能です。

今後の学びに活かし、Web技術の更なる探求を楽しんでいただければと思います。

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