Ubuntu 14.04でNginxを使用してwwwを非wwwにリダイレクトする方法

この文章では、イントロダクションについて話します。

多くのウェブ開発者は、ユーザーがウェブサイトやアプリケーションにwwwサブドメインとルート(非www)ドメインの両方でアクセスできるようにする必要があります。つまり、www.my-website.comとmy-website.comを訪れるユーザーは同じ体験をするべきです。設定方法は様々ありますが、最もSEOに優しい解決策は、好みのドメイン(サブドメインまたはルートドメイン)を選択し、他方を訪れるユーザーを好ましいドメインにリダイレクトさせることです。

HTTPリダイレクトにはさまざまな種類がありますが、このシナリオでは、301リダイレクトを使用するのが最適です。301リダイレクトは、クライアントに対して「リクエストしたウェブサイトは永久的に別のURLに移動しました。そちらに移動してください」と伝えます。ブラウザはサーバーからHTTP 301の応答コードを受け取ると、新しいURLに対して第二のリクエストを送信し、ユーザーはウェブサイトを表示されますが、リダイレクトされていたことに気づかない場合もあります。

どうしてウェブサーバーの設定を変更して、両方のドメイン名に対して同じウェブサイトを提供しないのでしょうか?それは簡単そうに思えるかもしれませんが、301リダイレクトのSEOの利点は得られません。永久リダイレクトは検索エンジンのクローラーに対して、ウェブサイトの正規の場所が1つあることを伝えるため、そのURLの検索ランキングが向上します。

このチュートリアルでは、Ubuntu 14.04上でNginxを使用して301リダイレクトを設定します。NginxではなくApacheを使用している場合は、代わりにこのチュートリアルを参照してください:Ubuntu 14.04でApacheを使用してwwwからNon-wwwへのリダイレクトを行う方法。

前提条件 (Zentei jouken)

このチュートリアルを完了するために、最初に必要なものはあります。

  • Superuser privileges (a user in the sudo group) on the server that is running Nginx. If you don’t already have that set up, follow this tutorial: Initial Server Setup with Ubuntu 14.04.
  • Nginx installed and configured to serve your website. Follow this tutorial to do that: How to Install Nginx on Ubuntu 14.04. Also read: How To Set Up Nginx Server Blocks (Virtual Hosts) On Ubuntu 14.04 LTS.
  • A registered domain name. If you don’t have one yet, you can get a free one from Freenom. You may use whatever DNS provider you like (including your registrar) to host your domain’s records—just make sure to point your registrar to your provider’s nameservers. If you opt to use Silicon Cloud DNS, this article from our documentation shows how to do that.

では、あなたのDNSレコードの設定から始めましょう。 (De wa, anata no DNS rekōdo no settei kara hajimemashou.)

ステップ1 — DNSレコードの設定

最初に、www.my-website.com と my-website.com の両方を、Nginxを実行しているサーバーに向けて指定する必要があります。 (以下のチュートリアルでは、ドメインが my-website.com であることを前提としています。それを見かける場所ごとに、独自のドメインに置き換えてください。) これは、それぞれの名前に対して、NginxサーバーのIPアドレスを指すDNSのAレコードを作成することによって行います。

あなたのDNSプロバイダーのウェブコンソールを開いてください。このチュートリアルではSilicon Cloud DNSを使用します。

「ドメインの追加」フォームに、登録されたドメイン名をテキストフィールドに入力し、「ドメインを追加」をクリックしてください。これにより、新しいドメインのページが表示され、ドメインのレコードを表示・追加・削除することができます。

新しいレコードを作成するには、ホスト名のテキストフィールドに「@」と入力します。これは、ルートドメイン名であるmy-website.comの単純なレコードを追加していることを示す特別な文字です。[WILL DIRECT TO]のテキストフィールドには、サーバーの公開IPv4アドレスを入力し、「レコードを作成」ボタンをクリックします。(TTLを変更する必要はありません。)

第二のDNSレコードでは、Aレコードの代わりにCNAMEレコードを使用することができます。CNAMEレコードはIPアドレスの代わりに別の名前を指すエイリアスです。www.my-website.comをmy-website.comに向けるCNAMEを作成することができ、wwwサブドメインへのHTTPリクエストはルートドメインのAレコードが作成されたため、サーバーに届くようになります。ただし、簡単にするために、最初のAレコードと同様にもう1つのAレコードを作成し、HOSTNAMEフィールドに「www」を入力し、WILL DIRECT TOフィールドにサーバーの公開IPアドレスを入力してください。

レコードを両方作成したら、こんな感じになります。

Required A records

以下のように日本語で言い換えます(1つのオプションだけ):
2つのレコードを設定することで、my-website.comとwww.my-website.comの両方のウェブリクエストがお使いのNginxサーバーに到達するようになります。では、サーバーを設定しましょう。

ステップ2 — Nginxでのリダイレクトの設定

「前提条件」に記載されている通り、Nginxでウェブサイトの設定を済ませておいてください。ウェブサイトのサーバーブロックがメインの「/etc/nginx/sites-enabled/default」ファイルにあるか、または独自のファイルにあるかは問題ありません。重要なのは、server_nameディレクティブが「my-website.com」と/または「www.my-website.com」と設定されたサーバーブロックがいくつかあることです。server_nameに1つまたは両方の名前が含まれているかは問題ではありません。今は、サイトをホストする際に使用する名前を決める時です。

お気に入りのエディタ、もしくはnanoで、ウェブサイトの設定が含まれているファイル(例:/etc/nginx/sites-available/my-website.com.conf)を開いてください。そして、server_nameディレクティブを見つけてください。

  1. sudo nano /etc/nginx/sites-available/my-website.com.conf

 

