サブドメイン "www" へのアクセスをリダイレクトする

なんとなく “www” あってもなくても同じページにアクセスできた方がいいよね……

www IN CNAME @

……とか設定していたんですが、これ google さんは manimani.ccwww.manimani.cc を別のサイトとして認識するかも知れないとのこと。googleさん

google Search Console で設定入れて回避することもできるみたいですが、どうやらそれをやるためには “s” なし http の tcp:80 も開けないとダメなようで……却下です。1)

じゃあどうしようか、となった時に、どうやらメイン以外の URL に来たリクエストを 301 リダイレクトを返してメインの URL に誘導するのが手っ取り早く有効らしい。google さん

ふむ……nginx でもう一つホスト名ベースのバーチャルサーバー2)を立ててあげれば良さそう。

http {
  server {
    listen                          203.143.127.234:443;
    server_name                     manimani.cc;

    root                            /var/www/localhost/htdocs;

    ssl on;
    ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate
                /path/to/fullchain.pem;
    ssl_certificate_key
                /path/to/privkey.pem;
    ssl_dhparam                     /path/to/dhparam.pem;
    ssl_session_timeout             2h;
    ssl_session_cache               shared:SSL443:50m;
    ssl_session_tickets             on;
    ssl_prefer_server_ciphers       on;

    add_header
                Strict-Transport-Security
                'max-age=31536000; includeSubDomains;';
        :
        :

いまこんな設定が入っているので、server_namewww.manimani.cc を設定した server ディレクティブをもう1つ作ってあげれば良さそう。ほんで、そこにきたアクセスは全部まとめてサブドメインのない manimani.cc へのリダイレクトを返すようにします。

http {
  # 追加するサブドメイン付き URL を捌くバーチャルサーバー
  server {
    listen                          203.143.127.234:443;
    server_name                     www.manimani.cc;

    return 301 $scheme://manimani.cc$request_uri;

    ssl on;
    ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate
            /path/to/fullchain.pem;
    ssl_certificate_key
            /path/to/privkey.pem;
    ssl_dhparam                     /path/to/dhparam.pem;
    ssl_session_timeout             2h;
    ssl_session_cache               shared:SSL443:50m;
    ssl_session_tickets             on;
    ssl_prefer_server_ciphers       on;
    add_header
                Strict-Transport-Security
                'max-age=31536000; includeSubDomains;';
  }

  # もともとあったメイン URL の定義
  server {
    listen                          203.143.127.234:443;
    server_name                     manimani.cc;

    root                            /var/www/localhost/htdocs;
    :
    :

server_name www.manimani.cc; のバーチャルサーバーを作って、return 301 $scheme://manimani.cc$request_uri; の設定でとにかく問答無用でメインの url に飛ばします。うまく動いてるっぽいです。“www” 付きの url https://www.manimani.cc/wiki/manimani.cc/redirect_subdomain_www にアクセスしても、ちゃんと “www” なしにリダイレクトされます。

あとはリダイレクト専用バーチャルサーバーの方に access_log error_log あたりの設定をいれても良いかもですね。

1)
なにか特別な理由でもない限り https だけ開けとけばいいでしょ。イマドキ tcp:80 なんぞ要らん……という趣味。
2)
apache 的にはバーチャル“ホスト”ですね。
https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:manimani.cc:redirect_subdomain_www