なんとなく “www” あってもなくても同じページにアクセスできた方がいいよね……
www IN CNAME @
……とか設定していたんですが、これ google さんは manimani.cc と www.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_name に www.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 あたりの設定をいれても良いかもですね。