ApacheとNginxを使用して一時的および永続的なリダイレクトを作成する方法
序章
HTTPリダイレクト、またはURLリダイレクトは、あるドメインまたはアドレスを別のドメインまたはアドレスにポイントする手法です。 リダイレクトには多くの用途があり、考慮すべきいくつかの異なる種類のリダイレクトがあります。 リダイレクトは、あるアドレスを別のアドレスに転送するように要求するユーザーがサイトで必要な場合に使用されます。
コンテンツを作成してサーバーを管理するときに、トラフィックをある場所から別の場所にリダイレクトする必要があることがよくあります。 このガイドでは、これらの手法のさまざまな使用例と、2つの最も一般的なWebサーバーであるApacheとNginxでそれらを実現する方法について説明します。
前提条件
-
Ubuntu20.04初期サーバーセットアップガイドに従ってセットアップされたUbuntu20.04サーバー。sudo非rootユーザーとファイアウォールが含まれます。
-
サーバーにインストールされているApacheまたはNginx。これは、 Ubuntu20.04にApacheをインストールする方法またはUbuntu20.04にNginxをインストールする方法に従って実行できます。 ApacheとNginxの両方を同時にインストールでき、多くのスタックが両方のサーバーを同時に使用しますが、デフォルトでは、デフォルトのHTTP/HTTPSポート80と
443[で競合します。 X197X]であるため、ストックサーバー構成でこのチュートリアルに従う場合は、一度に1つだけインストールする必要があります。
ステップ1-リダイレクト方法の確認
リダイレクトには多くのユースケースがあります。 Webプレゼンスを確立していて、ドメインを変更したい場合は、古いドメインを単に放棄しないことが最善です。 あなたのサイトへのブックマークとインターネット上の他のページにあるあなたのサイトへのリンクは、あなたのコンテンツが新しい場所を見つける方法についてのブラウザへの指示なしに消えると壊れます。 リダイレクトせずにドメインを変更すると、サイトは以前の訪問者からのトラフィックを失い、確立するために取り組んできたすべての信頼性を失います。
多くの場合、ユーザーがメインドメインに類似したアドレスを入力することで利益を得るには、名前の複数のバリエーションを登録すると便利です。 たとえば、myspiders.com
というドメインがある場合は、myspiders.net
とmyspiders.org
のドメイン名を購入して、両方をmyspiders.com
サイトにリダイレクトすることもできます。 。 これにより、間違ったアドレスでサイトにアクセスしようとしている可能性のあるユーザーを見つけることができます。 また、別のサイトが同様のドメインを使用してWebプレゼンスから利益を得るのを防ぐのにも役立ちます。
場合によっては、サイトで既に公開され、トラフィックを受信しているページの名前を変更する必要があります。 通常、これにより404 Not Foundエラーが発生するか、セキュリティ設定によっては別のエラーが発生する可能性があります。 これらは、訪問者がアクセスしようとした正しいコンテンツを含む別のページに訪問者を誘導することで回避できます。 URLリダイレクトにはいくつかの種類があり、それぞれがクライアントブラウザとは異なる意味を持っています。 最も一般的な2つのタイプは、302の一時的なリダイレクトと301の永続的なリダイレクトです。
一時的なリダイレクト
一時的なリダイレクトは、特定のURLのWebコンテンツを別の場所から一時的に提供する必要がある場合に役立ちます。 たとえば、サイトメンテナンスを実行している場合、ドメインのすべてのページを説明ページに一時的にリダイレクトして、まもなく戻ってくることを訪問者に通知する必要がある場合があります。
一時的なリダイレクトは、コンテンツが一時的に別の場所にあることをブラウザに通知しますが、元のURLへのアクセスを引き続き試行する必要があることを通知します。
永続的なリダイレクト
永続的なリダイレクトは、コンテンツが永久に新しい場所に移動された場合に役立ちます。
これは、ドメインを変更する必要がある場合、または他の理由でURLを変更する必要があり、古い場所が使用されなくなる場合に役立ちます。 このリダイレクトは、古いURLを要求しなくなり、新しいURLを指すように情報を更新する必要があることをブラウザに通知します。
SSLを強制する
リダイレクトの一般的な使用法は、すべてのサイトトラフィックに標準のHTTPではなくSSLを使用するように指示することです。
リダイレクトを使用すると、http://www.mysite.com
に対するすべての要求をhttps://www.mysite.com
にリダイレクトすることができます。 LetsEncryptを使用してHTTPSを提供すると、このようなリダイレクト構成が自動的に生成されます。
このチュートリアルの次のパートでは、ApacheWebサーバーを使用したリダイレクトの構成例をいくつか学習します。 代わりにNginxを使用していて、Apacheを使用する予定がない場合は、手順3にスキップできます。
ステップ2–Apacheでリダイレクトする方法
Apacheは、いくつかの異なるツールを使用してリダイレクトできます。 mod_alias
モジュールのツールを使用して簡単なリダイレクトを実装でき、mod_rewrite
を使用してより広範なリダイレクトを作成できます。
リダイレクトディレクティブの使用
Apacheでは、デフォルトで有効になっているmod_alias
モジュールに含まれている「Redirect」ディレクティブを使用して、単一ページのリダイレクトを実装できます。 このディレクティブは、古いURLと新しいURLの少なくとも2つの引数を取ります。
Apacheサーバーブロックは、/etc/apache2/apache2.conf
のプライマリApache設定ファイルに保存できますが、構成ごとに/etc/apache2/sites-available/
で新しいファイルを作成すると、より保守しやすくなります。 Apacheの規則では、sites-available/
内のファイルから、sites-available/
という別のフォルダーへのシンボリックリンク(ショートカットなど)を、有効または無効にすることを決定したときに作成します。 デフォルトでは、Apacheは/etc/apache2/sites-available/000-default.conf
に単一のサイト固有の構成でインストールされ、/etc/apache2/sites-enabled/000-default.conf
にリンクされています。
nano
またはお気に入りのテキストエディタを使用して、その構成を開くことができます。
- sudo nano /etc/apache2/sites-available/000-default.conf
デフォルトでは、ポート80でリッスンし、システムの/var/www/html
にあるindex.html
ファイルを探す標準のWebサーバー構成が含まれています。
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
</VirtualHost>
代わりに、domain1.com
のリクエストをdomain2.com
にリダイレクトする必要がある場合は、このサーバーブロックから既存のディレクティブを削除して、永続的なリダイレクトに置き換えることができます。
<VirtualHost *:80>
ServerName www.domain1.com
Redirect / http://www.domain2.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.com
. . .
. . .
</VirtualHost>
ファイルを保存して閉じます。 nano
を使用している場合は、「Ctrl + X」を押し、プロンプトが表示されたら「Y」を押してからEnterキーを押します。
このリダイレクトは、www.domain1.com
に対するすべての要求をwww.domain2.com
に転送するようにブラウザーに指示します。 これは、サイト全体ではなく、単一のページのみを対象としています。
デフォルトでは、Redirect
ディレクティブは302または一時的なリダイレクトを確立します。 永続的なリダイレクトを作成する場合は、次の2つの方法のいずれかで作成できます。
<VirtualHost *:80>
ServerName www.domain1.com
Redirect 301 /oldlocation http://www.domain2.com/newlocation
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain1.com
Redirect permanent /oldlocation http://www.domain2.com/newlocation
</VirtualHost>
RedirectMatchディレクティブの使用
複数のページをリダイレクトするには、RedirectMatch
ディレクティブを使用できます。これにより、正規表現を使用してディレクトリマッチングパターンを指定できます。
これにより、単一のファイルだけでなく、ディレクトリ全体をリダイレクトできます。
RedirectMatch
は括弧内のパターンと一致し、次に「$ 1」を使用してリダイレクトで一致したテキストを参照します。ここで、1はテキストの最初のグループです。 後続のグループには順番に番号が付けられます。
たとえば、/images
ディレクトリ内のすべてのリクエストをimages.example.com
という名前のサブドメインに一致させる場合は、次を使用できます。
<VirtualHost *:80>
…
RedirectMatch ^/images/(.*)$ http://images.example.com/$1
…
</VirtualHost>
Redirect
ディレクティブと同様に、URLロケーションルールの前にリダイレクトコードを追加することで、リダイレクトのタイプを指定できます。
変更を有効にするには、Apacheを再起動する必要があります。 最新のUbuntuサーバーでは、systemctl
を使用してこれを行うことができます。
- sudo systemctl restart apache2
mod_rewriteを使用してリダイレクトする
リダイレクトルールを作成する最も柔軟ですが複雑な方法は、mod_rewrite
と呼ばれるモジュールを使用することです。 mod_rewrite
の操作については、Apacheのmod_rewriteを使用してURLを書き換える方法を参照してください。
このチュートリアルの次のパートでは、NginxWebサーバーを使用したリダイレクトの構成例をいくつか学習します。 Apacheをすでにインストールして設定している場合は、同じサーバーでNginxの設定手順を実行する前に、ポート80を空ける必要があります。 これを実現するには、apt remove
を使用してApacheを一時的にアンインストールします。これにより、後で再インストールする場合に構成ファイルが保持されます。または、Apacheの構成を変更して、によって使用される80以外のポートで接続をリッスンします。デフォルトでは、Apache、Nginx、およびすべてのHTTP接続。
ステップ3–Nginxでリダイレクトする方法
Nginxのリダイレクトはコア機能であり、一般的なNginxディレクティブを利用します。 ほとんどの場合、URLごとに新しいサーバーブロックを作成することでリダイレクトを実装できます。
Nginxサーバーブロックは/etc/nginx/nginx.conf
のプライマリNginx設定ファイルに保存できますが、構成ごとに/etc/nginx/sites-available/
で新しいファイルを作成すると、より保守しやすくなります。 Nginxの規則では、sites-available/
内のファイルから、sites-available/
という別のフォルダーへのシンボリックリンク(ショートカットなど)を、有効または無効にすることを決定したときに作成します。 デフォルトでは、Nginxは/etc/nginx/sites-available/default
に単一のサイト固有の構成でインストールされ、/etc/nginx/sites-enabled/default
にリンクされています。
nano
またはお気に入りのテキストエディタを使用して、その構成を開くことができます。
- sudo nano /etc/nginx/sites-available/default
デフォルトでは、ポート80でリッスンし、システムの/var/www/html
にあるindex.html
ファイルを探す標準のWebサーバー構成が含まれています。
server {
listen 80 default_server;
listen [::]:80 default_server;
…
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
…
}
代わりに、domain1.com
のリクエストをdomain2.com
にリダイレクトする必要がある場合は、このサーバーブロックから既存のディレクティブを削除して、永続的なリダイレクトに置き換えることができます。
server {
listen 80;
server_name domain1.com;
return 301 $scheme://domain2.com$request_uri;
}
ファイルを保存して閉じます。 nano
を使用している場合は、「Ctrl + X」を押し、プロンプトが表示されたら「Y」を押してからEnterキーを押します。
return
ディレクティブは、URL置換を実行してから、指定されたステータスコードとリダイレクトURLを返します。
この場合、$scheme
変数を使用して、元のリクエスト(httpまたはhttps)で使用されたスキームを使用します。 次に、301の永続的なリダイレクトコードと新しく形成されたURLを返します。
別のサブドメインへのフォルダーリダイレクトを処理するために、rewrite
ディレクティブを使用してApacheフォルダーリダイレクトと同様の操作を実行できます。 このディレクティブをサーバーブロックに配置すると、images
ディレクトリ内のリクエストに対してサブドメインimages.example.com
への一時的なリダイレクトが発行されます。
server {
…
rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
…
}
永続的なリダイレクトの場合、ステートメントの最後でredirect
をpermanent
に変更できます。
変更を有効にするには、Nginxを再起動する必要があります。 最新のUbuntuサーバーでは、systemctl
を使用してこれを行うことができます。
- sudo systemctl restart nginx
この構成は、他の多くの方法で拡張できます。 目的のサーバー構成を作成するためにNginxのこれらの基本を使用すると、スタックを非常にスリムに保つことができ、サーバートラフィックに関する潜在的なエッジケースを簡潔に文書化して処理するのに役立ちます。
結論
このチュートリアルでは、一般的なWebサーバーの一時的なリダイレクトと永続的なリダイレクトの両方を構成する方法を学びました。 一時的なリダイレクトを不適切に使用すると検索ランキングが低下する可能性があるため、必ず正しいリダイレクトタイプを使用してください。
リダイレクトを正しく使用すると、現在のWebプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。 Nginxでのリダイレクトの構成について詳しく知りたい場合は、Nginxを使用して一時的および永続的なリダイレクトを作成する方法をお読みください。