序章

Webサイトまたはアプリケーションをドメインの背後で稼働させている場合、ユーザーがプレーンドメイン名および wwwサブドメインを介してアクセスできるようにすることが望ましい場合がよくあります。 つまり、「www」の有無にかかわらず、ドメインにアクセスできる必要があります。 プレフィックス、例 example.comまたはwww.example.com、Webブラウザーで、同じコンテンツが表示されます。 これを設定するにはさまざまな方法がありますが、一貫性とSEOを考慮するための最善の解決策は、プレーンまたはwwwのどちらのドメインを選択し、もう一方を優先ドメインにリダイレクトすることです。 このタイプのリダイレクトは、永続リダイレクトまたは「301リダイレクト」と呼ばれ、DNSリソースレコードとWebサーバーソフトウェアを適切に構成することで簡単に設定できます。

このチュートリアルでは、wwwのURLをwww以外のURLにリダイレクトする方法を説明します。 www.example.comからexample.com、CentOS7のNginx。 また、www以外のURLからwwwへのリダイレクト方法についても説明します。 このチュートリアルのUbuntu14.04バージョンは、こちらで入手できます。

WebサーバーとしてApacheを使用してこのタイプのリダイレクトを実行する場合は、代わりに次のチュートリアルに従う必要があります。 CentOS7でApacheを使用してwwwを非wwwにリダイレクトする方法。

前提条件

このチュートリアルは、スーパーユーザー権限があることを前提としています。 Nginxを実行しているサーバー上のsudoまたはroot。 まだセットアップしていない場合は、次のチュートリアルに従ってください: CentOS7でのサーバーの初期セットアップ。

Nginxがインストールされていることを前提としています。 この設定をまだ行っていない場合は、Nginxタグの下にこのテーマに関するチュートリアルがいくつかあります。

ドメインを管理しているDNSにレコードを追加できる必要があります。 ドメインをまだお持ちでない場合は、ドメインレジストラから購入し、レジストラのDNSまたはDigitalOceanのDNSで管理できます。 このチュートリアルでは、 DigitalOceanDNSを使用して必要なレコードを作成します。

DNSレコードの構成から始めましょう。

DNSレコードを構成する

目的のリダイレクト、www.example.comからexample.com、またはその逆を設定するには、名前ごとにAレコードが必要です。

DNSの管理に使用するものは何でも開きます。 この例では、 DigitalOceanDNSを使用します。

ドメイン(ゾーンとも呼ばれます)レコードがまだ存在しない場合は、ここで作成します。 ホスト名はドメインである必要があります。例: example.comであり、IPアドレスはNginxサーバーのパブリックIPアドレスに設定する必要があります。 これにより、ドメインが指定したIPアドレスを指すAレコードが自動的に作成されます。 ドメインを管理するために別のシステムを使用している場合は、これを手動で追加する必要がある場合があります。

次に、ホスト名として「www」(部分的なサブドメインが機能しない場合は「 www.example.com 」)を使用して別のAレコードを追加し、同じIPアドレスを指定します。

両方のレコードを作成すると、次のようになります。

Required A records

注:これは、正規名のAレコードがNginx WebサーバーのIPアドレスを参照している限り、CNAMEレコードでも機能します。

これで、wwwドメインと非wwwドメインを介してサーバーにアクセスできるようになりますが、リダイレクトを設定する必要があります。 今からやります。

Nginxリダイレクトを構成する

301リダイレクトを実行するには、元のサーバーブロックを指す新しいNginxサーバーブロックを追加する必要があります。

Nginxサーバーブロック構成をエディターで開きます。 Nginxインクルードディレクトリにredirect.confという別の構成ファイル/etc/nginx/conf.dを追加します。

sudo vi /etc/nginx/conf.d/redirect.conf

元のサーバーブロックはすでに定義されているはずです。 リダイレクトする方向に応じて、次のいずれかのオプションを使用します。

オプション1:wwwをwww以外にリダイレクトする

ユーザーをwwwからwww以外のプレーンなドメインにリダイレクトする場合は、次の構成を挿入します。

新しいサーバーブロック—wwwから非www
server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

保存して終了。 これにより、リクエストを「www.example.com」から「example.com」にリダイレクトするようにNginxが構成されます。 www以外のWebサーバーを定義する別のサーバーブロックが必要であることに注意してください。

変更を有効にするには、Nginxを再起動します。

sudo systemctl restart nginx

HTTPSを使用している場合は、listenディレクティブを80ではなくポート443に設定する必要があることに注意してください。

このcurlコマンドを使用して、www以外のドメインがwwwドメインにリダイレクトされるようにします(強調表示された部分を実際のドメインに置き換えます)。

curl -I http://www.example.com

次のように、www以外のリダイレクト場所を示す301 Moved Permanently応答が返されるはずです。

Output:
HTTP/1.1 301 Moved Permanently Server: nginx/1.4.6 (Ubuntu) Date: Mon, 04 May 2015 18:20:19 GMT Content-Type: text/html Content-Length: 193 Connection: keep-alive Location: http://example.com/

もちろん、確実にWebブラウザ(wwwおよび非www)でドメインにアクセスする必要があります。

オプション2:www以外をwwwにリダイレクトする

www以外のプレーンなドメインからwwwドメインにユーザーをリダイレクトする場合は、次のサーバーブロックを追加します。

新しいサーバーブロック—www以外からwww
server {
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}

保存して終了。 これにより、リクエストを「example.com」から「www.example.com」にリダイレクトするようにNginxが構成されます。 wwwWebサーバーを定義する別のサーバーブロックが必要であることに注意してください。

変更を有効にするには、Nginxを再起動します。

sudo systemctl restart nginx

HTTPSを使用している場合は、listenディレクティブを80ではなくポート443に設定する必要があることに注意してください。

このcurlコマンドを使用して、www以外のドメインがwwwドメインにリダイレクトされるようにします(強調表示された部分を実際のドメインに置き換えます)。

curl -I http://example.com

次のように、wwwリダイレクトの場所を示す301 Moved Permanently応答が返されるはずです。

Output:
HTTP/1.1 301 Moved Permanently Server: nginx/1.4.6 (Ubuntu) Date: Mon, 04 May 2015 18:20:19 GMT Content-Type: text/html Content-Length: 193 Connection: keep-alive Location: http://www.example.com/

もちろん、確実にWebブラウザ(wwwおよび非www)でドメインにアクセスする必要があります。

結論

それでおしまい! これで、Nginxの永続的なリダイレクトが適切に構成され、ユーザーはwww以外のドメインとwwwドメインを介してWebサーバーにアクセスできるようになります。