「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.png24.6KB

ConoHa VPSにログインします。
スクリーンショット 2019-12-04 1.35.57.png21KB
左側のメニューからDNSを選択します。
スクリーンショット 2019-12-04 2.34.03.png54.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の設定ファイルを変更したら起動しなくなった!」という場合はまず状態や設定ファイルが間違っていないか確認しましょう。

関連記事

CentOSにWordpressをインストールしてNginxで動かす方法【Virtual Host対応】
# はじめに 仕事でVPSサーバー上にWordpressを構築する機会があったので手順に残したいと思います。VPSサーバーでは既にRuby on Railsで作成したWebアプリが稼働していたので、NginxのVirtual Host機能で複数ド [...]
2019年12月10日 17:33
WebサーバーのVirtual Host機能とは?Nginxで試せるサンプルコード付きで解説【ドメイン取得不要】
# はじめに ひとつのWebサーバーで複数のWebアプリが動かせたら便利ですよね。 今回はひとつのWebサーバーで異なるドメインのWebアプリを動かすVirtual Host機能について解説します。インストール済みのNginxがすでに構築済みで [...]
2019年12月9日 16:27
【完全無料でSSL化】RailsアプリをNginxで動かす!Nginxのインストール方法から最低限しておきたい設定まで
RailsアプリをNginxで動かすために、Nginxをサーバーに導入する方法と最低限これだけはしておきたいという設定をまとめます。 • ローカル環境:macOS Catalina • サーバー環境:CentOS 7.7 Nginxインストール [...]
2019年12月5日 11:06
SSL通信時にセッションを暗号化する方法
以前、「Let's Encryptを使用したWebサーバーのSSL化」という記事を書きました。 実はこの設定だけでは不十分だったので、今回はその続きを書きます。 セッションが保存されない このポートフォリオサイトでは管理者のみがログインできる機能 [...]
2019年10月24日 17:12