LoginSignup
4
3

More than 5 years have passed since last update.

nginx の設定ファイルで正規表現を使って www. なしのドメイン名にリダイレクトさせる

Posted at

一つのサーバーに複数のドメイン名のウェブページを同居させることはよくある話だと思います。負荷のことを思えばドメイン名単位でサーバーを分けたほうが良いのでしょうが、さしたアクセスが見込めないウェブページを集約しても問題は起きないでしょう。

ただ www. つきでアクセスされた際に、www. なしのドメイン名へのリダイレクトをさせる処理をドメイン名単位で一つ一つ書いていくのは無駄です。

nginx の server_name ディレクティブでは正規表現を使えます。nginx が正規表現エンジンとして使っている PCRE では名前付きキャプチャに対応しているので次のように書けます。

/etc/nginx/sites-avalable/www.example.com.conf
server {
  listen 80;
  server_name "~^www\.(?<naked_domain>.*)$";

  set $proto $scheme;
  if ($http_x_forwarded_proto = "https") {
    set $proto $http_x_forwarded_proto;
  }
  if ($http_cloudfront_forwarded_proto = "https") {
    set $proto $http_cloudfront_forwarded_proto;
  }

  rewrite . $proto://$naked_domain$uri permanent;
}

上位に CloudFront や CloudFlare といった CDN が存在しない場合は、$proto 周りの小細工が不要になり、もう少し単純になります。nginx の設定ファイルは簡単に書けて良いですね。

ぜひご活用くださいませ。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3