nginx でリダイレクトを行う rewirte の使い方

nginxを使ったサーバー構築では、基本Apacheのような .htaccess が機能しません。nginxで301リダイレクトなどを行いたい場合は、nginxの設定ファイルに rewrite でルールを記述する必要があります。ここでは rewrite の使い方をまとめておきます。

rewrite の概要

nginxでのリダイレクトを行うためには、rewriteディレクティブを使用します。このディレクティブは、指定した条件に一致するリクエストURIを別のURIに書き換えたり、外部のURLへリダイレクトさせたりすることができます。rewriteディレクティブは、サーバーやロケーションコンテキスト内で使用することができます。

基本的な構文は以下の通りです:

nginx
rewrite regex replacement [flag];

パラメータ

パラメータ説明
regexリダイレクトを適用するための正規表現パターン
replacementリダイレクト先のURIまたは外部URL
flagリダイレクトの動作を制御するオプション

flagオプション

パラメータ説明
last現在のリライト処理を終了し、改めてリライト処理を開始
break現在のリライト処理を終了し、さらなる処理を行わない
redirect一時的なリダイレクト(302)を行う
permanent永続的なリダイレクト(301)を行う

実際のリダイレクトの記述例

単純なリダイレクト

以下の設定例では、/old-pageへのアクセスを/new-pageに301リダイレクトします。

nginx
rewrite ^/old-page$ /new-page permanent;

複雑なリダイレクト

複数のサブディレクトリに対してリダイレクトを適用する場合、正規表現を使用します。

nginx
rewrite ^/old-site/(.*)$ /new-site/$1 permanent;

この例では、/old-site以下の任意のパスへのアクセスを、同じサブパスを保持しつつ/new-siteへリダイレクトします。

便利な機能: return ディレクティブ

リダイレクトを行う別の方法として、returnディレクティブがあります。これは、条件に応じてリダイレクトやエラーページの表示をよりシンプルに設定することができます。

nginx
location /old-page {
    return 301 /new-page;
}

この方法では、特定のリクエストURIに対して簡潔にリダイレクトを設定でき、rewriteディレクティブを使用するよりも読みやすく、パフォーマンスの面で効率的です。また、HTTPステータスコードを直接指定できるため、リダイレクトの種類を容易に制御できます。

nginxのリダイレクト設定は非常に柔軟であり、サイトの構造変更やURLスキームの更新、外部サイトへのリダイレクトなど、さまざまなシナリオに対応することができます。適切なディレクティブや正規表現を使用することで、必要なリダイレクトルールを効率的に実装できます。

nginxの設定を変更した後は、 sudo nginx -t でテストして sudo systemctl reload nginx で設定を反映させます。

rewrite ディレクティブを別ファイルで管理する

これらのrewriteディレクティブをserverディレクティブへ直接記述しても良いのですが、rewriteルールが多すぎると管理が大変になります。そこで、rewrite ディレクティブを別ファイルで管理する方法を紹介します。これにはincludeディレクティブを使用します。includeディレクティブを使用することで、外部の設定ファイルを読み込んで、メインのnginx設定ファイルをすっきりと保つことができます。

手順

  1. リダイレクトルールを含む新しいファイルを作成します。例えば、/etc/nginx/sites-available/redirects.confといったパスに保存します。
  2. この新しいファイルに、すべてのrewriteルールを記述します。
  3. メインのnginx設定ファイル(または適切なサーバーブロック設定ファイル)にて、次のようにincludeディレクティブを使用して、作成したリダイレクトルールファイルを読み込みます。

nginx
server {
    # その他の設定 ...

    # リダイレクトルールを含む外部ファイルを読み込む
    include /etc/nginx/sites-available/redirects.conf;

    # その他の設定 ...
}

この手順により、nginx設定のメンテナンスが容易になり、特定の種類の設定を集中管理できるようになります。また、将来的にリダイレクトルールを追加または変更する際に、メインの設定ファイルを直接編集する必要がなくなり、エラーのリスクを減らすことができます。

includeディレクティブは非常に強力で、サーバー設定の柔軟性と再利用性を高めます。ただし、複数のincludeファイルを使用する場合は、それらのファイル間での設定の競合に注意する必要があります。また、nginxの設定を変更した後は、設定のテストとnginxの再起動またはリロードが必要です。

nginxの設定を変更した後は、 sudo nginx -t でテストして sudo systemctl reload nginx で設定を反映させます。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム