一般にWebサイトのドメイン名にはwwwというサブドメインが付与されています。が、最近は短いurlが好まれるのか、サブドメインなしのアドレスもあったりします。
加えてSSL/TLS認証のありなしでプロトコルがhttpであったりhttpsであったり。。。
ドメインの正規化
このサイトも都合4通りのアクセス方法が存在します。まぁhttp通信を切り捨てたり、wwwなしのドメインを無効化したりしてもいいんですが、せっかく来てくれるのにねぇ。。。
というわけですべてのアクセスを受け入れたいわけですが、そうすると同じページへのアクセスが分散してしまって勿体ないわけです。見かけ上のアクセス数が減っちゃう。
そこでhttps://www.junk-works.science以外のアクセスをすべてこれに転送することにします。サイト作成準備のところでやった正規化です。
nginxの設定
nginx.confのひな形を示します。
# junk-works.science; web site
##########################################
server {
listen 80;
server_name .junk-works.science;
return 301 https://www.junk-works.science$request_uri;
}
server {
listen 443 ssl;
server_name junk-works.science;
ssl_certificate /usr/local/etc/ssl/www.junk-works.science.crt;
ssl_certificate_key /usr/local/etc/ssl/www.junk-works.science.key;
return 301 https://www.junk-works.science$request_uri;
}
server {
listen 443 ssl http2;
server_name www.junk-works.science;
ssl_certificate /usr/local/etc/ssl/www.junk-works.science.crt;
ssl_certificate_key /usr/local/etc/ssl/www.junk-works.science.key;
ssl_dhparam dhparam.pem;
ssl_ciphers ECDHE+AESGCM:DHE+AESGCM:HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains";
root /usr/local/www/junkworks;
index index.php index.html index.htm;
~locationブロックは省略~
}
serverブロックは3つ。最後のものがhttps://www.junk-works.scienceを受けるものです。
最初のserverブロックはserver_nameを.junk-works.scienceと、ドットから始めることでwwwありのアクセスもwwwなしのアクセスも、ポート80に入ってくるものは一旦すべて受けます。2番目のserverブロックではポート443に入ってくるwwwなしのアクセスを一旦受けます。
そのうえでいずれのブロックもreturn行で301ステータスを返してから、アクセスを最後のserverブロックへリダイレクトします。
なお2番目のserverブロックについてはデフォルトサーバーの指定でもあったようにサーバー証明書の指定が必要です。