「HTTP (TCP/80)/HTTPS (TCP/443)」「サブドメイン(www)あり/なし」の違いによるアクセスを一本化

ウェブサイトのURLは「HTTP (TCP/80)/HTTPS (TCP/443)」「サブドメイン(www)のあり/なし」を組み合わせた4パターンが考えられます。
当ポートフォリオサイトの場合、以下の4つのURLでアクセスされる可能性があるということです。
  • http://autovice.jp/
  • http://www.autovice.jp/
  • https://autovice.jp/
  • https://www.autovice.jp/
どのURLでアクセスされたとしても同じトップページが表示されなければなりません。
だからといってそれぞれのURLに対するコンテンツを用意するのはナンセンスですし、SEO的にも「重複するコンテンツ」と判断されるためNGです。

そこで、Webサーバー(今回はNginx)の設定を変更してすべてのアクセスを「https://www.autovice.jp/」に一本化したいと思います。
なぜ「https://www.autovice.jp/」なのかというと、SSL証明書を「www.autovice.jp」で作成してしまっていたからです…
もし「https://autovice.jp/」に一本化したいのあればSSL証明書を再作成する必要があります。

DNS設定

まず、DNS設定を確認します。
「サブドメイン(www)のあり/なし」の両方がDNSに登録されていなければWebサーバーまでたどり着くことができません。

ConoHa VPSのDNSを使っている場合、以下の手順でDNS設定を確認できます。
スクリーンショット 2019-12-04 2.40.19.png 24.6KB

ConoHa VPSにログインします。
スクリーンショット 2019-12-04 1.35.57.png 21KB
左側のメニューからDNSを選択します。
スクリーンショット 2019-12-04 2.34.03.png 54.7KB
ドメインリストからドメインを選択します。
上記のように2レコードが登録されていればOKです。
  • タイプ:A
  • 名称:@ or www
  • TTL:3600(何でもOK)
  • 値:サーバーのIPアドレス
「名称:@」はサブドメインなしを意味します。当ポートフォリオサイトの場合だと「autovice.jp」になります。
お使いのDNS管理画面によっては「@」と表示されていない可能性がありますが、サブドメインなしのAレコードが登録されていればOKです。

Nginx設定

すべてのアクセスを「https://www.autovice.jp/」に一本化するには以下のように設定します。

サーバーに接続します。
$ ssh server-name
管理者ユーザーに変更します。
$ su -
パスワード:
Nginxの設定ファイルを変更します。
# vi /etc/nginx/conf.d/server-name.conf

...
# HTTP (TCP/80) かつ サブドメインあり
server {
  listen 80;
  server_name www.autovice.jp;
  return 301 https://$host$request_uri;
}
# HTTP (TCP/80) かつ サブドメインなし
# HTTPS (TCP/443) かつ サブドメインなし
server {
  listen 80;
  listen 443;
  server_name autovice.jp;
  return 301 https://www.$host$request_uri;
}
# HTTPS (TCP/443) かつ サブドメインあり
server {
  listen 443 ssl default_server;
  # SSL証明書は「www.autovice.jp」で作成
  ssl_certificate     /etc/letsencrypt/live/www.autovice.jp/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.autovice.jp/privkey.pem;
  server_name www.autovice.jp;
...
「HTTPS (TCP/443) かつ サブドメインあり」以外のURLでアクセスされた場合にリダイレクトしています。

注意点としては、「サブドメインなし」のURLでアクセスされた場合はリダイレクトURLにサブドメインを付加するのを忘れないようにしましょう。
逆に「サブドメインあり」のURLでアクセスされた場合のリダイレクトURLにサブドメインを付加しないようにしましょう。もし付加してしまうと、「https://www.www.autovice.jp/」のようなURLにリダイレクトされてしまいます。

余談ですが、リダイレクト時のステータスコードには「301」と「302」の2種類があり、それぞれ以下の違いがあります。
  • 301:恒久的なリダイレクト設定
  • 302:一時的なリダイレクト設定

おまけ:よく使うNginxのコマンド

Nginxの停止・起動・再起動。
# service nginx stop
# service nginx start
# service nginx reload
Nginxの状態確認。
# service nginx status
Redirecting to /bin/systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-12-02 22:54:13 JST; 37min ago
  Process: 12067 ExecReload=/bin/kill -s HUP $MAINPID (code=exited, status=0/SUCCESS)
  Process: 12437 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 12434 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 12433 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 12439 (nginx)
   CGroup: /system.slice/nginx.service
           ├─12439 nginx: master process /usr/sbin/nginx
           └─12440 nginx: worker process

Dec 02 22:54:13 150-95-152-189 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Dec 02 22:54:13 150-95-152-189 nginx[12434]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Dec 02 22:54:13 150-95-152-189 nginx[12434]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Dec 02 22:54:13 150-95-152-189 systemd[1]: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 02 22:54:13 150-95-152-189 systemd[1]: Started The nginx HTTP and reverse proxy server.
Nginxの設定ファイルがあっているか確認。
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
「Nginxの設定ファイルを変更したら起動しなくなった!」という場合はまず状態や設定ファイルが間違っていないか確認しましょう。