以下の文を日本語で自然に言い換えてください。一つのオプションです。

「/etc/nginx/sites-available/my-website.com.conf」

server {
    . . .
    server_name my-website.com www.my-website.com
    . . .
}

もしwww.my-website.comをmy-website.comにリダイレクトしたい場合は、server_nameの行からwww.my-website.comを削除し、ファイルを保存して終了してください。(my-website.comをwww.my-website.comにリダイレクトしたい場合は、その代わりにmy-website.comを削除してください。)

その後、新しいNginxの設定ファイルを作成してください。ファイルの場所は/etc/nginx/sites-available/www.my-website.com.confとします(もしくはリダイレクトしているサイト名に合わせて/etc/nginx/sites-available/my-website.com.confとしてください)。ファイル名はなんでも構いませんが、Nginxの設定ファイルは常に.confで終わるようにしてください。

  1. sudo nano /etc/nginx/sites-available/www.my-website.com.conf

 

自分のドメイン名である「my-website.com」を使って、以下のサーバーブロックをファイルに追加してください。

以下の文を日本語で言い換える(オプションは一つだけ必要です):
「/etc/nginx/sites-available/www.my-website.com.conf」
server {
    server_name www.my-website.com;
    return 301 $scheme://my-website.com$request_uri;
}

もし、my-website.comをwwwサブドメインにリダイレクトする場合は、server_nameにはmy-website.comのみを、次の行のURLにはwww.my-website.comを指定してください。

終わったら保存して終了してください。その後、新しいファイルへのシンボリックリンクを/etc/nginx/sites-enabledに作成し、Nginxを再起動後に認識させてください。

  1. sudo ln -s /etc/nginx/sites-available/www.my-website.com.conf /etc/nginx/sites-enabled/

 

以下のように nginx の設定を変更し、www.my-website.com をリクエストするクライアントに対して301リダイレクトを送り、代わりにmy-website.com を訪れるように指示します。リダイレクトはリクエスト URI を保持するため、http://www.my-website.com/login.php へのリクエストは http://my-website.com/login.php にリダイレクトされます。

Note

注意: 上記のサーバーブロックには、listenディレクティブが含まれていません。このチュートリアルで説明されているように、listenディレクティブがないサーバーブロックは0.0.0.0:80(すべてのインターフェースのポート80)でリッスンされますので、これは問題ありません。ただし、Nginxサーバーが複数のIPアドレスを持っている場合や、サイトが80以外のポートでリッスンしている場合は、特定のIPアドレスとポートを明示するためにlistenディレクティブを追加する必要がある場合があります。サイトのメインサーバーブロックで使用しているlistenの値と同じ値を使用してください。

変更を適用する前に、Nginxの設定にエラーがないことを確認してください。

  1. sudo nginx -t

 

もし構文エラーを起こしていなければ(セミコロンを忘れたなど)、設定は問題ないはずです。

Output

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

新しいリダイレクトルールを適用するために、Nginxを再起動してください。

  1. sudo service nginx restart

 

ブラウザでwww.my-website.comを訪れる前に、サーバーまたはローカルマシン(ローカルにcurlがインストールされている場合)でcurlを使用してリクエストを行ってください。

  1. curl -IL http://www.my-website.com

 

-Iフラグは、curlに対してサーバーレスポンスからヘッダーのみを表示するように指示します。-Lフラグは、curlに対してサーバーからのリダイレクトに従うように指示し、自動的に2回目のリクエストをURLで指定された場所へ行うようにします(ウェブブラウザと同様の動作です)。301リダイレクトが設定されているため、curlは2回のリクエストを行い、2つのレスポンスのヘッダーのみが表示されるはずです。

Output

HTTP/1.1 301 Moved Permanently Server: nginx/1.20.1 Date: Thu, 08 Dec 2022 19:24:44 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive Location: http://my-website.com HTTP/1.1 200 OK Server: nginx/1.20.1 Date: Thu, 08 Dec 2022 19:24:44 GMT Content-Type: text/html Content-Length: 57 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT Connection: keep-alive ETag: “63892671-39” Accept-Ranges: bytes

最初の要求に対する301(永久に移動しました)のレスポンスにおいて、 http://www.my-website.comへの最後のヘッダー「Location: http://my-website.com」に注目してください。2番目のレスポンスはcurlによるhttp://my-website.comへの追加のリクエストから来ており、ウェブサイトが正常であれば、サーバーは200(OK)で応答してくれるはずです。

最後に、ウェブブラウザでhttp://www.my-website.comにアクセスしてください。ちらっと目を離してしまうとリダイレクトが見逃されるかもしれません。通常通りウェブサイトが表示されますが、アドレスバーを再度確認するとURLに「www」が含まれていないことに気づくでしょう。ほとんどのユーザーは気づかないでしょうし、そのためhttp://my-website.comをリクエストしたのと同じ体験をすることになります。

結論

このチュートリアルでは、ウェブサイトのために2つのDNSレコードを追加し、Nginxを設定してサブドメインを優先ドメインにリダイレクトしました。これにより、ウェブサイトは両方のドメイン経由でアクセス可能になります。おそらく、このチュートリアルを読む前からすでに両方のドメインを使用してウェブサイトにアクセスできていたかもしれません。しかし、Nginxの設定に追加したわずか4行のコードで、ウェブサイトの検索エンジンにおける評価を向上させ、より多くのユーザーにインターネット上で公開することができました。

どのサーバーブロックが特定のリクエストを処理するかNginxがどのように決定するかについて、さらに詳しい情報が欲しいですか?このガイドを見てください:「Nginxのサーバーブロックとロケーションブロックの選択アルゴリズムを理解する」。

コメントを残す 0

Your email address will not be published. Required fields are marked *